Changeset 328 for trunk/src/user32/new/win32wnd.cpp
- Timestamp:
- Jul 18, 1999, 4:39:35 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/new/win32wnd.cpp
r327 r328 1 /* $Id: win32wnd.cpp,v 1.1 0 1999-07-18 13:57:48 cbratschiExp $ */1 /* $Id: win32wnd.cpp,v 1.11 1999-07-18 14:39:35 sandervl Exp $ */ 2 2 /* 3 3 * Win32 Window Code for OS/2 … … 95 95 flags = 0; 96 96 isIcon = FALSE; 97 lastHitTestVal = 0; 97 98 owner = NULL; 98 99 windowClass = 0; … … 128 129 dprintf(("Bad parent %04x\n", cs->hwndParent )); 129 130 SetLastError(ERROR_INVALID_PARAMETER); 130 131 return FALSE; 131 132 } 132 133 /* Make sure parent is valid */ … … 231 232 if ((cs->style & WS_CHILD) && cs->hwndParent) 232 233 { 233 234 SetParent(cs->hwndParent); 234 235 } 235 236 else … … 240 241 else 241 242 { 242 243 owner = GetWindowFromHandle(cs->hwndParent); 243 244 if(owner == NULL) 244 245 { … … 263 264 if (HOOK_IsHooked( WH_CBT )) 264 265 { 265 266 CBT_CREATEWNDA cbtc; 266 267 LRESULT ret; 267 268 268 269 269 cbtc.lpcs = cs; 270 cbtc.hwndInsertAfter = hwndLinkAfter; 270 271 ret = unicode ? HOOK_CallHooksW(WH_CBT, HCBT_CREATEWND, Win32Hwnd, (LPARAM)&cbtc) 271 272 : HOOK_CallHooksA(WH_CBT, HCBT_CREATEWND, Win32Hwnd, (LPARAM)&cbtc); 272 273 if (ret) 273 274 275 274 { 275 TRACE_(win)("CBT-hook returned 0\n"); 276 wndPtr->pDriver->pFinalize(wndPtr); 276 277 retvalue = 0; 277 278 goto end; 278 279 } 279 280 } 280 281 #endif … … 337 338 dwOSWinStyle, dwOSFrameStyle, (char *)cs->lpszName, 338 339 (owner) ? owner->getOS2WindowHandle() : 0, 339 340 (hwndLinkAfter == HWND_BOTTOM) ? TRUE : FALSE, 340 341 &OS2HwndFrame); 341 342 … … 354 355 #if 0 355 356 if(OS2Hwnd != OS2HwndFrame) { 356 357 358 359 360 361 362 363 357 if(OSLibWinSetWindowULong(OS2HwndFrame, OFFSET_WIN32WNDPTR, (ULONG)this) == FALSE) { 358 dprintf(("WM_CREATE: WinSetWindowULong %X failed!!", OS2HwndFrame)); 359 return FALSE; 360 } 361 if(OSLibWinSetWindowULong(OS2HwndFrame, OFFSET_WIN32PM_MAGIC, WIN32PM_MAGIC) == FALSE) { 362 dprintf(("WM_CREATE: WinSetWindowULong2 %X failed!!", OS2HwndFrame)); 363 return FALSE; 364 } 364 365 } 365 366 #endif … … 389 390 OffsetRect(&rectWindow, maxPos.x - rectWindow.left, 390 391 maxPos.y - rectWindow.top); 391 392 dprintf(("Sending WM_CREATE")); 392 393 if( (SendInternalMessage(WM_CREATE, 0, (LPARAM)cs )) != -1 ) 393 394 { 394 395 SetWindowPos(HWND_TOP, rectClient.left, rectClient.top, 395 396 397 396 rectClient.right-rectClient.left, 397 rectClient.bottom-rectClient.top, 398 SWP_NOACTIVATE); 398 399 399 400 if (cs->style & WS_VISIBLE) ShowWindow( sw ); … … 405 406 HOOK_CallHooks16( WH_SHELL, HSHELL_WINDOWCREATED, hwnd, 0 ); 406 407 #endif 407 408 return TRUE; 408 409 } 409 410 } … … 429 430 if (lpPos && !HOOK_CallHooks16(WH_CBT, HCBT_MINMAX, hwndSelf, cmd)) 430 431 { 431 432 433 434 435 436 437 438 439 440 441 442 443 432 if( dwStyle & WS_MINIMIZE ) 433 { 434 if( !SendInternalMessageA(WM_QUERYOPEN, 0, 0L ) ) 435 return (SWP_NOSIZE | SWP_NOMOVE); 436 swpFlags |= SWP_NOCOPYBITS; 437 } 438 switch( cmd ) 439 { 440 case SW_MINIMIZE: 441 if( dwStyle & WS_MAXIMIZE) 442 { 443 flags |= WIN_RESTORE_MAX; 444 dwStyle &= ~WS_MAXIMIZE; 444 445 } 445 446 else 446 447 447 flags &= ~WIN_RESTORE_MAX; 448 dwStyle |= WS_MINIMIZE; 448 449 449 450 #if 0 450 451 452 451 if( flags & WIN_NATIVE ) 452 if( pDriver->pSetHostAttr( wndPtr, HAK_ICONICSTATE, TRUE ) ) 453 swpFlags |= MINMAX_NOSWP; 453 454 #endif 454 455 455 456 457 458 459 460 461 462 456 lpPos->ptIconPos = WINPOS_FindIconPos( wndPtr, lpPos->ptIconPos ); 457 458 SetRect(lpRect, lpPos->ptIconPos.x, lpPos->ptIconPos.y, 459 GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON) ); 460 swpFlags |= SWP_NOCOPYBITS; 461 break; 462 463 case SW_MAXIMIZE: 463 464 CONV_POINT16TO32( &lpPos->ptMaxPos, &pt ); 464 465 WINPOS_GetMinMaxInfo( wndPtr, &size, &pt, NULL, NULL ); 465 466 CONV_POINT32TO16( &pt, &lpPos->ptMaxPos ); 466 467 467 468 469 470 471 472 473 474 475 468 if( dwStyle & WS_MINIMIZE ) 469 { 470 if( flags & WIN_NATIVE ) 471 if( pDriver->pSetHostAttr( wndPtr, HAK_ICONICSTATE, FALSE ) ) 472 swpFlags |= MINMAX_NOSWP; 473 474 WINPOS_ShowIconTitle( wndPtr, FALSE ); 475 dwStyle &= ~WS_MINIMIZE; 476 } 476 477 dwStyle |= WS_MAXIMIZE; 477 478 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 479 SetRect16( lpRect, lpPos->ptMaxPos.x, lpPos->ptMaxPos.y, 480 size.x, size.y ); 481 break; 482 483 case SW_RESTORE: 484 if( dwStyle & WS_MINIMIZE ) 485 { 486 if( flags & WIN_NATIVE ) 487 if( pDriver->pSetHostAttr( wndPtr, HAK_ICONICSTATE, FALSE ) ) 488 swpFlags |= MINMAX_NOSWP; 489 490 dwStyle &= ~WS_MINIMIZE; 491 WINPOS_ShowIconTitle( wndPtr, FALSE ); 492 493 if( flags & WIN_RESTORE_MAX) 494 { 495 /* Restore to maximized position */ 495 496 CONV_POINT16TO32( &lpPos->ptMaxPos, &pt ); 496 497 WINPOS_GetMinMaxInfo( wndPtr, &size, &pt, NULL, NULL); 497 498 CONV_POINT32TO16( &pt, &lpPos->ptMaxPos ); 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 499 dwStyle |= WS_MAXIMIZE; 500 SetRect16( lpRect, lpPos->ptMaxPos.x, lpPos->ptMaxPos.y, size.x, size.y ); 501 break; 502 } 503 } 504 else 505 if( !(dwStyle & WS_MAXIMIZE) ) return (UINT16)(-1); 506 else dwStyle &= ~WS_MAXIMIZE; 507 508 /* Restore to normal position */ 509 510 *lpRect = lpPos->rectNormal; 511 lpRect->right -= lpRect->left; 512 lpRect->bottom -= lpRect->top; 513 514 break; 515 } 515 516 } else swpFlags |= SWP_NOSIZE | SWP_NOMOVE; 516 517 return swpFlags; … … 611 612 { 612 613 winposCopy = *winpos; 613 614 615 614 params.rgrc[1] = *oldWindowRect; 615 params.rgrc[2] = *oldClientRect; 616 params.lppos = &winposCopy; 616 617 } 617 618 result = SendInternalMessageA(WM_NCCALCSIZE, calcValidRect, … … 665 666 //****************************************************************************** 666 667 ULONG Win32Window::MsgMove(ULONG xParent, ULONG yParent) 667 { 668 return 0; 668 { 669 return SendInternalMessageA(WM_MOVE, 0, MAKELONG((USHORT)xParent, (USHORT)yParent)); 670 } 671 //****************************************************************************** 672 //****************************************************************************** 673 ULONG Win32Window::MsgHitTest(ULONG x, ULONG y) 674 { 675 lastHitTestVal = SendInternalMessageA(WM_NCHITTEST, 0, MAKELONG((USHORT)x, (USHORT)y)); 676 return 1; //TODO: May need to change this 669 677 } 670 678 //****************************************************************************** … … 709 717 { 710 718 ULONG win32msg; 719 ULONG win32ncmsg; 711 720 712 721 switch(msg) { 713 722 case BUTTON_LEFTDOWN: 714 723 win32msg = WM_LBUTTONDOWN; 724 win32ncmsg = WM_NCLBUTTONDOWN; 715 725 break; 716 726 case BUTTON_LEFTUP: 717 727 win32msg = WM_LBUTTONUP; 728 win32ncmsg = WM_NCLBUTTONUP; 718 729 break; 719 730 case BUTTON_LEFTDBLCLICK: 720 731 win32msg = WM_LBUTTONDBLCLK; 732 win32ncmsg = WM_NCLBUTTONDBLCLK; 721 733 break; 722 734 case BUTTON_RIGHTUP: 723 735 win32msg = WM_RBUTTONUP; 736 win32ncmsg = WM_NCRBUTTONUP; 724 737 break; 725 738 case BUTTON_RIGHTDOWN: 726 739 win32msg = WM_RBUTTONDOWN; 740 win32ncmsg = WM_NCRBUTTONDOWN; 727 741 break; 728 742 case BUTTON_RIGHTDBLCLICK: 729 743 win32msg = WM_RBUTTONDBLCLK; 744 win32ncmsg = WM_NCRBUTTONDBLCLK; 745 break; 746 case BUTTON_MIDDLEUP: 747 win32msg = WM_MBUTTONUP; 748 win32ncmsg = WM_NCMBUTTONUP; 749 break; 750 case BUTTON_MIDDLEDOWN: 751 win32msg = WM_MBUTTONDOWN; 752 win32ncmsg = WM_NCMBUTTONDOWN; 753 break; 754 case BUTTON_MIDDLEDBLCLICK: 755 win32msg = WM_MBUTTONDBLCLK; 756 win32ncmsg = WM_NCMBUTTONDBLCLK; 730 757 break; 731 758 default: … … 733 760 return 1; 734 761 } 735 return SendInternalMessageA(win32msg, 0, MAKELONG(x, MapOS2ToWin32Y(OS2Hwnd, y))); 762 SendInternalMessageA(win32ncmsg, lastHitTestVal, MAKELONG(x, y)); //TODO: 763 return SendInternalMessageA(win32msg, 0, MAKELONG(x, y)); 764 } 765 //****************************************************************************** 766 //****************************************************************************** 767 ULONG Win32Window::MsgMouseMove(ULONG keystate, ULONG x, ULONG y) 768 { 769 ULONG winstate = 0; 770 771 if(keystate & WMMOVE_LBUTTON) 772 winstate |= MK_LBUTTON; 773 if(keystate & WMMOVE_RBUTTON) 774 winstate |= MK_RBUTTON; 775 if(keystate & WMMOVE_MBUTTON) 776 winstate |= MK_MBUTTON; 777 if(keystate & WMMOVE_SHIFT) 778 winstate |= MK_SHIFT; 779 if(keystate & WMMOVE_CTRL) 780 winstate |= MK_CONTROL; 781 782 return SendInternalMessageA(WM_MOUSEMOVE, keystate, MAKELONG(x, y)); 736 783 } 737 784 //****************************************************************************** … … 745 792 ULONG Win32Window::MsgEraseBackGround(ULONG hps) 746 793 { 747 return SendInternalMessageA(WM_ERASEBKGND, hps, 0); 794 if(isIcon) { 795 return SendInternalMessageA(WM_ICONERASEBKGND, hps, 0); 796 } 797 else return SendInternalMessageA(WM_ERASEBKGND, hps, 0); 748 798 } 749 799 //****************************************************************************** … … 752 802 { 753 803 if(isUnicode) { 754 804 return SendInternalMessageW(WM_SETTEXT, 0, (LPARAM)lpsz); 755 805 } 756 806 else return SendInternalMessageA(WM_SETTEXT, 0, (LPARAM)lpsz); … … 843 893 { 844 894 if(PostSpyMessage(getWindowHandle(), Msg, wParam, lParam) == FALSE) 845 846 895 dprintf(("SendInternalMessageA %s for %x %x %x", GetMsgText(Msg), getWindowHandle(), wParam, lParam)); 847 896 … … 929 978 postmsg = (POSTMSG_PACKET *)malloc(sizeof(POSTMSG_PACKET)); 930 979 if(postmsg == NULL) { 931 932 980 dprintf(("Win32Window::PostMessageA: malloc returned NULL!!")); 981 return 0; 933 982 } 934 983 postmsg->Msg = msg; … … 945 994 postmsg = (POSTMSG_PACKET *)malloc(sizeof(POSTMSG_PACKET)); 946 995 if(postmsg == NULL) { 947 948 996 dprintf(("Win32Window::PostMessageW: malloc returned NULL!!")); 997 return 0; 949 998 } 950 999 postmsg->Msg = msg; … … 987 1036 if(HMHandleTranslateToOS2(hMenu, (PULONG)&menutemplate) == NO_ERROR) 988 1037 { 989 990 991 992 993 1038 OS2HwndMenu = OSLibWinCreateMenu(OS2HwndFrame, menutemplate); 1039 if(OS2HwndMenu == 0) { 1040 dprintf(("Win32Window::SetMenu OS2HwndMenu == 0")); 1041 return FALSE; 1042 } 994 1043 } 995 1044 dprintf(("Win32Window::SetMenu unknown hMenu (%x)", hMenu)); … … 1005 1054 switch(nCmdShow) 1006 1055 { 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1056 case SW_SHOW: 1057 case SW_SHOWDEFAULT: //todo 1058 showstate = SWPOS_SHOW | SWPOS_ACTIVATE; 1059 break; 1060 case SW_HIDE: 1061 showstate = SWPOS_HIDE; 1062 break; 1063 case SW_RESTORE: 1064 showstate = SWPOS_RESTORE | SWPOS_SHOW | SWPOS_ACTIVATE; 1065 break; 1066 case SW_MINIMIZE: 1067 showstate = SWPOS_MINIMIZE; 1068 break; 1069 case SW_SHOWMAXIMIZED: 1070 showstate = SWPOS_MAXIMIZE | SWPOS_SHOW | SWPOS_ACTIVATE; 1071 break; 1072 case SW_SHOWMINIMIZED: 1073 showstate = SWPOS_MINIMIZE | SWPOS_SHOW | SWPOS_ACTIVATE; 1074 break; 1075 case SW_SHOWMINNOACTIVE: 1076 showstate = SWPOS_MINIMIZE | SWPOS_SHOW; 1077 break; 1078 case SW_SHOWNA: 1079 showstate = SWPOS_SHOW; 1080 break; 1081 case SW_SHOWNOACTIVATE: 1082 showstate = SWPOS_SHOW; 1083 break; 1084 case SW_SHOWNORMAL: 1085 showstate = SWPOS_RESTORE | SWPOS_ACTIVATE | SWPOS_SHOW; 1086 break; 1038 1087 } 1039 1088 return OSLibWinShowWindow(OS2HwndFrame, showstate); … … 1047 1096 1048 1097 switch(hwndInsertAfter) { 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1098 case HWND_BOTTOM: 1099 hwndInsertAfter = HWNDOS_BOTTOM; 1100 break; 1101 case HWND_TOPMOST: //TODO: 1102 case HWND_NOTOPMOST: //TODO: 1103 case HWND_TOP: 1104 hwndInsertAfter = HWNDOS_TOP; 1105 break; 1106 default: 1107 window = GetWindowFromHandle(hwndInsertAfter); 1108 if(window) { 1109 hwndInsertAfter = window->getOS2WindowHandle(); 1110 } 1111 else { 1112 dprintf(("Win32Window::SetWindowPos, unknown hwndInsertAfter %x", hwndInsertAfter)); 1113 hwndInsertAfter = 0; 1114 } 1115 break; 1067 1116 1068 1117 } 1069 1118 setstate = SWPOS_MOVE | SWPOS_SIZE | SWPOS_ACTIVATE | SWPOS_ZORDER; 1070 1119 if(fuFlags & SWP_DRAWFRAME) 1071 1120 setstate |= 0; //TODO 1072 1121 if(fuFlags & SWP_FRAMECHANGED) 1073 1122 setstate |= 0; //TODO 1074 1123 if(fuFlags & SWP_HIDEWINDOW) 1075 1124 setstate &= ~SWPOS_ZORDER; 1076 1125 if(fuFlags & SWP_NOACTIVATE) 1077 1126 setstate &= ~SWPOS_ACTIVATE; 1078 1127 if(fuFlags & SWP_NOCOPYBITS) 1079 setstate |= 0;//TODO1128 setstate |= 0; //TODO 1080 1129 if(fuFlags & SWP_NOMOVE) 1081 1130 setstate &= ~SWPOS_MOVE; 1082 1131 if(fuFlags & SWP_NOSIZE) 1083 1132 setstate &= ~SWPOS_SIZE; 1084 1133 if(fuFlags & SWP_NOREDRAW) 1085 1134 setstate |= SWPOS_NOREDRAW; 1086 1135 if(fuFlags & SWP_NOZORDER) 1087 1136 setstate &= ~SWPOS_ZORDER; 1088 1137 if(fuFlags & SWP_SHOWWINDOW) 1089 1138 setstate |= SWPOS_SHOW; 1090 1139 1091 1140 return OSLibWinSetWindowPos(OS2HwndFrame, hwndInsertAfter, x, y, cx, cy, setstate); … … 1103 1152 { 1104 1153 if(getParent()) { 1105 1154 return getParent()->getWindowHandle(); 1106 1155 } 1107 1156 else return 0; … … 1120 1169 1121 1170 if(hwndNewParent == 0) {//desktop window = parent 1122 1171 setParent(NULL); 1123 1172 OSLibWinSetParent(getOS2WindowHandle(), OSLIB_HWND_DESKTOP); 1124 1173 return oldhwnd; … … 1139 1188 { 1140 1189 if(getParent()) { 1141 1190 return getParent()->getWindowHandle() == hwndParent; 1142 1191 } 1143 1192 else return 0; … … 1156 1205 BOOL Win32Window::UpdateWindow() 1157 1206 { 1158 OSRECTLrect;1207 RECT rect; 1159 1208 1160 1209 if(OSLibWinQueryUpdateRect(OS2Hwnd, &rect)) 1161 1210 {//update region not empty 1162 1211 SendInternalMessageA((isIcon) ? WM_PAINTICON : WM_PAINT, 0, 0); 1163 1212 } 1164 1213 return TRUE; … … 1183 1232 switch(uCmd) 1184 1233 { 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1234 case GW_CHILD: 1235 getcmd = QWOS_TOP; 1236 break; 1237 case GW_HWNDFIRST: 1238 if(getParent()) { 1239 getcmd = QWOS_TOP; //top of child windows 1240 } 1241 else getcmd = QWOS_TOP; //TODO 1242 break; 1243 case GW_HWNDLAST: 1244 if(getParent()) { 1245 getcmd = QWOS_BOTTOM; //bottom of child windows 1246 } 1247 else getcmd = QWOS_BOTTOM; //TODO 1248 break; 1249 case GW_HWNDNEXT: 1250 getcmd = QWOS_NEXT; 1251 break; 1252 case GW_HWNDPREV: 1253 getcmd = QWOS_PREV; 1254 break; 1255 case GW_OWNER: 1256 if(owner) { 1257 return owner->getWindowHandle(); 1258 } 1259 else return 0; 1211 1260 } 1212 1261 hwndRelated = OSLibWinQueryWindow(OS2Hwnd, getcmd); 1213 1262 if(hwndRelated) 1214 1263 { 1215 1216 1217 1218 1219 1220 1264 win32wnd = (Win32Window *)OSLibWinGetWindowULong(hwndRelated, OFFSET_WIN32WNDPTR); 1265 magic = OSLibWinGetWindowULong(hwndRelated, OFFSET_WIN32PM_MAGIC); 1266 if(CheckMagicDword(magic) && win32wnd) 1267 { 1268 return win32wnd->getWindowHandle(); 1269 } 1221 1270 } 1222 1271 return 0; … … 1255 1304 if(CheckMagicDword(magic) && win32wnd) 1256 1305 { 1257 1306 return win32wnd->getWindowHandle(); 1258 1307 } 1259 1308 return hwndActive; … … 1325 1374 return oldval; 1326 1375 case GWL_HWNDPARENT: 1327 1376 return SetParent((HWND)value); 1328 1377 1329 1378 case GWL_ID: … … 1410 1459 1411 1460 if(HIWORD(hwnd) != 0x6800) { 1412 1461 return NULL; 1413 1462 } 1414 1463 1415 1464 if(HMHandleTranslateToOS2(LOWORD(hwnd), (PULONG)&window) == NO_ERROR) { 1416 1465 return window; 1417 1466 } 1418 1467 else return NULL; … … 1420 1469 //****************************************************************************** 1421 1470 //****************************************************************************** 1422 Win32Window *Win32Window::GetWindowFromOS2Handle(HWND hwnd)1423 {1424 ULONG winHandle;1425 Win32Window *window;1426 1427 //CB: returns index, not handle!1428 if(HMHandleTranslateToWin(hwnd,(PULONG)&winHandle) == NO_ERROR)1429 {1430 if (HMHandleTranslateToOS2(LOWORD(winHandle),(PULONG)&window) == NO_ERROR)1431 {1432 return window;1433 } else return NULL;1434 } else return NULL;1435 }1436 //******************************************************************************1437 //******************************************************************************1438 1471 GenericObject *Win32Window::windows = NULL;
Note:
See TracChangeset
for help on using the changeset viewer.