I was playing around with a splitting up a window area using some code posted by
Dominic, I stripped it down and want three main child windows...
The rebar disappears on me while dragging the bands, I think they are trying to attach
outside the visible area, but not sure.
Testing,
grab the Horz rebar,(mousedown and hold) slide to the left and off the window and let go...
grab the Vert rebar, slide the mouse to the bottom, off the window and let go...
I'm unable to come up with a solution to prevent this effect.
Dominic, I stripped it down and want three main child windows...
The rebar disappears on me while dragging the bands, I think they are trying to attach
outside the visible area, but not sure.
Testing,
grab the Horz rebar,(mousedown and hold) slide to the left and off the window and let go...
grab the Vert rebar, slide the mouse to the bottom, off the window and let go...
I'm unable to come up with a solution to prevent this effect.
Code:
' Skeleton code provided by Dominic Mitchell posting... #COMPILE EXE #INCLUDE "WIN32API.INC" #INCLUDE "COMMCTRL.INC" ' Form1 %IDD_FORM1 = 100 %IDC_FORM1_REBAR1 = 101 %IDC_FORM1_REBAR2 = 102 %IDC_FORM1_GENERIC1 = 103 %IDC_FORM1_GENERIC2 = 104 %IDC_FORM1_GENERIC3 = 105 ' Rebar1 %IDS_STRING0 = 32770 %IDS_STRING19 = 32771 ' Rebar2 %IDS_STRING1 = 32784 %IDS_STRING6 = 32785 GLOBAL gdwADM_RESIZEBANDS AS DWORD ' identifier of registered message DECLARE FUNCTION RebarSplit_RegisterClasses() AS LONG '--output debug string to Main window caption GLOBAL ghCtl AS DWORD SUB dout(BYVAL stext AS STRING) sendmessage ghCtl,%WM_SETTEXT,0,BYVAL STRPTR(stext) END SUB '---------------------------------------------------------------------- ' FUNCTION: phnxGetFormHandle ' PURPOSE: Finds the handle of the top-level window or MDI child ' window that is the ancestor of the specified window. The ' reference handle is the handle of any control on the form. ' RETURNS: The handle of the form. '---------------------------------------------------------------------- FUNCTION phnxGetFormHandle( BYVAL hWnd AS DWORD) AS DWORD WHILE ISTRUE (GetWindowLong(hWnd, %GWL_STYLE) AND %WS_CHILD) IF ISTRUE (GetWindowLong(hWnd, %GWL_EXSTYLE) AND %WS_EX_MDICHILD) THEN EXIT LOOP hWnd = GetParent(hWnd) WEND FUNCTION = hWnd END FUNCTION '------------------------------------------------------------------------------- ' PROCEDURE: phnxResizeRebarBands ' PURPOSE: Resizes the bands of a rebar control with the CCS_NORESIZE style ' perpendicularly to the orientation of the control. ' RETURN: No return value. '------------------------------------------------------------------------------- FUNCTION phnxResizeRebarBands(BYVAL hWndRebar AS DWORD,BYVAL fVertical AS LONG ) AS LONG '-if TRUE, rebar conrol has the CCS_VERT style LOCAL trc AS RECT, rc AS RECT LOCAL trbbi AS REBARBANDINFO LOCAL lCount AS LONG LOCAL lBandIdx AS LONG LOCAL cyChild AS LONG GetClientRect hWndRebar, trc IF ISFALSE fVertical THEN cyChild = trc.nBottom - trc.nTop - 4*GetSystemMetrics(%SM_CXBORDER) ELSE cyChild = trc.nRight - trc.nLeft - 4*GetSystemMetrics(%SM_CXBORDER) END IF trbbi.cbSize = SIZEOF(trbbi) trbbi.fMask = %RBBIM_CHILDSIZE lCount = SendMessage(hWndRebar, %RB_GETBANDCOUNT, 0, 0) lBandIdx = 0 DO WHILE lBandIdx < lCount SendMessage hWndRebar, %RB_GETBANDINFO, lBandIdx, BYVAL VARPTR(trbbi) trbbi.cyMinChild = cyChild trbbi.cyChild = cyChild trbbi.cyMaxChild = cyChild SendMessage hWndRebar, %RB_SETBANDINFO, lBandIdx, BYVAL VARPTR(trbbi) INCR lBandIdx LOOP END FUNCTION '------------------------------------------------------------------------------- ' WINMAIN: ' '------------------------------------------------------------------------------- FUNCTION WINMAIN(BYVAL hInstance AS DWORD,BYVAL hPrevInstance AS DWORD, _ BYVAL pszCmdLine AS ASCIIZ PTR,BYVAL nCmdShow AS LONG ) AS LONG LOCAL tmsg AS tagMsg LOCAL ticc AS INIT_COMMON_CONTROLSEX LOCAL hWnd AS DWORD LOCAL hWndModeless AS DWORD LOCAL hInst AS DWORD hInst = GetModuleHandle(BYVAL %NULL) 'handle of the application instance ' Load the common controls library and specify the classes to register. ticc.dwSize = SIZEOF(ticc) ticc.dwICC = %ICC_LISTVIEW_CLASSES OR %ICC_COOL_CLASSES InitCommonControlsEx ticc ' Register custom messages gdwADM_RESIZEBANDS = RegisterWindowMessage("ADM_RESIZEBANDS") ' Register window classes IF ISTRUE RebarSplit_RegisterClasses() THEN FUNCTION = %FALSE EXIT FUNCTION END IF ' Create the Main Form1 window... hWnd = CreateWindowEx(%WS_EX_WINDOWEDGE,"Form1_Class","Rebars as splitterbars", _ %WS_OVERLAPPEDWINDOW OR %WS_VISIBLE OR _ %WS_CLIPSIBLINGS OR %WS_CLIPCHILDREN, _ 70, 130,439, 374, _ %NULL, %NULL,hInst, BYVAL %NULL) ghCtl = hWnd 'save for trouble shooting messages. ' If window could not be created, return "failure" IF ISFALSE hWnd THEN FUNCTION = %FALSE :EXIT FUNCTION END IF ' Make the window visible; update its client area ShowWindow hWnd, nCmdShow UpdateWindow hWnd ' Main message loop of program. ' Acquire and dispatch messages until a WM_QUIT message is received. WHILE ISTRUE GetMessage(tmsg, BYVAL %NULL, 0, 0) hWndModeless = phnxGetFormHandle(GetFocus()) IF (ISFALSE hWndModeless) OR (ISFALSE IsDialogMessage(hWndModeless, tmsg)) THEN TranslateMessage tmsg DispatchMessage tmsg END IF WEND FUNCTION = tmsg.wParam END FUNCTION '------------------------------------------------------------------------------- ' PROCEDURE: RebarSplit_RegisterClasses ' PURPOSE: Registers the window classes that are used in the program. ' RETURNS: FALSE if successful, TRUE if registration failed. '------------------------------------------------------------------------------- FUNCTION RebarSplit_RegisterClasses() AS LONG LOCAL szClassName AS ASCIIZ * %MAX_PATH ' class name LOCAL twcx AS WNDCLASSEX ' class information LOCAL hInst AS DWORD hInst = GetModuleHandle(BYVAL %NULL) 'handle of the application instance '-Register the window classes that belong to the Form1 window ' Register the MAIN Form1 window... szClassName = "Form1_Class" twcx.cbSize = SIZEOF(twcx) twcx.style = %CS_DBLCLKS twcx.lpfnWndProc = CODEPTR(Form1_WndProc) twcx.cbClsExtra = 0 twcx.cbWndExtra = 0 twcx.hInstance = hInst twcx.hIcon = LoadIcon(%NULL, BYVAL %IDI_APPLICATION) twcx.hCursor = LoadCursor(%NULL, BYVAL %IDC_ARROW) twcx.hbrBackground = %COLOR_BTNFACE + 1 twcx.lpszMenuName = %NULL twcx.lpszClassName = VARPTR(szClassName) twcx.hIconSm = %NULL IF ISFALSE RegisterClassEx(twcx) THEN FUNCTION = %TRUE :EXIT FUNCTION END IF ' Register the Generic1 window szClassName = "Form1_Generic1_Class" twcx.cbSize = SIZEOF(twcx) twcx.style = %CS_DBLCLKS twcx.lpfnWndProc = CODEPTR(Form1_Generic1_WndProc) twcx.cbClsExtra = 0 twcx.cbWndExtra = 0 twcx.hInstance = hInst twcx.hIcon = %NULL twcx.hCursor = LoadCursor(%NULL, BYVAL %IDC_ARROW) twcx.hbrBackground = %COLOR_BTNFACE + 1 twcx.lpszMenuName = %NULL twcx.lpszClassName = VARPTR(szClassName) twcx.hIconSm = %NULL IF ISFALSE RegisterClassEx(twcx) THEN FUNCTION = %TRUE :EXIT FUNCTION END IF ' Register the Generic2 window szClassName = "Form1_Generic2_Class" twcx.cbSize = SIZEOF(twcx) twcx.style = %CS_DBLCLKS twcx.lpfnWndProc = CODEPTR(Form1_Generic1_WndProc) twcx.cbClsExtra = 0 twcx.cbWndExtra = 0 twcx.hInstance = hInst twcx.hIcon = %NULL twcx.hCursor = LoadCursor(%NULL, BYVAL %IDC_ARROW) twcx.hbrBackground = %COLOR_BTNFACE + 1 twcx.lpszMenuName = %NULL twcx.lpszClassName = VARPTR(szClassName) twcx.hIconSm = %NULL IF ISFALSE RegisterClassEx(twcx) THEN FUNCTION = %TRUE :EXIT FUNCTION END IF ' Register the Generic3 window szClassName = "Form1_Generic3_Class" twcx.cbSize = SIZEOF(twcx) twcx.style = %CS_DBLCLKS twcx.lpfnWndProc = CODEPTR(Form1_Generic3_WndProc) twcx.cbClsExtra = 0 twcx.cbWndExtra = 0 twcx.hInstance = hInst twcx.hIcon = %NULL twcx.hCursor = LoadCursor(%NULL, BYVAL %IDC_ARROW) twcx.hbrBackground = %COLOR_BTNFACE + 1 twcx.lpszMenuName = %NULL twcx.lpszClassName = VARPTR(szClassName) twcx.hIconSm = %NULL IF ISFALSE RegisterClassEx(twcx) THEN FUNCTION = %TRUE :EXIT FUNCTION END IF ' All registration successful FUNCTION = %FALSE END FUNCTION '------------------------------------------------------------------------------- ' PROCEDURE: Form1_WndProc ' PURPOSE: Processes messages for the Form1 window. '------------------------------------------------------------------------------- FUNCTION Form1_WndProc(BYVAL hWnd AS DWORD,BYVAL uMsg AS DWORD, _ BYVAL wParam AS DWORD,BYVAL lParam AS LONG) AS LONG LOCAL szItem AS ASCIIZ * %MAX_PATH ' working variable LOCAL trbi AS REBARINFO ' specifies attributes(imagelist) of the rebar control LOCAL trbbi AS REBARBANDINFO ' specifies or receives the attributes of a rebar band LOCAL ptnmhdr AS NMHDR PTR ' information about a notification message LOCAL ptrbcs AS NMREBARCHILDSIZE PTR ' information about the change in size of a window embedded in a rebar band LOCAL hWndChild AS DWORD ' handle of child window LOCAL hWndRebar AS DWORD ' handle of rebar control LOCAL hFont AS DWORD ' handle of font used by form '--- SELECT CASE uMsg '--- CASE %WM_NOTIFY ptnmhdr = lParam '--- SELECT CASE @ptnmhdr.idFrom '--- CASE %IDC_FORM1_REBAR1 '--- SELECT CASE @ptnmhdr.code '--- 'CASE %RBN_BEGINDRAG 'CASE %RBN_LAYOUTCHANGED '--- CASE %RBN_CHILDSIZE ptrbcs = lParam ' Resize the child controls of the embedded window IF @ptrbcs.wID = %IDS_STRING19 THEN hWndRebar = GetDlgItem(@ptnmhdr.hwndFrom, %IDC_FORM1_REBAR2) PostMessage hWnd, gdwADM_RESIZEBANDS, 0, hWndRebar END IF END SELECT END SELECT '--- CASE %WM_DESTROY PostQuitMessage 0 FUNCTION = %FALSE :EXIT FUNCTION '--- CASE %WM_SIZE IF wParam <> %SIZE_MINIMIZED THEN hWndRebar = GetDlgItem(hWnd, %IDC_FORM1_REBAR1) SetWindowPos hWndRebar, %NULL, 0, 0, LOWRD(lParam), HIWRD(lParam), %SWP_NOZORDER OR %SWP_NOMOVE ' Resize rebar panels perpendicular to orientation of rebar PostMessage hWnd, gdwADM_RESIZEBANDS, 0, hWndRebar hWndRebar = GetDlgItem(hWndRebar, %IDC_FORM1_REBAR2) PostMessage hWnd, gdwADM_RESIZEBANDS, 0, hWndRebar END IF FUNCTION = %FALSE :EXIT FUNCTION '--- CASE gdwADM_RESIZEBANDS '-Resize rebar panels perpendicular to orientation of rebar phnxResizeRebarBands lParam, ( GetWindowLong(lParam, %GWL_STYLE) AND %CCS_VERT ) phnxResizeRebarBands lParam, ( GetWindowLong(lParam, %GWL_STYLE) AND %CCS_VERT ) FUNCTION = %FALSE :EXIT FUNCTION '--- CASE %WM_CREATE LOCAL hInst AS DWORD hInst = GetModuleHandle(BYVAL %NULL) 'handle of the application instance '-Create the Rebar1 rebar control... hWndChild = CreateWindowEx(%NULL,"ReBarWindow32","", _ %WS_CHILD OR %WS_VISIBLE OR %WS_BORDER OR _ %WS_CLIPCHILDREN OR %WS_CLIPSIBLINGS OR _ %CCS_NORESIZE OR %CCS_NODIVIDER OR _ %RBS_VARHEIGHT OR %RBS_FIXEDORDER, _ 0, 0,176, 211, _ hWnd, %IDC_FORM1_REBAR1,hInst, BYVAL %NULL) '-Save the handle of the rebar. It is used when embedding controls hWndRebar = hWndChild '-Subclass the Rebar control SetProp hWndChild, "OLDWNDPROC", SetWindowLong(hWndChild, %GWL_WNDPROC, CODEPTR(Form1_Rebar1_SubclassProc)) SendMessage hWndChild, %WM_SETFONT, hFont, %TRUE '-Create Generic1 window... hWndChild = CreateWindowEx(%WS_EX_CONTROLPARENT OR %WS_EX_CLIENTEDGE,"Form1_Generic1_Class", "", _ %WS_CHILD OR %WS_VISIBLE OR %WS_BORDER OR _ %WS_CLIPSIBLINGS OR %WS_CLIPCHILDREN, _ 9, 2,133, 200, _ hWnd, %IDC_FORM1_GENERIC1,hInst, BYVAL %NULL) '-Add the band containing the Generic1 Window to the rebar... trbbi.cbSize = SIZEOF(trbbi) trbbi.fMask = %RBBIM_STYLE OR %RBBIM_CHILD OR %RBBIM_CHILDSIZE OR _ %RBBIM_SIZE OR %RBBIM_ID OR %RBBIM_IDEALSIZE trbbi.fStyle = %RBBS_CHILDEDGE OR %RBBS_VARIABLEHEIGHT OR %RBBS_NOGRIPPER trbbi.hwndChild = hWndChild trbbi.cxMinChild = 1 '-minimum size > 0 so that gripper does not become stuck trbbi.cyMinChild = 0 trbbi.cyChild = 200 trbbi.cyMaxChild = 32767 trbbi.cyIntegral = 0 trbbi.cx = 146 trbbi.wID = %IDS_STRING0 trbbi.cxIdeal = 146 SendMessage hWndRebar, %RB_INSERTBAND, 0, BYVAL VARPTR(trbbi) '-Create the Rebar2 rebar control... hWndChild = CreateWindowEx(%NULL,"ReBarWindow32", "", _ %WS_CHILD OR %WS_VISIBLE OR %WS_BORDER OR _ %WS_CLIPCHILDREN OR %WS_CLIPSIBLINGS OR _ %CCS_NORESIZE OR %CCS_NODIVIDER OR %CCS_VERT OR _ %RBS_VARHEIGHT OR %RBS_FIXEDORDER, _ 190, 1, 211, 246, _ hWnd, %IDC_FORM1_REBAR2,hInst, BYVAL %NULL) '-Save the handle of the rebar. It is used when embedding controls hWndRebar = hWndChild SendMessage hWndChild, %WM_SETFONT, hFont, %TRUE '-Create the Generic2 window control... hWndChild = CreateWindowEx(%WS_EX_CONTROLPARENT OR %WS_EX_CLIENTEDGE,"Form1_Generic2_Class", "", _ %WS_CHILD OR %WS_VISIBLE OR %WS_BORDER OR _ %WS_CLIPSIBLINGS OR %WS_CLIPCHILDREN, _ 2, 9,200, 114, _ hWnd, %IDC_FORM1_GENERIC2,hInst, BYVAL %NULL) '-Add the band containing the Generic2 window to the rebar trbbi.cbSize = SIZEOF(trbbi) trbbi.fMask = %RBBIM_STYLE OR %RBBIM_CHILD OR %RBBIM_CHILDSIZE OR _ %RBBIM_SIZE OR %RBBIM_ID OR %RBBIM_IDEALSIZE trbbi.fStyle = %RBBS_CHILDEDGE OR %RBBS_VARIABLEHEIGHT OR %RBBS_NOGRIPPER trbbi.hwndChild = hWndChild trbbi.cxMinChild = 1 ' minimum size > 0 so that gripper does not become stuck trbbi.cyMinChild = 0 trbbi.cyChild = 200 trbbi.cyMaxChild = 32767 trbbi.cyIntegral = 0 trbbi.cx = 146 trbbi.wID = %IDS_STRING1 trbbi.cxIdeal = 146 SendMessage hWndRebar, %RB_INSERTBAND, -1, BYVAL VARPTR(trbbi) '-Create the Generic3 window... hWndChild = CreateWindowEx(%WS_EX_CONTROLPARENT OR %WS_EX_CLIENTEDGE,"Form1_Generic3_Class", "", _ %WS_CHILD OR %WS_VISIBLE OR %WS_BORDER OR _ %WS_CLIPSIBLINGS OR %WS_CLIPCHILDREN, _ 2, 138,200, 104, _ hWnd, %IDC_FORM1_GENERIC3,hInst, BYVAL %NULL) '-Add the band containing the Generic1 window to the rebar trbbi.cbSize = SIZEOF(trbbi) trbbi.fMask = %RBBIM_STYLE OR %RBBIM_CHILD OR %RBBIM_CHILDSIZE OR _ %RBBIM_SIZE OR %RBBIM_ID OR %RBBIM_IDEALSIZE trbbi.fStyle = %RBBS_CHILDEDGE OR %RBBS_VARIABLEHEIGHT OR %RBBS_GRIPPERALWAYS trbbi.hwndChild = hWndChild 'GetDlgItem(hWnd, %IDC_FORM1_GENERIC3) trbbi.cxMinChild = 100 trbbi.cyMinChild = 0 trbbi.cyChild = 200 trbbi.cyMaxChild = 32767 trbbi.cyIntegral = 0 trbbi.cx = 191 trbbi.wID = %IDS_STRING6 trbbi.cxIdeal = 191 SendMessage hWndRebar, %RB_INSERTBAND, -1, BYVAL VARPTR(trbbi) '-Add the band containing the second rebar to first rebar hWndRebar = GetDlgItem(hWnd, %IDC_FORM1_REBAR1) trbbi.cbSize = SIZEOF(trbbi) trbbi.fMask = %RBBIM_STYLE OR %RBBIM_CHILD OR %RBBIM_CHILDSIZE OR _ %RBBIM_SIZE OR %RBBIM_ID OR %RBBIM_IDEALSIZE trbbi.fStyle = %RBBS_CHILDEDGE OR %RBBS_VARIABLEHEIGHT OR %RBBS_GRIPPERALWAYS trbbi.hwndChild = GetDlgItem(hWnd, %IDC_FORM1_REBAR2) trbbi.cxMinChild = 100 trbbi.cyMinChild = 0 trbbi.cyChild = 200 trbbi.cyMaxChild = 32767 trbbi.cyIntegral = 0 trbbi.cx = 146 trbbi.wID = %IDS_STRING19 trbbi.cxIdeal = 146 SendMessage hWndRebar, %RB_INSERTBAND, -1, BYVAL VARPTR(trbbi) FUNCTION = %FALSE :EXIT FUNCTION END SELECT FUNCTION = DefWindowProc(hWnd, uMsg, wParam, lParam) END FUNCTION '------------------------------------------------------------------------------- ' PROCEDURE: Form1_Rebar1_SubclassProc ' PURPOSE: Processes messages for the subclassed Rebar window. '------------------------------------------------------------------------------- FUNCTION Form1_Rebar1_SubclassProc(BYVAL hWnd AS DWORD,BYVAL uMsg AS DWORD, _ BYVAL wParam AS DWORD,BYVAL lParam AS LONG ) AS LONG LOCAL lpOldWndProc AS DWORD ' address of original window procedure lpOldWndProc = GetProp(hWnd, "OLDWNDPROC") '--- SELECT CASE uMsg '--- CASE %WM_DESTROY ' Remove control subclassing SetWindowLong hWnd, %GWL_WNDPROC, RemoveProp(hWnd, "OLDWNDPROC") '--- CASE %WM_SETCURSOR ' If the window under the cursor is the embedded rebar IF wParam = GetDlgItem(hWnd, %IDC_FORM1_REBAR2) THEN ' Forward the message to the embedded rebar SendMessage wParam, uMsg, wParam, lParam ' Return true to stop further processing of this message FUNCTION = %TRUE :EXIT FUNCTION END IF END SELECT FUNCTION = CallWindowProc(lpOldWndProc, hWnd, uMsg, wParam, lParam) END FUNCTION '------------------------------------------------------------------------------- ' PROCEDURE: Form1_Generic1_WndProc ' PURPOSE: Processes messages for the Generic1 window. '------------------------------------------------------------------------------- FUNCTION Form1_Generic1_WndProc(BYVAL hWnd AS DWORD,BYVAL uMsg AS DWORD, _ BYVAL wParam AS DWORD,BYVAL lParam AS LONG ) AS LONG LOCAL hWndChild AS DWORD LOCAL hFont AS DWORD '--- SELECT CASE uMsg '--- CASE %WM_COMMAND '--- SELECT CASE LOWRD(wParam) END SELECT '--- CASE %WM_DESTROY FUNCTION = %FALSE :EXIT FUNCTION '--- CASE %WM_SIZE '--- CASE %WM_CREATE LOCAL hInst AS DWORD hInst = GetModuleHandle(BYVAL %NULL) FUNCTION = %FALSE :EXIT FUNCTION END SELECT FUNCTION = DefWindowProc(hWnd, uMsg, wParam, lParam) END FUNCTION '------------------------------------------------------------------------------- ' PROCEDURE: Form1_Generic2_WndProc ' PURPOSE: Processes messages for the Generic1 window. '------------------------------------------------------------------------------- FUNCTION Form1_Generic2_WndProc(BYVAL hWnd AS DWORD,BYVAL uMsg AS DWORD, _ BYVAL wParam AS DWORD,BYVAL lParam AS LONG ) AS LONG LOCAL hWndChild AS DWORD LOCAL hFont AS DWORD '--- SELECT CASE uMsg '--- CASE %WM_COMMAND '--- SELECT CASE LOWRD(wParam) END SELECT '--- CASE %WM_DESTROY FUNCTION = %FALSE :EXIT FUNCTION '--- CASE %WM_SIZE '--- CASE %WM_CREATE LOCAL hInst AS DWORD hInst = GetModuleHandle(BYVAL %NULL) FUNCTION = %FALSE :EXIT FUNCTION END SELECT FUNCTION = DefWindowProc(hWnd, uMsg, wParam, lParam) END FUNCTION '------------------------------------------------------------------------------- ' PROCEDURE: Form1_Generic3_WndProc ' PURPOSE: Processes messages for the Generic1 window. '------------------------------------------------------------------------------- FUNCTION Form1_Generic3_WndProc(BYVAL hWnd AS DWORD,BYVAL uMsg AS DWORD, _ BYVAL wParam AS DWORD,BYVAL lParam AS LONG ) AS LONG LOCAL hWndChild AS DWORD LOCAL hFont AS DWORD '--- SELECT CASE uMsg '--- CASE %WM_COMMAND '--- SELECT CASE LOWRD(wParam) END SELECT '--- CASE %WM_DESTROY FUNCTION = %FALSE :EXIT FUNCTION '--- CASE %WM_SIZE '--- CASE %WM_CREATE LOCAL hInst AS DWORD hInst = GetModuleHandle(BYVAL %NULL) FUNCTION = %FALSE :EXIT FUNCTION END SELECT FUNCTION = DefWindowProc(hWnd, uMsg, wParam, lParam) END FUNCTION
Comment