Changeset 2204 for trunk/src/user32/win32wbase.cpp
- Timestamp:
- Dec 26, 1999, 6:30:20 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/win32wbase.cpp
r2202 r2204 1 /* $Id: win32wbase.cpp,v 1.11 8 1999-12-24 21:44:04 sandervlExp $ */1 /* $Id: win32wbase.cpp,v 1.119 1999-12-26 17:30:18 cbratschi Exp $ */ 2 2 /* 3 3 * Win32 Window Base Class for OS/2 … … 8 8 * Parts based on Wine Windows code (windows\win.c) 9 9 * 10 * Copyright 1993, 1994 Alexandre Julliard 10 * Copyright 1993, 1994, 1996 Alexandre Julliard 11 * 1995 Alex Korobka 11 12 * 12 13 * TODO: Not thread/process safe … … 146 147 fInternalMsg = FALSE; 147 148 fNoSizeMsg = FALSE; 148 fMovingChildren = FALSE;149 149 fIsDestroyed = FALSE; 150 150 fDestroyWindowCalled = FALSE; … … 190 190 flags = 0; 191 191 isIcon = FALSE; 192 lastHitTestVal = 0; 192 lastHitTestVal = HTOS_NORMAL; 193 fIgnoreHitTest = FALSE; 193 194 owner = NULL; 194 195 windowClass = 0; … … 777 778 ULONG Win32BaseWindow::MsgClose() 778 779 { 779 if(SendInternalMessageA(WM_CLOSE, 0, 0) == 0) { 780 dprintf(("Win32BaseWindow::MsgClose, app handles msg")); 781 return 0; //app handles this message 782 } 783 return 1; 780 return SendInternalMessageA(WM_CLOSE,0,0); 784 781 } 785 782 //****************************************************************************** … … 856 853 ULONG Win32BaseWindow::MsgPosChanging(LPARAM lp) 857 854 { 858 if(fNoSizeMsg || (getParent() && getParent()->InMovingChildren()))855 if(fNoSizeMsg) 859 856 return 1; 860 857 … … 865 862 ULONG Win32BaseWindow::MsgPosChanged(LPARAM lp) 866 863 { 867 if(fNoSizeMsg || (getParent() && getParent()->InMovingChildren()))864 if(fNoSizeMsg) 868 865 return 1; 869 866 … … 892 889 lastHitTestVal = SendInternalMessageA(WM_NCHITTEST, 0, MAKELONG((USHORT)msg->pt.x, (USHORT)msg->pt.y)); 893 890 dprintf2(("MsgHitTest returned %x", lastHitTestVal)); 894 return 1; //TODO: May need to change this 891 892 if (lastHitTestVal == HTERROR) 893 return HTOS_ERROR; 894 895 #if 0 //CB: problems with groupboxes, internal handling is better 896 if (lastHitTestVal == HTTRANSPARENT) 897 return HTOS_TRANSPARENT; 898 #endif 899 900 return HTOS_NORMAL; 895 901 } 896 902 //****************************************************************************** … … 967 973 968 974 dprintf(("MsgButton at (%d,%d)", msg->pt.x, msg->pt.y)); 969 switch(msg->message) { //TODO: double click also?975 switch(msg->message) { 970 976 case WM_LBUTTONDBLCLK: 971 977 case WM_RBUTTONDBLCLK: 972 978 case WM_MBUTTONDBLCLK: 979 case WM_NCLBUTTONDBLCLK: 980 case WM_NCRBUTTONDBLCLK: 981 case WM_NCMBUTTONDBLCLK: 973 982 if (!(windowClass && windowClass->getClassLongA(GCL_STYLE) & CS_DBLCLKS)) 974 983 { 975 984 msg->message = msg->message - (WM_LBUTTONDBLCLK - WM_LBUTTONDOWN); //dblclick -> down 976 985 MsgButton(msg); 986 msg->message++; //button-up 977 987 return MsgButton(msg); 978 988 } … … 981 991 case WM_RBUTTONDOWN: 982 992 case WM_MBUTTONDOWN: 993 case WM_NCLBUTTONDOWN: 994 case WM_NCRBUTTONDOWN: 995 case WM_NCMBUTTONDOWN: 983 996 fClick = TRUE; 984 997 break; … … 1236 1249 } 1237 1250 /*********************************************************************** 1251 * NC_HandleNCLButtonDown 1252 * 1253 * Handle a WM_NCLBUTTONDOWN message. Called from DefWindowProc(). 1254 */ 1255 LONG Win32BaseWindow::HandleNCLButtonDown(WPARAM wParam,LPARAM lParam) 1256 { 1257 switch(wParam) /* Hit test */ 1258 { 1259 case HTCAPTION: 1260 SendInternalMessageA(WM_SYSCOMMAND,SC_MOVE+HTCAPTION,lParam); 1261 break; 1262 1263 case HTSYSMENU: 1264 SendInternalMessageA(WM_SYSCOMMAND,SC_MOUSEMENU+HTSYSMENU,lParam); 1265 break; 1266 1267 case HTMENU: 1268 SendInternalMessageA(WM_SYSCOMMAND,SC_MOUSEMENU,lParam); 1269 break; 1270 1271 case HTHSCROLL: 1272 SendInternalMessageA(WM_SYSCOMMAND,SC_HSCROLL+HTHSCROLL,lParam); 1273 break; 1274 1275 case HTVSCROLL: 1276 SendInternalMessageA(WM_SYSCOMMAND,SC_VSCROLL+HTVSCROLL,lParam); 1277 break; 1278 1279 case HTLEFT: 1280 case HTRIGHT: 1281 case HTTOP: 1282 case HTTOPLEFT: 1283 case HTTOPRIGHT: 1284 case HTBOTTOM: 1285 case HTBOTTOMLEFT: 1286 case HTBOTTOMRIGHT: 1287 /* make sure hittest fits into 0xf and doesn't overlap with HTSYSMENU */ 1288 SendInternalMessageA(WM_SYSCOMMAND,SC_SIZE+wParam-2,lParam); 1289 break; 1290 case HTBORDER: 1291 break; 1292 } 1293 1294 return 0; 1295 } 1296 //****************************************************************************** 1297 //****************************************************************************** 1298 LONG Win32BaseWindow::HandleNCLButtonUp(WPARAM wParam,LPARAM lParam) 1299 { 1300 switch(wParam) /* Hit test */ 1301 { 1302 case HTMINBUTTON: 1303 SendInternalMessageA(WM_SYSCOMMAND,SC_MINIMIZE,lParam); 1304 break; 1305 1306 case HTMAXBUTTON: 1307 SendInternalMessageA(WM_SYSCOMMAND,SC_MAXIMIZE,lParam); 1308 break; 1309 1310 case HTCLOSE: 1311 SendInternalMessageA(WM_SYSCOMMAND,SC_CLOSE,lParam); 1312 break; 1313 } 1314 1315 return 0; 1316 } 1317 /*********************************************************************** 1318 * NC_HandleNCLButtonDblClk 1319 * 1320 * Handle a WM_NCLBUTTONDBLCLK message. Called from DefWindowProc(). 1321 */ 1322 LONG Win32BaseWindow::HandleNCLButtonDblClk(WPARAM wParam,LPARAM lParam) 1323 { 1324 /* 1325 * if this is an icon, send a restore since we are handling 1326 * a double click 1327 */ 1328 if (dwStyle & WS_MINIMIZE) 1329 { 1330 SendInternalMessageA(WM_SYSCOMMAND,SC_RESTORE,lParam); 1331 return 0; 1332 } 1333 1334 switch(wParam) /* Hit test */ 1335 { 1336 case HTCAPTION: 1337 /* stop processing if WS_MAXIMIZEBOX is missing */ 1338 if (dwStyle & WS_MAXIMIZEBOX) 1339 SendInternalMessageA(WM_SYSCOMMAND, 1340 (dwStyle & WS_MAXIMIZE) ? SC_RESTORE : SC_MAXIMIZE, 1341 lParam); 1342 break; 1343 1344 case HTSYSMENU: 1345 if (!(GetClassWord(Win32Hwnd,GCW_STYLE) & CS_NOCLOSE)) 1346 SendInternalMessageA(WM_SYSCOMMAND,SC_CLOSE,lParam); 1347 break; 1348 1349 case HTHSCROLL: 1350 SendInternalMessageA(WM_SYSCOMMAND,SC_HSCROLL+HTHSCROLL,lParam); 1351 break; 1352 1353 case HTVSCROLL: 1354 SendInternalMessageA(WM_SYSCOMMAND,SC_VSCROLL+HTVSCROLL,lParam); 1355 break; 1356 } 1357 1358 return 0; 1359 } 1360 /*********************************************************************** 1238 1361 * NC_HandleSysCommand 1239 1362 * … … 1251 1374 switch (uCommand) 1252 1375 { 1253 #if 0 1376 1254 1377 case SC_SIZE: 1378 { 1379 DWORD flags = 0; 1380 1381 switch ((wParam & 0xF)+2) 1382 { 1383 case HTLEFT: 1384 flags = TFOS_LEFT; 1385 break; 1386 1387 case HTRIGHT: 1388 flags = TFOS_RIGHT; 1389 break; 1390 1391 case HTTOP: 1392 flags = TFOS_TOP; 1393 break; 1394 1395 case HTTOPLEFT: 1396 flags = TFOS_TOP | TFOS_LEFT; 1397 break; 1398 1399 case HTTOPRIGHT: 1400 flags = TFOS_TOP | TFOS_RIGHT; 1401 break; 1402 1403 case HTBOTTOM: 1404 flags = TFOS_BOTTOM; 1405 break; 1406 1407 case HTBOTTOMLEFT: 1408 flags = TFOS_BOTTOM | TFOS_LEFT; 1409 break; 1410 1411 case HTBOTTOMRIGHT: 1412 flags = TFOS_BOTTOM | TFOS_RIGHT; 1413 break; 1414 } 1415 if (flags) FrameTrackFrame(this,flags); 1416 break; 1417 } 1418 1255 1419 case SC_MOVE: 1256 NC_DoSizeMove( hwnd, wParam ); 1257 break; 1258 #endif 1420 FrameTrackFrame(this,TFOS_MOVE); 1421 break; 1259 1422 1260 1423 case SC_MINIMIZE: … … 1362 1525 //****************************************************************************** 1363 1526 //****************************************************************************** 1527 LRESULT Win32BaseWindow::DefWndPrint(HDC hdc,ULONG uFlags) 1528 { 1529 /* 1530 * Visibility flag. 1531 */ 1532 if ( (uFlags & PRF_CHECKVISIBLE) && 1533 !IsWindowVisible() ) 1534 return 0; 1535 1536 /* 1537 * Unimplemented flags. 1538 */ 1539 if ( (uFlags & PRF_CHILDREN) || 1540 (uFlags & PRF_OWNED) || 1541 (uFlags & PRF_NONCLIENT) ) 1542 { 1543 dprintf(("WM_PRINT message with unsupported flags\n")); 1544 } 1545 1546 /* 1547 * Background 1548 */ 1549 if ( uFlags & PRF_ERASEBKGND) 1550 SendInternalMessageA(WM_ERASEBKGND, (WPARAM)hdc, 0); 1551 1552 /* 1553 * Client area 1554 */ 1555 if ( uFlags & PRF_CLIENT) 1556 SendInternalMessageA(WM_PRINTCLIENT, (WPARAM)hdc, PRF_CLIENT); 1557 1558 1559 return 0; 1560 } 1561 //****************************************************************************** 1562 //****************************************************************************** 1364 1563 LRESULT Win32BaseWindow::DefWindowProcA(UINT Msg, WPARAM wParam, LPARAM lParam) 1365 1564 { … … 1411 1610 case WM_SETREDRAW: 1412 1611 { 1413 DWORD oldStyle = getStyle(); 1414 1415 if(wParam) 1416 setStyle(getStyle() | WS_VISIBLE); 1417 else setStyle(getStyle() & ~WS_VISIBLE); 1418 1419 updateWindowStyle(getExStyle(), oldStyle); 1420 1421 return 0; //TODO 1422 } 1612 if (wParam) 1613 { 1614 setStyle(getStyle() | WS_VISIBLE); 1615 OSLibWinEnableWindowUpdate(OS2HwndFrame,TRUE); 1616 } else 1617 { 1618 if (getStyle() & WS_VISIBLE) 1619 { 1620 setStyle(getStyle() & ~WS_VISIBLE); 1621 OSLibWinEnableWindowUpdate(OS2HwndFrame,FALSE); 1622 } 1623 } 1624 return 0; 1625 } 1626 1627 case WM_NCPAINT: 1628 return 0; 1629 1630 case WM_NCACTIVATE: 1631 return TRUE; 1632 1423 1633 case WM_NCCREATE: 1424 1634 return(TRUE); 1635 1636 case WM_NCDESTROY: 1637 return 0; 1425 1638 1426 1639 case WM_NCCALCSIZE: … … 1458 1671 return (LOWORD(lParam) == HTCAPTION) ? MA_NOACTIVATE : MA_ACTIVATE; 1459 1672 } 1673 1674 case WM_ACTIVATE: 1675 //CB: todo 1676 return 0; 1677 1460 1678 case WM_SETCURSOR: 1461 1679 { … … 1470 1688 if (wParam == Win32Hwnd) 1471 1689 { 1472 HCURSOR hCursor = windowClass ? windowClass->getCursor():LoadCursorA(0,IDC_ARROWA); 1473 1474 if (hCursor) SetCursor(hCursor); 1475 return 1; 1690 HCURSOR hCursor; 1691 1692 switch(lastHitTestVal) 1693 { 1694 case HTLEFT: 1695 case HTRIGHT: 1696 hCursor = LoadCursorA(0,IDC_SIZEWEA); 1697 break; 1698 1699 case HTTOP: 1700 case HTBOTTOM: 1701 hCursor = LoadCursorA(0,IDC_SIZENSA); 1702 break; 1703 1704 case HTTOPLEFT: 1705 case HTBOTTOMRIGHT: 1706 hCursor = LoadCursorA(0,IDC_SIZENWSEA); 1707 break; 1708 1709 case HTTOPRIGHT: 1710 case HTBOTTOMLEFT: 1711 hCursor = LoadCursorA(0,IDC_SIZENESWA); 1712 break; 1713 1714 default: 1715 hCursor = windowClass ? windowClass->getCursor():LoadCursorA(0,IDC_ARROWA); 1716 break; 1717 } 1718 1719 if (hCursor) 1720 { 1721 SetCursor(hCursor); 1722 return 1; 1723 } else return 0; 1476 1724 } else return 0; 1477 1725 } 1726 1478 1727 case WM_MOUSEMOVE: 1479 return 0; //we do our own cursor handling1728 return 0; 1480 1729 1481 1730 case WM_WINDOWPOSCHANGED: … … 1525 1774 return 1; 1526 1775 } 1776 1777 case WM_PRINT: 1778 return DefWndPrint(wParam,lParam); 1779 1527 1780 case WM_PAINTICON: 1528 1781 case WM_PAINT: … … 1548 1801 1549 1802 case WM_NCLBUTTONDOWN: 1803 return HandleNCLButtonDown(wParam,lParam); 1804 1550 1805 case WM_NCLBUTTONUP: 1806 return HandleNCLButtonUp(wParam,lParam); 1807 1551 1808 case WM_NCLBUTTONDBLCLK: 1552 case WM_NCRBUTTONUP: 1809 return HandleNCLButtonDblClk(wParam,lParam); 1810 1553 1811 case WM_NCRBUTTONDOWN: 1554 1812 case WM_NCRBUTTONDBLCLK: 1555 1813 case WM_NCMBUTTONDOWN: 1814 case WM_NCMBUTTONDBLCLK: 1815 if (lastHitTestVal == HTERROR) MessageBeep(MB_ICONEXCLAMATION); 1816 return 0; 1817 1818 case WM_NCRBUTTONUP: 1556 1819 case WM_NCMBUTTONUP: 1557 case WM_NCMBUTTONDBLCLK: 1558 return 0; //TODO: Send WM_SYSCOMMAND if required 1559 1560 case WM_NCHITTEST: //TODO: Calculate position of 1561 return HTCLIENT; 1820 return 0; 1821 1822 case WM_NCHITTEST: 1823 { 1824 POINT point; 1825 1826 point.x = (SHORT)LOWORD(lParam); 1827 point.y = (SHORT)HIWORD(lParam); 1828 1829 return FrameHitTest(this,point.x,point.y); 1830 } 1562 1831 1563 1832 case WM_SYSCOMMAND: … … 1612 1881 return 0; 1613 1882 1883 case WM_SHOWWINDOW: 1884 if (!lParam) return 0; /* sent from ShowWindow */ 1885 if (!(dwStyle & WS_POPUP) || !owner) return 0; 1886 if ((dwStyle & WS_VISIBLE) && wParam) return 0; 1887 else if (!(dwStyle & WS_VISIBLE) && !wParam) return 0; 1888 ShowWindow(wParam ? SW_SHOWNOACTIVATE : SW_HIDE); 1889 return 0; 1890 1891 case WM_CANCELMODE: 1892 //if (getParent() == windowDesktop) EndMenu(); 1893 if (GetCapture() == Win32Hwnd) ReleaseCapture(); 1894 return 0; 1895 1896 case WM_DROPOBJECT: 1897 return DRAG_FILE; 1898 1899 case WM_QUERYDROPOBJECT: 1900 if (dwExStyle & WS_EX_ACCEPTFILES) return 1; 1901 return 0; 1902 1903 case WM_QUERYDRAGICON: 1904 { 1905 HICON hIcon = windowClass->getCursor(); 1906 UINT len; 1907 1908 if(hIcon) return (LRESULT)hIcon; 1909 for(len = 1; len < 64; len++) 1910 { 1911 hIcon = LoadIconA(hInstance,MAKEINTRESOURCEA(len)); 1912 if(hIcon) 1913 return (LRESULT)hIcon; 1914 } 1915 return (LRESULT)LoadIconA(0,IDI_APPLICATIONA); 1916 } 1917 1614 1918 case WM_QUERYOPEN: 1615 1919 case WM_QUERYENDSESSION: … … 1637 1941 return result; 1638 1942 } 1943 1639 1944 case WM_NOTIFY: 1640 1945 return 0; //comctl32 controls expect this … … 1644 1949 return 0; 1645 1950 } 1646 return 1; 1951 return 1; //CB: shouldn't this be 0? 1647 1952 } 1648 1953 } … … 2744 3049 if(IsWindowDestroyed()) return; 2745 3050 2746 if (dwStyle != oldStyle) OSLibSetWindowStyle(OS2HwndFrame, dwStyle, fTaskList); 3051 //CB: todo: dwExStyle, creating new frame controls, destroy not used, WS_VISIBLE, ... 3052 // write test cases 3053 if (dwStyle & 0xFFFF0000 != oldStyle & 0xFFFF0000) 3054 OSLibSetWindowStyle(OS2HwndFrame, dwStyle, fTaskList); 2747 3055 } 2748 3056 //****************************************************************************** … … 2780 3088 ss.styleOld = getStyle(); 2781 3089 ss.styleNew = value | (ss.styleOld & (WS_VISIBLE | WS_CHILD)); 2782 dprintf(("SetWindowLong GWL_STYLE %x old %x new style %x", getWindowHandle(), getStyle(), value));3090 dprintf(("SetWindowLong GWL_STYLE %x old %x new style %x", getWindowHandle(), ss.styleOld, ss.styleNew)); 2783 3091 SendInternalMessageA(WM_STYLECHANGING,GWL_STYLE,(LPARAM)&ss); 2784 3092 setStyle(ss.styleNew);
Note:
See TracChangeset
for help on using the changeset viewer.