- Timestamp:
- Jan 11, 2000, 11:39:00 AM (26 years ago)
- Location:
- trunk/src/user32/new
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/new/loadres.cpp
r2400 r2403 1 /* $Id: loadres.cpp,v 1.1 5 2000-01-10 23:29:12 sandervl Exp $ */1 /* $Id: loadres.cpp,v 1.16 2000-01-11 10:38:32 sandervl Exp $ */ 2 2 3 3 /* … … 252 252 case OBM_OLD_LFARROW: 253 253 case OBM_CHECK: 254 case OBM_RADIOCHECK: 254 255 case OBM_CHECKBOXES: 255 256 case OBM_BTNCORNERS: -
trunk/src/user32/new/makefile
r2396 r2403 1 # $Id: makefile,v 1.5 5 2000-01-10 17:18:07 cbratschiExp $1 # $Id: makefile,v 1.56 2000-01-11 10:38:33 sandervl Exp $ 2 2 3 3 # … … 43 43 win32wbasepos.obj oslibres.obj dummy.obj dc.obj timer.obj \ 44 44 caret.obj resource.obj winproc.obj text.obj oslibmsgtranslate.obj \ 45 windlgmsg.obj windlg.obj win32wdesktop.obj 45 windlgmsg.obj windlg.obj win32wdesktop.obj win32wbasenonclient.obj 46 46 47 47 … … 69 69 $(PDWIN32_LIB)/libuls.lib 70 70 $(PDWIN32_LIB)/odincrt.lib 71 $(PDWIN32_LIB)/shell32.lib72 71 OS2386.LIB 73 72 $(RTLLIB_O) … … 133 132 win32class.obj: win32class.cpp win32class.h win32wbase.h win32dlg.h gen_object.h $(PDWIN32_INCLUDE)\heapshared.h oslibwin.h win32wndchild.h $(PDWIN32_INCLUDE)\win\winproc.h 134 133 win32wbase.obj: win32wbase.cpp win32class.h win32wbase.h win32dlg.h gen_object.h $(PDWIN32_INCLUDE)\heapshared.h oslibwin.h win32wndchild.h $(PDWIN32_INCLUDE)\winres.h oslibres.h win32wndhandle.h oslibdos.h dc.h pmframe.h win32wdesktop.h controls.h winmouse.h $(PDWIN32_INCLUDE)\win\winproc.h $(PDWIN32_INCLUDE)\win\hook.h oslibmsg.h 134 win32wbasenonclient.obj: win32wbasenonclient.cpp win32class.h win32wbase.h win32dlg.h gen_object.h $(PDWIN32_INCLUDE)\heapshared.h oslibwin.h win32wndchild.h $(PDWIN32_INCLUDE)\winres.h oslibres.h win32wndhandle.h oslibdos.h dc.h controls.h oslibmsg.h pmframe.h 135 135 win32wbasepos.obj: win32wbasepos.cpp win32class.h win32wbase.h win32dlg.h gen_object.h $(PDWIN32_INCLUDE)\heapshared.h oslibwin.h win32wndchild.h $(PDWIN32_INCLUDE)\winres.h oslibres.h win32wndhandle.h oslibdos.h dc.h pmframe.h win32wdesktop.h 136 136 win32wnd.obj: win32wnd.cpp win32class.h win32wbase.h win32wnd.h win32dlg.h gen_object.h $(PDWIN32_INCLUDE)\heapshared.h oslibwin.h win32wndchild.h $(PDWIN32_INCLUDE)\winres.h oslibres.h win32wndhandle.h oslibdos.h -
trunk/src/user32/new/user32.cpp
r2335 r2403 1 /* $Id: user32.cpp,v 1.2 4 2000-01-05 21:25:06 cbratschiExp $ */1 /* $Id: user32.cpp,v 1.25 2000-01-11 10:38:33 sandervl Exp $ */ 2 2 3 3 /* … … 851 851 break; 852 852 } 853 dprintf (("USER32: GetSystemMetrics %d returned %d\n", nIndex, rc));853 dprintf2(("USER32: GetSystemMetrics %d returned %d\n", nIndex, rc)); 854 854 return(rc); 855 855 } -
trunk/src/user32/new/win32wbase.cpp
r2401 r2403 1 /* $Id: win32wbase.cpp,v 1.3 0 2000-01-10 23:37:23sandervl Exp $ */1 /* $Id: win32wbase.cpp,v 1.31 2000-01-11 10:38:34 sandervl Exp $ */ 2 2 /* 3 3 * Win32 Window Base Class for OS/2 4 4 * 5 * Copyright 1998- 1999Sander van Leeuwen (sandervl@xs4all.nl)5 * Copyright 1998-2000 Sander van Leeuwen (sandervl@xs4all.nl) 6 6 * Copyright 1999 Daniela Engert (dani@ngrt.de) 7 * Copyright 2000 Christoph Bratschi (cbratschi@datacomm.ch) 7 8 * 8 9 * Parts based on Wine Windows code (windows\win.c) … … 43 44 #include "winmouse.h" 44 45 #include <win\hook.h> 45 #include <shellapi.h>46 46 #include <menu.h> 47 47 #define INCL_TIMERWIN32 … … 92 92 //For quick lookup of current process id 93 93 static ULONG currentProcessId = -1; 94 95 static HBITMAP hbitmapClose = 0;96 static HBITMAP hbitmapCloseD = 0;97 static HBITMAP hbitmapMinimize = 0;98 static HBITMAP hbitmapMinimizeD = 0;99 static HBITMAP hbitmapMaximize = 0;100 static HBITMAP hbitmapMaximizeD = 0;101 static HBITMAP hbitmapRestore = 0;102 static HBITMAP hbitmapRestoreD = 0;103 104 BYTE lpGrayMask[] = { 0xAA, 0xA0,105 0x55, 0x50,106 0xAA, 0xA0,107 0x55, 0x50,108 0xAA, 0xA0,109 0x55, 0x50,110 0xAA, 0xA0,111 0x55, 0x50,112 0xAA, 0xA0,113 0x55, 0x50};114 94 115 95 //****************************************************************************** … … 962 942 BOOL fClick = FALSE; 963 943 964 dprintf(("MsgButton at (%d,%d)", msg->pt.x, msg->pt.y));944 // dprintf(("MsgButton at (%d,%d)", msg->pt.x, msg->pt.y)); 965 945 switch(msg->message) { 966 946 case WM_LBUTTONDBLCLK: … … 1213 1193 //****************************************************************************** 1214 1194 //****************************************************************************** 1215 LONG Win32BaseWindow::HandleNCActivate(WPARAM wParam)1216 {1217 WORD wStateChange;1218 1219 if( wParam ) wStateChange = !(flags & WIN_NCACTIVATED);1220 else wStateChange = flags & WIN_NCACTIVATED;1221 1222 if( wStateChange )1223 {1224 if (wParam) flags |= WIN_NCACTIVATED;1225 else flags &= ~WIN_NCACTIVATED;1226 1227 if(!(dwStyle & WS_MINIMIZE))1228 DoNCPaint((HRGN)1,FALSE);1229 }1230 1231 return TRUE;1232 }1233 //******************************************************************************1234 //******************************************************************************1235 VOID Win32BaseWindow::TrackMinMaxBox(WORD wParam)1236 {1237 MSG msg;1238 HDC hdc;1239 BOOL pressed = TRUE;1240 UINT state;1241 1242 if (wParam == HTMINBUTTON)1243 {1244 /* If the style is not present, do nothing */1245 if (!(dwStyle & WS_MINIMIZEBOX))1246 return;1247 /* Check if the sysmenu item for minimize is there */1248 state = GetMenuState(hSysMenu,SC_MINIMIZE,MF_BYCOMMAND);1249 } else1250 {1251 /* If the style is not present, do nothing */1252 if (!(dwStyle & WS_MAXIMIZEBOX))1253 return;1254 /* Check if the sysmenu item for maximize is there */1255 state = GetMenuState(hSysMenu, SC_MAXIMIZE, MF_BYCOMMAND);1256 }1257 SetCapture(Win32Hwnd);1258 hdc = GetWindowDC(Win32Hwnd);1259 if (wParam == HTMINBUTTON)1260 DrawMinButton(hdc,TRUE,FALSE);1261 else1262 DrawMaxButton(hdc,TRUE,FALSE);1263 do1264 {1265 BOOL oldstate = pressed;1266 1267 GetMessageA(&msg,Win32Hwnd,0,0);1268 pressed = (HandleNCHitTest(msg.pt) == wParam);1269 if (pressed != oldstate)1270 {1271 if (wParam == HTMINBUTTON)1272 DrawMinButton(hdc,pressed,FALSE);1273 else1274 DrawMaxButton(hdc,pressed,FALSE);1275 }1276 } while (msg.message != WM_LBUTTONUP);1277 if (wParam == HTMINBUTTON)1278 DrawMinButton(hdc,FALSE,FALSE);1279 else1280 DrawMaxButton(hdc,FALSE,FALSE);1281 ReleaseCapture();1282 ReleaseDC(Win32Hwnd,hdc);1283 /* If the item minimize or maximize of the sysmenu are not there */1284 /* or if the style is not present, do nothing */1285 if ((!pressed) || (state == 0xFFFFFFFF))1286 return;1287 if (wParam == HTMINBUTTON)1288 SendInternalMessageA(WM_SYSCOMMAND,SC_MINIMIZE,*(LPARAM*)&msg.pt);1289 else1290 SendInternalMessageA(WM_SYSCOMMAND,IsZoomed(Win32Hwnd) ? SC_RESTORE:SC_MAXIMIZE,*(LPARAM*)&msg.pt);1291 }1292 //******************************************************************************1293 //******************************************************************************1294 VOID Win32BaseWindow::TrackCloseButton(WORD wParam)1295 {1296 MSG msg;1297 HDC hdc;1298 BOOL pressed = TRUE;1299 UINT state;1300 1301 if (hSysMenu == 0)1302 return;1303 state = GetMenuState(hSysMenu, SC_CLOSE, MF_BYCOMMAND);1304 /* If the item close of the sysmenu is disabled or not there do nothing */1305 if((state & MF_DISABLED) || (state & MF_GRAYED) || (state == 0xFFFFFFFF))1306 return;1307 hdc = GetWindowDC(Win32Hwnd);1308 SetCapture(Win32Hwnd);1309 DrawCloseButton(hdc,TRUE,FALSE);1310 do1311 {1312 BOOL oldstate = pressed;1313 1314 GetMessageA(&msg,Win32Hwnd,0,0);1315 pressed = (HandleNCHitTest(msg.pt) == wParam);1316 if (pressed != oldstate)1317 DrawCloseButton(hdc, pressed, FALSE);1318 } while (msg.message != WM_LBUTTONUP);1319 DrawCloseButton(hdc,FALSE,FALSE);1320 ReleaseCapture();1321 ReleaseDC(Win32Hwnd,hdc);1322 if (!pressed) return;1323 SendInternalMessageA(WM_SYSCOMMAND,SC_CLOSE,*(LPARAM*)&msg.pt);1324 }1325 //******************************************************************************1326 //******************************************************************************1327 VOID Win32BaseWindow::TrackScrollBar(WPARAM wParam,POINT pt)1328 {1329 INT scrollbar;1330 MSG msg;1331 1332 if ((wParam & 0xfff0) == SC_HSCROLL)1333 {1334 if ((wParam & 0x0f) != HTHSCROLL) return;1335 scrollbar = SB_HORZ;1336 } else /* SC_VSCROLL */1337 {1338 if ((wParam & 0x0f) != HTVSCROLL) return;1339 scrollbar = SB_VERT;1340 }1341 1342 pt.x -= rectWindow.left;1343 pt.y -= rectWindow.top;1344 SCROLL_HandleScrollEvent(Win32Hwnd,0,MAKELONG(pt.x,pt.y),scrollbar,WM_LBUTTONDOWN);1345 if (GetCapture() != Win32Hwnd) return;1346 do1347 {1348 GetMessageA(&msg,Win32Hwnd,0,0);1349 switch(msg.message)1350 {1351 case WM_LBUTTONUP:1352 case WM_MOUSEMOVE:1353 pt.x = msg.pt.x-rectWindow.left;1354 pt.y = msg.pt.y-rectWindow.top;1355 msg.lParam = MAKELONG(pt.x,pt.y);1356 case WM_SYSTIMER:1357 SCROLL_HandleScrollEvent(Win32Hwnd,msg.wParam,msg.lParam,scrollbar,msg.message);1358 break;1359 1360 default:1361 TranslateMessage(&msg);1362 DispatchMessageA(&msg);1363 break;1364 }1365 if (!IsWindow())1366 {1367 ReleaseCapture();1368 break;1369 }1370 } while (msg.message != WM_LBUTTONUP);1371 }1372 //******************************************************************************1373 //******************************************************************************1374 LONG Win32BaseWindow::HandleNCLButtonDown(WPARAM wParam,LPARAM lParam)1375 {1376 switch(wParam) /* Hit test */1377 {1378 case HTCAPTION:1379 SetActiveWindow();1380 if (GetActiveWindow() == Win32Hwnd)1381 SendInternalMessageA(WM_SYSCOMMAND,SC_MOVE+HTCAPTION,lParam);1382 break;1383 1384 case HTSYSMENU:1385 if(dwStyle & WS_SYSMENU )1386 {1387 if( !(dwStyle & WS_MINIMIZE) )1388 {1389 HDC hDC = GetWindowDC(Win32Hwnd);1390 DrawSysButton(hDC,TRUE);1391 ReleaseDC(Win32Hwnd,hDC);1392 }1393 SendInternalMessageA(WM_SYSCOMMAND,SC_MOUSEMENU+HTSYSMENU,lParam);1394 }1395 break;1396 1397 case HTMENU:1398 SendInternalMessageA(WM_SYSCOMMAND,SC_MOUSEMENU,lParam);1399 break;1400 1401 case HTHSCROLL:1402 SendInternalMessageA(WM_SYSCOMMAND,SC_HSCROLL+HTHSCROLL,lParam);1403 break;1404 1405 case HTVSCROLL:1406 SendInternalMessageA(WM_SYSCOMMAND,SC_VSCROLL+HTVSCROLL,lParam);1407 break;1408 1409 case HTMINBUTTON:1410 case HTMAXBUTTON:1411 TrackMinMaxBox(wParam);1412 break;1413 1414 case HTCLOSE:1415 TrackCloseButton(wParam);1416 break;1417 1418 case HTLEFT:1419 case HTRIGHT:1420 case HTTOP:1421 case HTTOPLEFT:1422 case HTTOPRIGHT:1423 case HTBOTTOM:1424 case HTBOTTOMLEFT:1425 case HTBOTTOMRIGHT:1426 /* make sure hittest fits into 0xf and doesn't overlap with HTSYSMENU */1427 SendInternalMessageA(WM_SYSCOMMAND,SC_SIZE+wParam-2,lParam);1428 break;1429 case HTBORDER:1430 break;1431 }1432 1433 return 0;1434 }1435 //******************************************************************************1436 //******************************************************************************1437 BOOL Win32BaseWindow::WindowNeedsWMBorder()1438 {1439 if (!(dwStyle & WS_CHILD) &&1440 //Options.managed && //CB: to check1441 !(dwExStyle & WS_EX_TOOLWINDOW) &&1442 ( ((dwStyle & WS_CAPTION) == WS_CAPTION) ||1443 (dwStyle & WS_THICKFRAME)))1444 return TRUE;1445 if (dwExStyle & WS_EX_TRAYWINDOW)1446 return TRUE;1447 return FALSE;1448 }1449 //******************************************************************************1450 //******************************************************************************1451 VOID Win32BaseWindow::AdjustRectOuter(LPRECT rect,BOOL menu)1452 {1453 if(dwStyle & WS_ICONIC) return;1454 1455 /* Decide if the window will be managed (see CreateWindowEx) */1456 //if (!WindowNeedsWMBorder()) //CB: check Options.managed1457 {1458 if (HAS_THICKFRAME(dwStyle,dwExStyle ))1459 InflateRect( rect, GetSystemMetrics(SM_CXFRAME), GetSystemMetrics(SM_CYFRAME) );1460 else1461 if (HAS_DLGFRAME( dwStyle, dwExStyle ))1462 InflateRect(rect, GetSystemMetrics(SM_CXDLGFRAME), GetSystemMetrics(SM_CYDLGFRAME) );1463 else1464 if (HAS_THINFRAME( dwStyle ))1465 InflateRect( rect, GetSystemMetrics(SM_CXBORDER), GetSystemMetrics(SM_CYBORDER));1466 1467 if ((dwStyle & WS_CAPTION) == WS_CAPTION)1468 {1469 if (dwExStyle & WS_EX_TOOLWINDOW)1470 rect->top -= GetSystemMetrics(SM_CYSMCAPTION);1471 else1472 rect->top -= GetSystemMetrics(SM_CYCAPTION);1473 }1474 }1475 1476 if (menu)1477 rect->top -= GetSystemMetrics(SM_CYMENU);1478 }1479 //******************************************************************************1480 //******************************************************************************1481 VOID Win32BaseWindow::AdjustRectInner(LPRECT rect)1482 {1483 if(dwStyle & WS_ICONIC) return;1484 1485 if (dwExStyle & WS_EX_CLIENTEDGE)1486 InflateRect (rect, GetSystemMetrics(SM_CXEDGE), GetSystemMetrics(SM_CYEDGE));1487 1488 if (dwExStyle & WS_EX_STATICEDGE)1489 InflateRect (rect, GetSystemMetrics(SM_CXBORDER), GetSystemMetrics(SM_CYBORDER));1490 1491 if (dwStyle & WS_VSCROLL) rect->right += GetSystemMetrics(SM_CXVSCROLL);1492 if (dwStyle & WS_HSCROLL) rect->bottom += GetSystemMetrics(SM_CYHSCROLL);1493 }1494 //******************************************************************************1495 //******************************************************************************1496 LONG Win32BaseWindow::HandleNCCalcSize(BOOL calcValidRects,RECT *winRect)1497 {1498 RECT tmpRect = { 0, 0, 0, 0 },*clientRect;1499 LONG result = WVR_ALIGNTOP | WVR_ALIGNLEFT;1500 UINT style;1501 1502 if (!calcValidRects) return 0;1503 1504 style = (UINT) GetClassLongA(Win32Hwnd,GCL_STYLE);1505 1506 if (style & CS_VREDRAW) result |= WVR_VREDRAW;1507 if (style & CS_HREDRAW) result |= WVR_HREDRAW;1508 1509 clientRect = &((NCCALCSIZE_PARAMS*)winRect)->rgrc[2];1510 *clientRect = rectWindow;1511 if (getParent()) mapWin32Rect(OSLIB_HWND_DESKTOP,getParent()->getOS2WindowHandle(),clientRect);1512 1513 if(!(dwStyle & WS_MINIMIZE))1514 {1515 AdjustRectOuter(&tmpRect,FALSE);1516 1517 clientRect->left -= tmpRect.left;1518 clientRect->top -= tmpRect.top;1519 clientRect->right -= tmpRect.right;1520 clientRect->bottom -= tmpRect.bottom;1521 1522 if (HAS_MENU())1523 {1524 clientRect->top +=1525 MENU_GetMenuBarHeight(Win32Hwnd,1526 winRect->right - winRect->left,1527 -tmpRect.left, -tmpRect.top ) + 1;1528 }1529 1530 SetRect (&tmpRect, 0, 0, 0, 0);1531 AdjustRectInner(&tmpRect);1532 clientRect->left -= tmpRect.left;1533 clientRect->top -= tmpRect.top;1534 clientRect->right -= tmpRect.right;1535 clientRect->bottom -= tmpRect.bottom;1536 }1537 1538 return result;1539 }1540 //******************************************************************************1541 //******************************************************************************1542 LONG Win32BaseWindow::HandleNCHitTest(POINT pt)1543 {1544 RECT rect = rectWindow;1545 1546 if (!PtInRect(&rect,pt)) return HTNOWHERE;1547 1548 if (dwStyle & WS_MINIMIZE) return HTCAPTION;1549 1550 if (!(flags & WIN_MANAGED))1551 {1552 /* Check borders */1553 if (HAS_THICKFRAME(dwStyle,dwExStyle))1554 {1555 InflateRect(&rect,-GetSystemMetrics(SM_CXFRAME),-GetSystemMetrics(SM_CYFRAME));1556 if (!PtInRect(&rect,pt))1557 {1558 /* Check top sizing border */1559 if (pt.y < rect.top)1560 {1561 if (pt.x < rect.left+GetSystemMetrics(SM_CXSIZE)) return HTTOPLEFT;1562 if (pt.x >= rect.right-GetSystemMetrics(SM_CXSIZE)) return HTTOPRIGHT;1563 return HTTOP;1564 }1565 /* Check bottom sizing border */1566 if (pt.y >= rect.bottom)1567 {1568 if (pt.x < rect.left+GetSystemMetrics(SM_CXSIZE)) return HTBOTTOMLEFT;1569 if (pt.x >= rect.right-GetSystemMetrics(SM_CXSIZE)) return HTBOTTOMRIGHT;1570 return HTBOTTOM;1571 }1572 /* Check left sizing border */1573 if (pt.x < rect.left)1574 {1575 if (pt.y < rect.top+GetSystemMetrics(SM_CYSIZE)) return HTTOPLEFT;1576 if (pt.y >= rect.bottom-GetSystemMetrics(SM_CYSIZE)) return HTBOTTOMLEFT;1577 return HTLEFT;1578 }1579 /* Check right sizing border */1580 if (pt.x >= rect.right)1581 {1582 if (pt.y < rect.top+GetSystemMetrics(SM_CYSIZE)) return HTTOPRIGHT;1583 if (pt.y >= rect.bottom-GetSystemMetrics(SM_CYSIZE)) return HTBOTTOMRIGHT;1584 return HTRIGHT;1585 }1586 }1587 } else /* No thick frame */1588 {1589 if (HAS_DLGFRAME(dwStyle,dwExStyle))1590 InflateRect(&rect, -GetSystemMetrics(SM_CXDLGFRAME), -GetSystemMetrics(SM_CYDLGFRAME));1591 else if (HAS_THINFRAME(dwStyle ))1592 InflateRect(&rect, -GetSystemMetrics(SM_CXBORDER), -GetSystemMetrics(SM_CYBORDER));1593 if (!PtInRect( &rect, pt )) return HTBORDER;1594 }1595 1596 /* Check caption */1597 1598 if ((dwStyle & WS_CAPTION) == WS_CAPTION)1599 {1600 if (dwExStyle & WS_EX_TOOLWINDOW)1601 rect.top += GetSystemMetrics(SM_CYSMCAPTION)-1;1602 else1603 rect.top += GetSystemMetrics(SM_CYCAPTION)-1;1604 if (!PtInRect(&rect,pt))1605 {1606 /* Check system menu */1607 if(dwStyle & WS_SYSMENU)1608 {1609 /* Check if there is an user icon */1610 HICON hIcon = (HICON) GetClassLongA(Win32Hwnd, GCL_HICONSM);1611 if(!hIcon) hIcon = (HICON) GetClassLongA(Win32Hwnd, GCL_HICON);1612 1613 /* If there is an icon associated with the window OR */1614 /* If there is no hIcon specified and this is not a modal dialog, */1615 /* there is a system menu icon. */1616 if((hIcon != 0) || (!(dwStyle & DS_MODALFRAME)))1617 rect.left += GetSystemMetrics(SM_CYCAPTION) - 1;1618 }1619 if (pt.x < rect.left) return HTSYSMENU;1620 1621 /* Check close button */1622 if (dwStyle & WS_SYSMENU)1623 rect.right -= GetSystemMetrics(SM_CYCAPTION) - 1;1624 if (pt.x > rect.right) return HTCLOSE;1625 1626 /* Check maximize box */1627 /* In win95 there is automatically a Maximize button when there is a minimize one*/1628 if ((dwStyle & WS_MAXIMIZEBOX)|| (dwStyle & WS_MINIMIZEBOX))1629 rect.right -= GetSystemMetrics(SM_CXSIZE) + 1;1630 if (pt.x > rect.right) return HTMAXBUTTON;1631 1632 /* Check minimize box */1633 /* In win95 there is automatically a Maximize button when there is a Maximize one*/1634 if ((dwStyle & WS_MINIMIZEBOX)||(dwStyle & WS_MAXIMIZEBOX))1635 rect.right -= GetSystemMetrics(SM_CXSIZE) + 1;1636 1637 if (pt.x > rect.right) return HTMINBUTTON;1638 return HTCAPTION;1639 }1640 }1641 }1642 1643 /* Check client area */1644 1645 ScreenToClient(Win32Hwnd,&pt);1646 getClientRect(&rect);1647 if (PtInRect(&rect,pt)) return HTCLIENT;1648 1649 /* Check vertical scroll bar */1650 1651 if (dwStyle & WS_VSCROLL)1652 {1653 rect.right += GetSystemMetrics(SM_CXVSCROLL);1654 if (PtInRect( &rect, pt )) return HTVSCROLL;1655 }1656 1657 /* Check horizontal scroll bar */1658 1659 if (dwStyle & WS_HSCROLL)1660 {1661 rect.bottom += GetSystemMetrics(SM_CYHSCROLL);1662 if (PtInRect( &rect, pt ))1663 {1664 /* Check size box */1665 if ((dwStyle & WS_VSCROLL) &&1666 (pt.x >= rect.right - GetSystemMetrics(SM_CXVSCROLL)))1667 return (dwStyle & WS_CHILD) ? HTSIZE:HTBOTTOMRIGHT;1668 return HTHSCROLL;1669 }1670 }1671 1672 /* Check menu bar */1673 1674 if (HAS_MENU())1675 {1676 if ((pt.y < 0) && (pt.x >= 0) && (pt.x < rect.right))1677 return HTMENU;1678 }1679 1680 /* Should never get here */1681 return HTERROR;1682 }1683 1684 //******************************************************************************1685 //******************************************************************************1686 VOID Win32BaseWindow::GetInsideRect(RECT *rect)1687 {1688 rect->top = rect->left = 0;1689 rect->right = rectWindow.right - rectWindow.left;1690 rect->bottom = rectWindow.bottom - rectWindow.top;1691 1692 if ((dwStyle & WS_ICONIC) || (flags & WIN_MANAGED)) return;1693 1694 /* Remove frame from rectangle */1695 if (HAS_THICKFRAME(dwStyle,dwExStyle))1696 {1697 InflateRect( rect, -GetSystemMetrics(SM_CXSIZEFRAME), -GetSystemMetrics(SM_CYSIZEFRAME) );1698 }1699 else if (HAS_DLGFRAME(dwStyle,dwExStyle ))1700 {1701 InflateRect( rect, -GetSystemMetrics(SM_CXFIXEDFRAME), -GetSystemMetrics(SM_CYFIXEDFRAME));1702 }1703 else if (HAS_THINFRAME(dwStyle))1704 {1705 InflateRect( rect, -GetSystemMetrics(SM_CXBORDER), -GetSystemMetrics(SM_CYBORDER) );1706 }1707 1708 /* We have additional border information if the window1709 * is a child (but not an MDI child) */1710 if ( (dwStyle & WS_CHILD) &&1711 ( (dwExStyle & WS_EX_MDICHILD) == 0 ) )1712 {1713 if (dwExStyle & WS_EX_CLIENTEDGE)1714 InflateRect (rect, -GetSystemMetrics(SM_CXEDGE), -GetSystemMetrics(SM_CYEDGE));1715 1716 if (dwExStyle & WS_EX_STATICEDGE)1717 InflateRect (rect, -GetSystemMetrics(SM_CXBORDER), -GetSystemMetrics(SM_CYBORDER));1718 }1719 }1720 //******************************************************************************1721 //******************************************************************************1722 VOID Win32BaseWindow::DrawFrame(HDC hdc,RECT *rect,BOOL dlgFrame,BOOL active)1723 {1724 INT width, height;1725 HBRUSH oldBrush;1726 1727 if (dlgFrame)1728 {1729 width = GetSystemMetrics(SM_CXDLGFRAME) - GetSystemMetrics(SM_CXEDGE);1730 height = GetSystemMetrics(SM_CYDLGFRAME) - GetSystemMetrics(SM_CYEDGE);1731 } else1732 {1733 width = GetSystemMetrics(SM_CXFRAME) - GetSystemMetrics(SM_CXEDGE);1734 height = GetSystemMetrics(SM_CYFRAME) - GetSystemMetrics(SM_CYEDGE);1735 }1736 1737 oldBrush = SelectObject(hdc,GetSysColorBrush(active ? COLOR_ACTIVEBORDER:COLOR_INACTIVEBORDER));1738 1739 /* Draw frame */1740 1741 PatBlt(hdc,rect->left,rect->top,rect->right-rect->left,height,PATCOPY);1742 PatBlt(hdc,rect->left,rect->top,width,rect->bottom-rect->top,PATCOPY);1743 PatBlt(hdc,rect->left,rect->bottom-1,rect->right-rect->left,-height,PATCOPY);1744 PatBlt(hdc,rect->right-1,rect->top,-width,rect->bottom-rect->top,PATCOPY);1745 SelectObject(hdc,oldBrush);1746 1747 InflateRect(rect,-width,-height);1748 }1749 //******************************************************************************1750 //******************************************************************************1751 BOOL Win32BaseWindow::DrawSysButton(HDC hdc,BOOL down)1752 {1753 if(!(flags & WIN_MANAGED))1754 {1755 HICON hIcon;1756 RECT rect;1757 1758 GetInsideRect(&rect);1759 1760 hIcon = (HICON) GetClassLongA(Win32Hwnd, GCL_HICONSM);1761 if(!hIcon) hIcon = (HICON) GetClassLongA(Win32Hwnd, GCL_HICON);1762 1763 /* If there is no hIcon specified or this is not a modal dialog, */1764 /* get the default one. */1765 if(hIcon == 0)1766 if (!(dwStyle & DS_MODALFRAME))1767 hIcon = LoadImageA(0, MAKEINTRESOURCEA(OIC_ODINICON), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR);1768 1769 if (hIcon)1770 DrawIconEx (hdc, rect.left + 2, rect.top + 2, hIcon,1771 GetSystemMetrics(SM_CXSMICON),1772 GetSystemMetrics(SM_CYSMICON),1773 0, 0, DI_NORMAL);1774 1775 return (hIcon != 0);1776 }1777 return FALSE;1778 }1779 //******************************************************************************1780 //******************************************************************************1781 BOOL Win32BaseWindow::GetSysPopupPos(RECT* rect)1782 {1783 if(hSysMenu)1784 {1785 if(dwStyle & WS_MINIMIZE )1786 *rect = rectWindow;1787 else1788 {1789 GetInsideRect(rect );1790 OffsetRect( rect, rectWindow.left, rectWindow.top);1791 if ((dwStyle & WS_CHILD) && getParent())1792 ClientToScreen(getParent()->getWindowHandle(), (POINT *)rect );1793 rect->right = rect->left + GetSystemMetrics(SM_CYCAPTION) - 1;1794 rect->bottom = rect->top + GetSystemMetrics(SM_CYCAPTION) - 1;1795 }1796 return TRUE;1797 }1798 return FALSE;1799 }1800 //******************************************************************************1801 //******************************************************************************1802 BOOL Win32BaseWindow::DrawGrayButton(HDC hdc,int x,int y)1803 {1804 HBITMAP hMaskBmp;1805 HDC hdcMask = CreateCompatibleDC (0);1806 HBRUSH hOldBrush;1807 hMaskBmp = CreateBitmap (12, 10, 1, 1, lpGrayMask);1808 1809 if(hMaskBmp == 0)1810 return FALSE;1811 1812 SelectObject (hdcMask, hMaskBmp);1813 1814 /* Draw the grayed bitmap using the mask */1815 hOldBrush = SelectObject (hdc, RGB(128, 128, 128));1816 BitBlt (hdc, x, y, 12, 10,1817 hdcMask, 0, 0, 0xB8074A);1818 1819 /* Clean up */1820 SelectObject (hdc, hOldBrush);1821 DeleteObject(hMaskBmp);1822 DeleteDC (hdcMask);1823 1824 return TRUE;1825 }1826 //******************************************************************************1827 //******************************************************************************1828 VOID Win32BaseWindow::DrawCloseButton(HDC hdc,BOOL down,BOOL bGrayed)1829 {1830 RECT rect;1831 HDC hdcMem;1832 1833 if( !(flags & WIN_MANAGED) )1834 {1835 BITMAP bmp;1836 HBITMAP hBmp, hOldBmp;1837 1838 GetInsideRect(&rect);1839 1840 hdcMem = CreateCompatibleDC( hdc );1841 hBmp = down ? hbitmapCloseD : hbitmapClose;1842 hOldBmp = SelectObject (hdcMem, hBmp);1843 GetObjectA (hBmp, sizeof(BITMAP), &bmp);1844 1845 BitBlt (hdc, rect.right - (GetSystemMetrics(SM_CYCAPTION) + 1 + bmp.bmWidth) / 2,1846 rect.top + (GetSystemMetrics(SM_CYCAPTION) - 1 - bmp.bmHeight) / 2,1847 bmp.bmWidth, bmp.bmHeight, hdcMem, 0, 0, SRCCOPY);1848 1849 if(bGrayed)1850 DrawGrayButton(hdc,rect.right - (GetSystemMetrics(SM_CYCAPTION) + 1 + bmp.bmWidth) / 2 + 2,1851 rect.top + (GetSystemMetrics(SM_CYCAPTION) - 1 - bmp.bmHeight) / 2 + 2);1852 1853 SelectObject (hdcMem, hOldBmp);1854 DeleteDC (hdcMem);1855 }1856 }1857 //******************************************************************************1858 //******************************************************************************1859 VOID Win32BaseWindow::DrawMaxButton(HDC hdc,BOOL down,BOOL bGrayed)1860 {1861 RECT rect;1862 HDC hdcMem;1863 1864 if( !(flags & WIN_MANAGED))1865 {1866 BITMAP bmp;1867 HBITMAP hBmp,hOldBmp;1868 1869 GetInsideRect(&rect);1870 hdcMem = CreateCompatibleDC( hdc );1871 hBmp = IsZoomed(Win32Hwnd) ?1872 (down ? hbitmapRestoreD : hbitmapRestore ) :1873 (down ? hbitmapMaximizeD: hbitmapMaximize);1874 hOldBmp=SelectObject( hdcMem, hBmp );1875 GetObjectA (hBmp, sizeof(BITMAP), &bmp);1876 1877 if (dwStyle & WS_SYSMENU)1878 rect.right -= GetSystemMetrics(SM_CYCAPTION) + 1;1879 1880 BitBlt( hdc, rect.right - (GetSystemMetrics(SM_CXSIZE) + bmp.bmWidth) / 2,1881 rect.top + (GetSystemMetrics(SM_CYCAPTION) - 1 - bmp.bmHeight) / 2,1882 bmp.bmWidth, bmp.bmHeight, hdcMem, 0, 0, SRCCOPY );1883 1884 if(bGrayed)1885 DrawGrayButton(hdc, rect.right - (GetSystemMetrics(SM_CXSIZE) + bmp.bmWidth) / 2 + 2,1886 rect.top + (GetSystemMetrics(SM_CYCAPTION) - 1 - bmp.bmHeight) / 2 + 2);1887 1888 1889 SelectObject (hdcMem, hOldBmp);1890 DeleteDC( hdcMem );1891 }1892 }1893 //******************************************************************************1894 //******************************************************************************1895 VOID Win32BaseWindow::DrawMinButton(HDC hdc,BOOL down,BOOL bGrayed)1896 {1897 RECT rect;1898 HDC hdcMem;1899 1900 if( !(flags & WIN_MANAGED))1901 1902 {1903 BITMAP bmp;1904 HBITMAP hBmp,hOldBmp;1905 1906 GetInsideRect(&rect);1907 1908 hdcMem = CreateCompatibleDC( hdc );1909 hBmp = down ? hbitmapMinimizeD : hbitmapMinimize;1910 hOldBmp= SelectObject( hdcMem, hBmp );1911 GetObjectA (hBmp, sizeof(BITMAP), &bmp);1912 1913 if (dwStyle & WS_SYSMENU)1914 rect.right -= GetSystemMetrics(SM_CYCAPTION) + 1;1915 1916 /* In win 95 there is always a Maximize box when there is a Minimize one */1917 if ((dwStyle & WS_MAXIMIZEBOX) || (dwStyle & WS_MINIMIZEBOX))1918 rect.right += -1 - (GetSystemMetrics(SM_CXSIZE) + bmp.bmWidth) / 2;1919 1920 BitBlt( hdc, rect.right - (GetSystemMetrics(SM_CXSIZE) + bmp.bmWidth) / 2,1921 rect.top + (GetSystemMetrics(SM_CYCAPTION) - 1 - bmp.bmHeight) / 2,1922 bmp.bmWidth, bmp.bmHeight, hdcMem, 0, 0, SRCCOPY );1923 1924 if(bGrayed)1925 DrawGrayButton(hdc, rect.right - (GetSystemMetrics(SM_CXSIZE) + bmp.bmWidth) / 2 + 2,1926 rect.top + (GetSystemMetrics(SM_CYCAPTION) - 1 - bmp.bmHeight) / 2 + 2);1927 1928 1929 SelectObject (hdcMem, hOldBmp);1930 DeleteDC( hdcMem );1931 }1932 }1933 //******************************************************************************1934 //******************************************************************************1935 VOID Win32BaseWindow::DrawCaption(HDC hdc,RECT *rect,BOOL active)1936 {1937 RECT r = *rect;1938 char buffer[256];1939 HPEN hPrevPen;1940 1941 if (flags & WIN_MANAGED) return;1942 1943 hPrevPen = SelectObject( hdc, GetSysColorPen(COLOR_3DFACE) );1944 MoveToEx( hdc, r.left, r.bottom - 1, NULL );1945 LineTo( hdc, r.right, r.bottom - 1 );1946 SelectObject( hdc, hPrevPen );1947 r.bottom--;1948 1949 if (SYSCOLOR_GetUseWinColors())1950 {1951 COLORREF startColor = GetSysColor(active ? COLOR_ACTIVECAPTION:COLOR_INACTIVECAPTION),endColor = GetSysColor(active ? COLOR_GRADIENTACTIVECAPTION:COLOR_GRADIENTINACTIVECAPTION);1952 1953 if (startColor == endColor)1954 FillRect(hdc,&r,GetSysColorBrush(startColor));1955 else1956 {1957 INT rDiff = GetRValue(endColor)-GetRValue(startColor);1958 INT gDiff = GetGValue(endColor)-GetGValue(startColor);1959 INT bDiff = GetBValue(endColor)-GetBValue(startColor);1960 INT steps = MAX(MAX(abs(rDiff),abs(gDiff)),abs(bDiff));1961 INT w = r.right-r.left;1962 RECT r2;1963 1964 if (w < steps) steps = w;1965 r2.left = r2.right = r.left;1966 r2.top = r.top;1967 r2.bottom = r.bottom;1968 for (INT x = 0;x <= steps;x++)1969 {1970 COLORREF color = RGB(GetRValue(startColor)+rDiff*x/steps,GetGValue(startColor)+gDiff*x/steps,GetBValue(startColor)+bDiff*x/steps);1971 HBRUSH brush = CreateSolidBrush(color);1972 1973 r2.left = r2.right;1974 r2.right = r.left+w*x/steps;1975 FillRect(hdc,&r2,brush);1976 DeleteObject(brush);1977 }1978 }1979 } else FillRect(hdc,&r,GetSysColorBrush(active ? COLOR_ACTIVECAPTION:COLOR_INACTIVECAPTION));1980 1981 if (!hbitmapClose)1982 {1983 if (!(hbitmapClose = LoadBitmapA(0,MAKEINTRESOURCEA(OBM_CLOSE)))) return;1984 hbitmapCloseD = LoadBitmapA(0,MAKEINTRESOURCEA(OBM_CLOSED));1985 hbitmapMinimize = LoadBitmapA(0,MAKEINTRESOURCEA(OBM_REDUCE));1986 hbitmapMinimizeD = LoadBitmapA(0,MAKEINTRESOURCEA(OBM_REDUCED));1987 hbitmapMaximize = LoadBitmapA(0,MAKEINTRESOURCEA(OBM_ZOOM));1988 hbitmapMaximizeD = LoadBitmapA(0,MAKEINTRESOURCEA(OBM_ZOOMD));1989 hbitmapRestore = LoadBitmapA(0,MAKEINTRESOURCEA(OBM_RESTORE));1990 hbitmapRestoreD = LoadBitmapA(0,MAKEINTRESOURCEA(OBM_RESTORED));1991 }1992 1993 if ((dwStyle & WS_SYSMENU) && !(dwExStyle & WS_EX_TOOLWINDOW))1994 {1995 if (DrawSysButton(hdc,FALSE))1996 r.left += GetSystemMetrics(SM_CYCAPTION) - 1;1997 }1998 1999 if (dwStyle & WS_SYSMENU)2000 {2001 UINT state;2002 2003 /* Go get the sysmenu */2004 state = GetMenuState(hSysMenu, SC_CLOSE, MF_BYCOMMAND);2005 2006 /* Draw a grayed close button if disabled and a normal one if SC_CLOSE is not there */2007 DrawCloseButton(hdc, FALSE,2008 ((((state & MF_DISABLED) || (state & MF_GRAYED))) && (state != 0xFFFFFFFF)));2009 r.right -= GetSystemMetrics(SM_CYCAPTION) - 1;2010 2011 if ((dwStyle & WS_MAXIMIZEBOX) || (dwStyle & WS_MINIMIZEBOX))2012 {2013 /* In win95 the two buttons are always there */2014 /* But if the menu item is not in the menu they're disabled*/2015 2016 DrawMaxButton(hdc, FALSE, (!(dwStyle & WS_MAXIMIZEBOX)));2017 r.right -= GetSystemMetrics(SM_CXSIZE) + 1;2018 2019 DrawMinButton(hdc, FALSE, (!(dwStyle & WS_MINIMIZEBOX)));2020 r.right -= GetSystemMetrics(SM_CXSIZE) + 1;2021 }2022 }2023 2024 if (GetWindowTextA(buffer, sizeof(buffer) ))2025 {2026 NONCLIENTMETRICSA nclm;2027 HFONT hFont, hOldFont;2028 nclm.cbSize = sizeof(NONCLIENTMETRICSA);2029 SystemParametersInfoA (SPI_GETNONCLIENTMETRICS, 0, &nclm, 0);2030 if (dwExStyle & WS_EX_TOOLWINDOW)2031 hFont = CreateFontIndirectA (&nclm.lfSmCaptionFont);2032 else2033 hFont = CreateFontIndirectA (&nclm.lfCaptionFont);2034 hOldFont = SelectObject (hdc, hFont);2035 if (active) SetTextColor( hdc, GetSysColor( COLOR_CAPTIONTEXT ) );2036 else SetTextColor( hdc, GetSysColor( COLOR_INACTIVECAPTIONTEXT ) );2037 SetBkMode( hdc, TRANSPARENT );2038 r.left += 2;2039 DrawTextA( hdc, buffer, -1, &r,2040 DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX | DT_LEFT );2041 DeleteObject (SelectObject (hdc, hOldFont));2042 }2043 }2044 //******************************************************************************2045 //******************************************************************************2046 VOID Win32BaseWindow::DoNCPaint(HRGN clip,BOOL suppress_menupaint)2047 {2048 BOOL active = flags & WIN_NCACTIVATED;2049 HDC hdc;2050 RECT rect,rectClip,rfuzz;2051 2052 /* MSDN docs are pretty idiotic here, they say app CAN use clipRgn in2053 the call to GetDCEx implying that it is allowed not to use it either.2054 However, the suggested GetDCEx( , DCX_WINDOW | DCX_INTERSECTRGN)2055 will cause clipRgn to be deleted after ReleaseDC().2056 Now, how is the "system" supposed to tell what happened?2057 */2058 2059 if (!(hdc = GetDCEx( Win32Hwnd, (clip > 1) ? clip : 0, DCX_USESTYLE | DCX_WINDOW |2060 ((clip > 1) ?(DCX_INTERSECTRGN /*| DCX_KEEPCLIPRGN*/) : 0) ))) return;2061 2062 rect.top = rect.left = 0;2063 rect.right = rectWindow.right - rectWindow.left;2064 rect.bottom = rectWindow.bottom - rectWindow.top;2065 2066 if( clip > 1 )2067 GetRgnBox( clip, &rectClip );2068 else2069 {2070 clip = 0;2071 rectClip = rect;2072 }2073 2074 SelectObject( hdc, GetSysColorPen(COLOR_WINDOWFRAME) );2075 2076 if(!(flags & WIN_MANAGED))2077 {2078 if (HAS_BIGFRAME( dwStyle, dwExStyle))2079 {2080 DrawEdge (hdc, &rect, EDGE_RAISED, BF_RECT | BF_ADJUST);2081 }2082 if (HAS_THICKFRAME( dwStyle, dwExStyle ))2083 DrawFrame(hdc, &rect, FALSE, active );2084 else if (HAS_DLGFRAME( dwStyle, dwExStyle ))2085 DrawFrame( hdc, &rect, TRUE, active );2086 else if (HAS_THINFRAME( dwStyle ))2087 {2088 SelectObject( hdc, GetStockObject(NULL_BRUSH) );2089 Rectangle( hdc, 0, 0, rect.right, rect.bottom );2090 }2091 2092 if ((dwStyle & WS_CAPTION) == WS_CAPTION)2093 {2094 RECT r = rect;2095 if (dwExStyle & WS_EX_TOOLWINDOW)2096 {2097 r.bottom = rect.top + GetSystemMetrics(SM_CYSMCAPTION);2098 rect.top += GetSystemMetrics(SM_CYSMCAPTION);2099 }2100 else2101 {2102 r.bottom = rect.top + GetSystemMetrics(SM_CYCAPTION);2103 rect.top += GetSystemMetrics(SM_CYCAPTION);2104 }2105 if( !clip || IntersectRect( &rfuzz, &r, &rectClip ) )2106 DrawCaption(hdc, &r, active);2107 }2108 }2109 if (HAS_MENU())2110 {2111 RECT r = rect;2112 r.bottom = rect.top + GetSystemMetrics(SM_CYMENU);2113 2114 rect.top += MENU_DrawMenuBar( hdc, &r, Win32Hwnd, suppress_menupaint ) + 1;2115 }2116 2117 if (dwExStyle & WS_EX_CLIENTEDGE)2118 DrawEdge (hdc, &rect, EDGE_SUNKEN, BF_RECT | BF_ADJUST);2119 2120 if (dwExStyle & WS_EX_STATICEDGE)2121 DrawEdge (hdc, &rect, BDR_SUNKENOUTER, BF_RECT | BF_ADJUST);2122 2123 /* Draw the scroll-bars */2124 if (dwStyle & WS_VSCROLL)2125 SCROLL_DrawScrollBar(Win32Hwnd,hdc,SB_VERT,TRUE,TRUE);2126 if (dwStyle & WS_HSCROLL)2127 SCROLL_DrawScrollBar(Win32Hwnd,hdc,SB_HORZ,TRUE,TRUE);2128 2129 /* Draw the "size-box" */2130 if ((dwStyle & WS_VSCROLL) && (dwStyle & WS_HSCROLL))2131 {2132 RECT r = rect;2133 r.left = r.right - GetSystemMetrics(SM_CXVSCROLL) + 1;2134 r.top = r.bottom - GetSystemMetrics(SM_CYHSCROLL) + 1;2135 FillRect( hdc, &r, GetSysColorBrush(COLOR_SCROLLBAR) );2136 if (!(dwStyle & WS_CHILD))2137 {2138 POINT p1,p2;2139 HPEN penDark = GetSysColorPen(COLOR_3DSHADOW);2140 HPEN penWhite = GetSysColorPen(COLOR_3DHILIGHT);2141 HPEN oldPen = SelectObject(hdc,penDark);2142 INT x;2143 2144 p1.x = r.right-1;2145 p1.y = r.bottom;2146 p2.x = r.right;2147 p2.y = r.bottom-1;2148 for (x = 0;x < 3;x++)2149 {2150 SelectObject(hdc,penDark);2151 MoveToEx(hdc,p1.x,p1.y,NULL);2152 LineTo(hdc,p2.x,p2.y);2153 p1.x--;2154 p2.y--;2155 MoveToEx(hdc,p1.x,p1.y,NULL);2156 LineTo(hdc,p2.x,p2.y);2157 SelectObject(hdc,penWhite);2158 p1.x--;2159 p2.y--;2160 MoveToEx(hdc,p1.x,p1.y,NULL);2161 LineTo(hdc,p2.x,p2.y);2162 p1.x -= 2;2163 p2.y -= 2;2164 }2165 2166 SelectObject(hdc,oldPen);2167 }2168 }2169 2170 ReleaseDC(Win32Hwnd,hdc);2171 }2172 //******************************************************************************2173 //******************************************************************************2174 LONG Win32BaseWindow::HandleNCPaint(HRGN clip)2175 {2176 //CB: ignore it for now (SetWindowPos in WM_CREATE)2177 // if (!(dwStyle & WS_VISIBLE)) return 0;2178 2179 if (dwStyle & WS_MINIMIZE) return 0;2180 2181 DoNCPaint(clip,FALSE);2182 2183 return 0;2184 }2185 /***********************************************************************2186 * NC_HandleNCLButtonDblClk2187 *2188 * Handle a WM_NCLBUTTONDBLCLK message. Called from DefWindowProc().2189 */2190 LONG Win32BaseWindow::HandleNCLButtonDblClk(WPARAM wParam,LPARAM lParam)2191 {2192 /*2193 * if this is an icon, send a restore since we are handling2194 * a double click2195 */2196 if (dwStyle & WS_MINIMIZE)2197 {2198 SendInternalMessageA(WM_SYSCOMMAND,SC_RESTORE,lParam);2199 return 0;2200 }2201 2202 switch(wParam) /* Hit test */2203 {2204 case HTCAPTION:2205 /* stop processing if WS_MAXIMIZEBOX is missing */2206 if (dwStyle & WS_MAXIMIZEBOX)2207 SendInternalMessageA(WM_SYSCOMMAND,2208 (dwStyle & WS_MAXIMIZE) ? SC_RESTORE : SC_MAXIMIZE,2209 lParam);2210 break;2211 2212 case HTSYSMENU:2213 if (!(GetClassWord(Win32Hwnd,GCW_STYLE) & CS_NOCLOSE))2214 SendInternalMessageA(WM_SYSCOMMAND,SC_CLOSE,lParam);2215 break;2216 2217 case HTHSCROLL:2218 SendInternalMessageA(WM_SYSCOMMAND,SC_HSCROLL+HTHSCROLL,lParam);2219 break;2220 2221 case HTVSCROLL:2222 SendInternalMessageA(WM_SYSCOMMAND,SC_VSCROLL+HTVSCROLL,lParam);2223 break;2224 }2225 2226 return 0;2227 }2228 /***********************************************************************2229 * NC_HandleSysCommand2230 *2231 * Handle a WM_SYSCOMMAND message. Called from DefWindowProc().2232 *2233 * TODO: Not done (see #if 0)2234 */2235 LONG Win32BaseWindow::HandleSysCommand(WPARAM wParam,POINT *pt32)2236 {2237 UINT uCommand = wParam & 0xFFF0;2238 2239 /* //CB: don't need this, perhaps recycle for menus2240 if ((getStyle() & WS_CHILD) && (uCommand != SC_KEYMENU))2241 ScreenToClient(getParent()->getWindowHandle(), pt32 );2242 */2243 switch (uCommand)2244 {2245 2246 case SC_SIZE:2247 {2248 DWORD flags = 0;2249 2250 switch ((wParam & 0xF)+2)2251 {2252 case HTLEFT:2253 flags = TFOS_LEFT;2254 break;2255 2256 case HTRIGHT:2257 flags = TFOS_RIGHT;2258 break;2259 2260 case HTTOP:2261 flags = TFOS_TOP;2262 break;2263 2264 case HTTOPLEFT:2265 flags = TFOS_TOP | TFOS_LEFT;2266 break;2267 2268 case HTTOPRIGHT:2269 flags = TFOS_TOP | TFOS_RIGHT;2270 break;2271 2272 case HTBOTTOM:2273 flags = TFOS_BOTTOM;2274 break;2275 2276 case HTBOTTOMLEFT:2277 flags = TFOS_BOTTOM | TFOS_LEFT;2278 break;2279 2280 case HTBOTTOMRIGHT:2281 flags = TFOS_BOTTOM | TFOS_RIGHT;2282 break;2283 }2284 if (flags) FrameTrackFrame(this,flags);2285 break;2286 }2287 2288 case SC_MOVE:2289 FrameTrackFrame(this,TFOS_MOVE);2290 break;2291 2292 case SC_MINIMIZE:2293 ShowWindow(SW_MINIMIZE);2294 break;2295 2296 case SC_MAXIMIZE:2297 ShowWindow(SW_MAXIMIZE);2298 break;2299 2300 case SC_RESTORE:2301 ShowWindow(SW_RESTORE);2302 break;2303 2304 case SC_CLOSE:2305 return SendInternalMessageA(WM_CLOSE,0,0);2306 2307 case SC_VSCROLL:2308 case SC_HSCROLL:2309 TrackScrollBar(wParam,*pt32);2310 break;2311 2312 case SC_MOUSEMENU:2313 MENU_TrackMouseMenuBar(Win32Hwnd,wParam & 0x000F,*pt32);2314 break;2315 2316 case SC_KEYMENU:2317 MENU_TrackKbdMenuBar(Win32Hwnd,wParam,pt32->x);2318 break;2319 2320 case SC_TASKLIST:2321 WinExec("taskman.exe",SW_SHOWNORMAL);2322 break;2323 2324 case SC_SCREENSAVE:2325 if (wParam == SC_ABOUTWINE)2326 ShellAboutA(Win32Hwnd,"Odin","Odin alpha release compiled with IBM VAC++",0);2327 else2328 if (wParam == SC_PUTMARK)2329 dprintf(("Mark requested by user\n"));2330 break;2331 2332 case SC_HOTKEY:2333 case SC_ARRANGE:2334 case SC_NEXTWINDOW:2335 case SC_PREVWINDOW:2336 break;2337 }2338 return 0;2339 }2340 //******************************************************************************2341 //******************************************************************************2342 1195 LRESULT Win32BaseWindow::DefWndControlColor(UINT ctlType, HDC hdc) 2343 1196 { … … 2486 1339 setStyle(getStyle() | WS_VISIBLE); 2487 1340 OSLibWinEnableWindowUpdate(OS2HwndFrame,TRUE); 2488 } else 1341 } 1342 else 2489 1343 { 2490 1344 if (getStyle() & WS_VISIBLE) … … 2496 1350 return 0; 2497 1351 } 2498 2499 case WM_NCPAINT:2500 return HandleNCPaint((HRGN)wParam);2501 2502 case WM_NCACTIVATE:2503 return HandleNCActivate(wParam);2504 2505 case WM_NCCREATE:2506 return(TRUE);2507 2508 case WM_NCDESTROY:2509 return 0;2510 2511 case WM_NCCALCSIZE:2512 return HandleNCCalcSize((BOOL)wParam,(RECT*)lParam);2513 1352 2514 1353 case WM_CTLCOLORMSGBOX: … … 2674 1513 case WM_GETDLGCODE: 2675 1514 return 0; 1515 1516 case WM_NCPAINT: 1517 return HandleNCPaint((HRGN)wParam); 1518 1519 case WM_NCACTIVATE: 1520 return HandleNCActivate(wParam); 1521 1522 case WM_NCCREATE: 1523 return(TRUE); 1524 1525 case WM_NCDESTROY: 1526 return 0; 1527 1528 case WM_NCCALCSIZE: 1529 return HandleNCCalcSize((BOOL)wParam,(RECT*)lParam); 2676 1530 2677 1531 case WM_NCLBUTTONDOWN:
Note:
See TracChangeset
for help on using the changeset viewer.