Changeset 392 for trunk/src/user32/new/win32wnd.cpp
- Timestamp:
- Jul 25, 1999, 5:51:57 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/new/win32wnd.cpp
r391 r392 1 /* $Id: win32wnd.cpp,v 1.2 1 1999-07-25 09:19:22sandervl Exp $ */1 /* $Id: win32wnd.cpp,v 1.22 1999-07-25 15:51:56 sandervl Exp $ */ 2 2 /* 3 3 * Win32 Window Code for OS/2 … … 31 31 #include <oslibres.h> 32 32 #include <winres.h> 33 #include "syscolor.h" 33 34 34 35 #define HAS_DLGFRAME(style,exStyle) \ … … 60 61 { 61 62 isUnicode = FALSE; 62 63 windowName = NULL; 63 fCreated = FALSE; 64 65 memset(windowNameA, 0, MAX_WINDOW_NAMELENGTH); 66 memset(windowNameW, 0, MAX_WINDOW_NAMELENGTH*sizeof(WCHAR)); 64 67 wndNameLength = 0; 65 66 windowText = NULL;;67 wndTextLength = 0;68 68 69 69 userWindowLong = NULL;; … … 115 115 if(Win32Hwnd) 116 116 HMHandleFree(Win32Hwnd & 0xFFFF); 117 if(windowName)118 free(windowName);119 if(windowText)120 free(windowText);121 117 if(userWindowLong) 122 118 free(userWindowLong); … … 248 244 if ((cs->style & WS_CHILD) && cs->hwndParent) 249 245 { 250 SetParent(cs->hwndParent);246 SetParent(cs->hwndParent); 251 247 } 252 248 else 253 249 { 254 250 if (!cs->hwndParent) { 255 251 owner = NULL; 256 252 } 257 253 else 258 254 { 259 owner = GetWindowFromHandle(cs->hwndParent);260 261 262 263 264 255 owner = GetWindowFromHandle(cs->hwndParent); 256 if(owner == NULL) 257 { 258 dprintf(("HMHandleTranslateToOS2 couldn't find owner window %x!!!", cs->hwndParent)); 259 return FALSE; 260 } 265 261 } 266 262 } … … 361 357 return FALSE; 362 358 } 359 363 360 if(OSLibWinSetWindowULong(OS2Hwnd, OFFSET_WIN32WNDPTR, (ULONG)this) == FALSE) { 364 361 dprintf(("WM_CREATE: WinSetWindowULong %X failed!!", OS2Hwnd)); … … 412 409 if( (SendInternalMessage(WM_CREATE, 0, (LPARAM)cs )) != -1 ) 413 410 { 411 if(!(flags & WIN_NEED_SIZE)) { 412 SendMessageA(WM_SIZE, SIZE_RESTORED, 413 MAKELONG(rectClient.right-rectClient.left, 414 rectClient.bottom-rectClient.top)); 415 SendMessageA(WM_MOVE, 0, MAKELONG( rectClient.left, rectClient.top ) ); 416 } 414 417 SetWindowPos(HWND_TOP, rectClient.left, rectClient.top, 415 418 rectClient.right-rectClient.left, 416 419 rectClient.bottom-rectClient.top, 417 420 SWP_NOACTIVATE); 418 419 421 if (cs->style & WS_VISIBLE) ShowWindow( sw ); 420 422 … … 425 427 HOOK_CallHooks16( WH_SHELL, HSHELL_WINDOWCREATED, hwnd, 0 ); 426 428 #endif 429 fCreated = TRUE; 427 430 SetLastError(0); 428 431 return TRUE; … … 606 609 MinMax.ptMinTrackSize.y ); 607 610 608 if (maxSize) *maxSize= MinMax.ptMaxSize;609 if (maxPos) *maxPos= MinMax.ptMaxPosition;610 if (minTrack) *minTrack = MinMax.ptMinTrackSize;611 if (maxTrack) *maxTrack = MinMax.ptMaxTrackSize;611 if (maxSize) *maxSize = MinMax.ptMaxSize; 612 if (maxPos) *maxPos = MinMax.ptMaxPosition; 613 if (minTrack) *minTrack = MinMax.ptMinTrackSize; 614 if (maxTrack) *maxTrack = MinMax.ptMaxTrackSize; 612 615 } 613 616 /*********************************************************************** … … 619 622 * when calcValidRect is TRUE. 620 623 */ 621 LONG Win32Window::SendNCCalcSize(BOOL calcValidRect, 622 RECT *newWindowRect, RECT *oldWindowRect, 623 RECT *oldClientRect, WINDOWPOS *winpos, 624 RECT *newClientRect ) 624 LONG Win32Window::SendNCCalcSize(BOOL calcValidRect, RECT *newWindowRect, RECT *oldWindowRect, 625 RECT *oldClientRect, WINDOWPOS *winpos, 626 RECT *newClientRect ) 625 627 { 626 628 NCCALCSIZE_PARAMS params; … … 632 634 { 633 635 winposCopy = *winpos; 634 params.rgrc[1] = *oldWindowRect;635 params.rgrc[2] = *oldClientRect;636 params.lppos = &winposCopy;636 params.rgrc[1] = *oldWindowRect; 637 params.rgrc[2] = *oldClientRect; 638 params.lppos = &winposCopy; 637 639 } 638 640 result = SendInternalMessageA(WM_NCCALCSIZE, calcValidRect, … … 723 725 WORD fwSizeType = 0; 724 726 727 if(fCreated == FALSE) {//Solitaire crashes if it receives a WM_SIZE during CreateWindowEx (normal or our fault?) 728 return 1; 729 } 730 725 731 if(fMinimize) { 726 732 fwSizeType = SIZE_MINIMIZED; … … 747 753 } 748 754 //****************************************************************************** 749 //TODO: virtual key translation & extended keyboard bit755 //TODO: virtual key & (possibly) scancode translation, extended keyboard bit & Unicode 750 756 //****************************************************************************** 751 757 ULONG Win32Window::MsgChar(ULONG cmd, ULONG repeatcnt, ULONG scancode, ULONG vkey, ULONG keyflags) … … 761 767 if(keyflags & KEY_UP) 762 768 lParam |= (1<<31); 763 dprintf(("WM_CHAR: %x %x %08x", OS2Hwnd, cmd, lParam)); 764 return SendInternalMessageA(WM_CHAR, cmd, lParam); 769 if(keyflags & KEY_DEADKEY) { 770 dprintf(("WM_DEADCHAR: %x %x %08x", OS2Hwnd, cmd, lParam)); 771 return SendInternalMessageA(WM_DEADCHAR, cmd, lParam); 772 } 773 else { 774 dprintf(("WM_CHAR: %x %x %08x", OS2Hwnd, cmd, lParam)); 775 return SendInternalMessageA(WM_CHAR, cmd, lParam); 776 } 765 777 } 766 778 //****************************************************************************** … … 832 844 ULONG Win32Window::MsgMouseMove(ULONG keystate, ULONG x, ULONG y) 833 845 { 834 ULONG winstate = 0;835 836 if(keystate & WMMOVE_LBUTTON)837 winstate |= MK_LBUTTON;838 if(keystate & WMMOVE_RBUTTON)839 winstate |= MK_RBUTTON;840 if(keystate & WMMOVE_MBUTTON)841 winstate |= MK_MBUTTON;842 if(keystate & WMMOVE_SHIFT)843 winstate |= MK_SHIFT;844 if(keystate & WMMOVE_CTRL)845 winstate |= MK_CONTROL;846 847 return SendInternalMessageA(WM_MOUSEMOVE, keystate, MAKELONG(x, y));846 ULONG winstate = 0; 847 848 if(keystate & WMMOVE_LBUTTON) 849 winstate |= MK_LBUTTON; 850 if(keystate & WMMOVE_RBUTTON) 851 winstate |= MK_RBUTTON; 852 if(keystate & WMMOVE_MBUTTON) 853 winstate |= MK_MBUTTON; 854 if(keystate & WMMOVE_SHIFT) 855 winstate |= MK_SHIFT; 856 if(keystate & WMMOVE_CTRL) 857 winstate |= MK_CONTROL; 858 859 return SendInternalMessageA(WM_MOUSEMOVE, keystate, MAKELONG(x, y)); 848 860 } 849 861 //****************************************************************************** … … 851 863 ULONG Win32Window::MsgPaint(ULONG tmp1, ULONG tmp2) 852 864 { 853 return SendInternalMessageA(WM_PAINT, 0, 0);865 return SendInternalMessageA(WM_PAINT, 0, 0); 854 866 } 855 867 //****************************************************************************** … … 866 878 ULONG Win32Window::MsgSetText(LPSTR lpsz, LONG cch) 867 879 { 868 if(isUnicode) { 869 return SendInternalMessageW(WM_SETTEXT, 0, (LPARAM)lpsz); 870 } 871 else return SendInternalMessageA(WM_SETTEXT, 0, (LPARAM)lpsz); 880 if(isUnicode) { 881 return SendInternalMessageW(WM_SETTEXT, 0, (LPARAM)lpsz); 882 } 883 else return SendInternalMessageA(WM_SETTEXT, 0, (LPARAM)lpsz); 884 } 885 //****************************************************************************** 886 //TODO: in- or excluding terminating 0? 887 //****************************************************************************** 888 ULONG Win32Window::MsgGetTextLength() 889 { 890 return SendInternalMessageA(WM_GETTEXTLENGTH, 0, 0); 891 } 892 //****************************************************************************** 893 //****************************************************************************** 894 char *Win32Window::MsgGetText() 895 { 896 if(isUnicode) { 897 SendInternalMessageW(WM_GETTEXT, MAX_WINDOW_NAMELENGTH, (LPARAM)windowNameW); 898 } 899 else { 900 SendInternalMessageA(WM_GETTEXT, MAX_WINDOW_NAMELENGTH, (LPARAM)windowNameA); 901 } 902 return windowNameA; 903 } 904 //****************************************************************************** 905 //****************************************************************************** 906 LRESULT Win32Window::DefWindowProcA(UINT Msg, WPARAM wParam, LPARAM lParam) 907 { 908 switch(Msg) 909 { 910 case WM_GETTEXTLENGTH: 911 return wndNameLength; 912 913 case WM_GETTEXT: //TODO: SS_ICON controls 914 strncpy((LPSTR)lParam, windowNameA, wParam); 915 return min(wndNameLength, wParam); 916 917 case WM_SETTEXT: 918 return 0; 919 920 case WM_SETREDRAW: 921 if(wParam) 922 SetWindowLongA (GWL_STYLE, GetWindowLongA (GWL_STYLE) | WS_VISIBLE); 923 else SetWindowLongA (GWL_STYLE, GetWindowLongA (GWL_STYLE) & ~WS_VISIBLE); 924 925 return 0; //TODO 926 927 case WM_NCCREATE: 928 return(TRUE); 929 930 case WM_CTLCOLORMSGBOX: 931 case WM_CTLCOLOREDIT: 932 case WM_CTLCOLORLISTBOX: 933 case WM_CTLCOLORBTN: 934 case WM_CTLCOLORDLG: 935 case WM_CTLCOLORSTATIC: 936 case WM_CTLCOLORSCROLLBAR: 937 SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW)); 938 SetTextColor((HDC)wParam, GetSysColor(COLOR_WINDOWTEXT)); 939 return GetSysColorBrush(COLOR_BTNFACE); 940 941 case WM_PARENTNOTIFY: 942 return 0; 943 944 case WM_MOUSEACTIVATE: 945 { 946 DWORD dwStyle = GetWindowLongA(GWL_STYLE); 947 DWORD dwExStyle = GetWindowLongA(GWL_EXSTYLE); 948 dprintf(("DefWndProc: WM_MOUSEACTIVATE for %x Msg %s", Win32Hwnd, GetMsgText(HIWORD(lParam)))); 949 if(dwStyle & WS_CHILD && !(dwExStyle & WS_EX_NOPARENTNOTIFY) ) 950 { 951 if(getParent()) { 952 LRESULT rc = getParent()->SendMessageA(WM_MOUSEACTIVATE, wParam, lParam ); 953 if(rc) return rc; 954 } 955 } 956 return (LOWORD(lParam) == HTCAPTION) ? MA_NOACTIVATE : MA_ACTIVATE; 957 } 958 case WM_SETCURSOR: 959 { 960 DWORD dwStyle = GetWindowLongA(GWL_STYLE); 961 DWORD dwExStyle = GetWindowLongA(GWL_EXSTYLE); 962 dprintf(("DefWndProc: WM_SETCURSOR for %x Msg %s", Win32Hwnd, GetMsgText(HIWORD(lParam)))); 963 if(dwStyle & WS_CHILD && !(dwExStyle & WS_EX_NOPARENTNOTIFY) ) 964 { 965 if(getParent()) { 966 LRESULT rc = getParent()->SendMessageA(WM_SETCURSOR, wParam, lParam); 967 if(rc) return rc; 968 } 969 } 970 return 1; 971 } 972 case WM_MOUSEMOVE: 973 return 0; 974 975 case WM_ERASEBKGND: 976 case WM_ICONERASEBKGND: 977 return 0; 978 979 case WM_NCLBUTTONDOWN: 980 case WM_NCLBUTTONUP: 981 case WM_NCLBUTTONDBLCLK: 982 case WM_NCRBUTTONUP: 983 case WM_NCRBUTTONDOWN: 984 case WM_NCRBUTTONDBLCLK: 985 case WM_NCMBUTTONDOWN: 986 case WM_NCMBUTTONUP: 987 case WM_NCMBUTTONDBLCLK: 988 return 0; //TODO: Send WM_SYSCOMMAND if required 989 990 case WM_NCHITTEST: //TODO: 991 return 0; 992 993 default: 994 return 1; 995 } 996 } 997 //****************************************************************************** 998 //****************************************************************************** 999 LRESULT Win32Window::DefWindowProcW(UINT Msg, WPARAM wParam, LPARAM lParam) 1000 { 1001 switch(Msg) 1002 { 1003 case WM_GETTEXTLENGTH: 1004 return wndNameLength; 1005 1006 case WM_GETTEXT: //TODO: SS_ICON controls 1007 lstrcpynW((LPWSTR)lParam, windowNameW, wParam); 1008 return min(wndNameLength, wParam); 1009 1010 default: 1011 return DefWindowProcA(Msg, wParam, lParam); 1012 } 872 1013 } 873 1014 //****************************************************************************** … … 897 1038 return(0); 898 1039 } 1040 case WM_SETTEXT: //TODO: Nothing happens if passed to DefWindowProc 1041 return win32wndproc(getWindowHandle(), WM_SETTEXT, wParam, lParam); 1042 899 1043 case WM_LBUTTONDOWN: 900 1044 case WM_MBUTTONDOWN: … … 937 1081 return(1); 938 1082 } 1083 case WM_SETTEXT: //TODO: Nothing happens if passed to DefWindowProc 1084 return win32wndproc(getWindowHandle(), WM_SETTEXT, wParam, lParam); 1085 939 1086 case WM_LBUTTONDOWN: 940 1087 case WM_MBUTTONDOWN: … … 1100 1247 Win32Resource *winres = (Win32Resource *)hMenu; 1101 1248 1249 dprintf(("SetMenu %x", hMenu)); 1102 1250 if(HIWORD(winres) == 0) { 1103 1251 dprintf(("Win32Window:: Win32Resource *winres == 0")); 1104 SetLastError(ERROR_INVALID_PARAMETER);1252 SetLastError(ERROR_INVALID_PARAMETER); 1105 1253 return FALSE; 1106 1254 }
Note:
See TracChangeset
for help on using the changeset viewer.