From 454260146895336acf56fea9f2a9b1e722b900e1 Mon Sep 17 00:00:00 2001 From: Boudewijn Dekker Date: Thu, 13 Apr 2000 20:59:11 +0000 Subject: [PATCH] applied fixes to make a user32.dll code is based on wine. svn path=/trunk/; revision=1120 --- reactos/lib/user32/controls/combo.c | 2 +- reactos/lib/user32/controls/edit.c | 12 +++--- reactos/lib/user32/controls/listbox.c | 2 +- reactos/lib/user32/controls/scroll.c | 2 +- reactos/lib/user32/internal/win.c | 57 +++++++++++++-------------- reactos/lib/user32/internal/winpos.c | 5 ++- reactos/lib/user32/misc/dllmain.c | 7 ++++ reactos/lib/user32/misc/main.c | 3 +- reactos/lib/user32/windows/wndproc.c | 32 +++++++-------- 9 files changed, 65 insertions(+), 57 deletions(-) diff --git a/reactos/lib/user32/controls/combo.c b/reactos/lib/user32/controls/combo.c index 4b5bb207eac..0eea751203f 100644 --- a/reactos/lib/user32/controls/combo.c +++ b/reactos/lib/user32/controls/combo.c @@ -82,7 +82,7 @@ static LRESULT COMBO_NCCreate(WND* wnd, LPARAM lParam) if ( wnd && COMBO_Init() && (lphc = HeapAlloc(GetProcessHeap(), 0, sizeof(HEADCOMBO))) ) { - LPCREATESTRUCTA lpcs = (CREATESTRUCTA*)lParam; + LPCREATESTRUCT lpcs = (CREATESTRUCT*)lParam; memset( lphc, 0, sizeof(HEADCOMBO) ); *(LPHEADCOMBO*)wnd->wExtra = lphc; diff --git a/reactos/lib/user32/controls/edit.c b/reactos/lib/user32/controls/edit.c index dbf3032ec7e..26e7cfbc338 100644 --- a/reactos/lib/user32/controls/edit.c +++ b/reactos/lib/user32/controls/edit.c @@ -216,7 +216,7 @@ static void EDIT_WM_Char(WND *wnd, EDITSTATE *es, CHAR c, DWORD key_data); static void EDIT_WM_Command(WND *wnd, EDITSTATE *es, INT code, INT id, HWND conrtol); static void EDIT_WM_ContextMenu(WND *wnd, EDITSTATE *es, HWND hwnd, INT x, INT y); static void EDIT_WM_Copy(WND *wnd, EDITSTATE *es); -static LRESULT EDIT_WM_Create(WND *wnd, EDITSTATE *es, LPCREATESTRUCTA cs); +static LRESULT EDIT_WM_Create(WND *wnd, EDITSTATE *es, LPCREATESTRUCT cs); static void EDIT_WM_Destroy(WND *wnd, EDITSTATE *es); static LRESULT EDIT_WM_EraseBkGnd(WND *wnd, EDITSTATE *es, HDC dc); static INT EDIT_WM_GetText(WND *wnd, EDITSTATE *es, INT count, LPSTR text); @@ -227,7 +227,7 @@ static LRESULT EDIT_WM_LButtonDblClk(WND *wnd, EDITSTATE *es, DWORD keys, INT x, static LRESULT EDIT_WM_LButtonDown(WND *wnd, EDITSTATE *es, DWORD keys, INT x, INT y); static LRESULT EDIT_WM_LButtonUp(WND *wnd, EDITSTATE *es, DWORD keys, INT x, INT y); static LRESULT EDIT_WM_MouseMove(WND *wnd, EDITSTATE *es, DWORD keys, INT x, INT y); -static LRESULT EDIT_WM_NCCreate(WND *wnd, LPCREATESTRUCTA cs); +static LRESULT EDIT_WM_NCCreate(WND *wnd, LPCREATESTRUCT cs); static void EDIT_WM_Paint(WND *wnd, EDITSTATE *es); static void EDIT_WM_Paste(WND *wnd, EDITSTATE *es); static void EDIT_WM_SetFocus(WND *wnd, EDITSTATE *es, HWND window_losing_focus); @@ -313,7 +313,7 @@ LRESULT WINAPI EditWndProc( HWND hwnd, UINT msg, case WM_NCCREATE: DPRINTF_EDIT_MSG("WM_NCCREATE"); - return EDIT_WM_NCCreate(wnd, (LPCREATESTRUCTA)lParam); + return EDIT_WM_NCCreate(wnd, (LPCREATESTRUCT)lParam); } if (!es) @@ -591,7 +591,7 @@ LRESULT WINAPI EditWndProc( HWND hwnd, UINT msg, case WM_CREATE: DPRINTF_EDIT_MSG("WM_CREATE"); - result = EDIT_WM_Create(wnd, es, (LPCREATESTRUCTA)lParam); + result = EDIT_WM_Create(wnd, es, (LPCREATESTRUCT)lParam); break; case WM_CUT: @@ -2720,7 +2720,7 @@ static void EDIT_WM_Copy(WND *wnd, EDITSTATE *es) * WM_CREATE * */ -static LRESULT EDIT_WM_Create(WND *wnd, EDITSTATE *es, LPCREATESTRUCTA cs) +static LRESULT EDIT_WM_Create(WND *wnd, EDITSTATE *es, LPCREATESTRUCT cs) { /* * To initialize some final structure members, we call some helper @@ -3231,7 +3231,7 @@ static LRESULT EDIT_WM_MouseMove(WND *wnd, EDITSTATE *es, DWORD keys, INT x, INT * WM_NCCREATE * */ -static LRESULT EDIT_WM_NCCreate(WND *wnd, LPCREATESTRUCTA cs) +static LRESULT EDIT_WM_NCCreate(WND *wnd, LPCREATESTRUCT cs) { EDITSTATE *es; diff --git a/reactos/lib/user32/controls/listbox.c b/reactos/lib/user32/controls/listbox.c index 362132ef6b4..8cf352023dd 100644 --- a/reactos/lib/user32/controls/listbox.c +++ b/reactos/lib/user32/controls/listbox.c @@ -2498,7 +2498,7 @@ LRESULT WINAPI ComboLBWndProc( HWND hwnd, UINT msg, switch( msg ) { case WM_CREATE: -#define lpcs ((LPCREATESTRUCTA)lParam) +#define lpcs ((LPCREATESTRUCT)lParam) DPRINT( "\tpassed parent handle = 0x%08x\n", (UINT)lpcs->lpCreateParams); diff --git a/reactos/lib/user32/controls/scroll.c b/reactos/lib/user32/controls/scroll.c index f0960d22386..8a6fb710a42 100644 --- a/reactos/lib/user32/controls/scroll.c +++ b/reactos/lib/user32/controls/scroll.c @@ -855,7 +855,7 @@ LRESULT STDCALL ScrollBarWndProc( HWND hwnd, UINT message, WPARAM wParam, { case WM_CREATE: { - CREATESTRUCTA *lpCreat = (CREATESTRUCTA *)lParam; + CREATESTRUCT *lpCreat = (CREATESTRUCT *)lParam; if (lpCreat->style & SBS_SIZEBOX) { DPRINT( "FIXME Unimplemented style SBS_SIZEBOX.\n" ); diff --git a/reactos/lib/user32/internal/win.c b/reactos/lib/user32/internal/win.c index fcada1c40e6..44f2e13d503 100644 --- a/reactos/lib/user32/internal/win.c +++ b/reactos/lib/user32/internal/win.c @@ -32,15 +32,12 @@ BOOL WIN_CreateDesktopWindow(void) DPRINT("Creating desktop window\n"); -#if 0 - if (!ICONTITLE_Init() || - !WINPOS_CreateInternalPosAtom() || - !(class = CLASS_FindClassByAtom( STRING2ATOM(DESKTOP_CLASS_NAME) , 0 ))) + + + class = CLASS_FindClassByAtom( STRING2ATOMW(DESKTOP_CLASS_NAME) , 0 ); + if ( class == NULL ) return FALSE; -#else - WINPOS_CreateInternalPosAtom(); - class = CLASS_FindClassByAtom( STRING2ATOMW(DESKTOP_CLASS_NAME) , 0 ); -#endif + hwndDesktop = HeapAlloc(GetProcessHeap(),0, sizeof(WND)+class->cbWndExtra ); if (!hwndDesktop) return FALSE; pWndDesktop = (WND *) ( hwndDesktop ); @@ -72,7 +69,7 @@ BOOL WIN_CreateDesktopWindow(void) pWndDesktop->dwStyle = WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS; pWndDesktop->dwExStyle = 0; - pWndDesktop->dce = NULL; + pWndDesktop->dce = DCE_AllocDCE(pWndDesktop,DCE_WINDOW_DC); pWndDesktop->pVScroll = NULL; pWndDesktop->pHScroll = NULL; pWndDesktop->pProp = NULL; @@ -96,7 +93,7 @@ BOOL WIN_CreateDesktopWindow(void) HANDLE WIN_CreateWindowEx( CREATESTRUCT *cs, ATOM classAtom) { - HANDLE hWnd; + WND *wndPtr; STARTUPINFO StartupInfo; CLASS *classPtr = NULL; @@ -137,7 +134,7 @@ HANDLE WIN_CreateWindowEx( CREATESTRUCT *cs, ATOM classAtom) wndPtr->class = classPtr; wndPtr->hwndSelf = wndPtr; - hWnd = wndPtr->hwndSelf; + /* Fill the window structure */ @@ -152,8 +149,8 @@ HANDLE WIN_CreateWindowEx( CREATESTRUCT *cs, ATOM classAtom) } else { - wndPtr->parent = pWndDesktop; - if (!cs->hwndParent || (cs->hwndParent == pWndDesktop->hwndSelf)) + wndPtr->parent = WIN_GetDesktop(); + if (!cs->hwndParent || (cs->hwndParent == WIN_GetDesktop()->hwndSelf)) wndPtr->owner = NULL; else { @@ -167,8 +164,8 @@ HANDLE WIN_CreateWindowEx( CREATESTRUCT *cs, ATOM classAtom) /* else { - wndPtr->parent = pWndDesktop; - if (!cs->hWndParent || (cs->hWndParent == pWndDesktop->hwndSelf)) + wndPtr->parent = WIN_GetDesktop(); + if (!cs->hWndParent || (cs->hWndParent == WIN_GetDesktop()->hwndSelf)) wndPtr->owner = NULL; else wndPtr->owner = WIN_GetTopParentPtr(WIN_FindWndPtr(cs->hWndParent)); @@ -177,7 +174,7 @@ HANDLE WIN_CreateWindowEx( CREATESTRUCT *cs, ATOM classAtom) wndPtr->winproc = classPtr->winproc; wndPtr->dwMagic = WND_MAGIC; - //wndPtr->hwndSelf = hWnd; + wndPtr->hInstance = cs->hInstance; wndPtr->text = NULL; wndPtr->hmemTaskQ = GetFastQueue(); @@ -193,7 +190,7 @@ HANDLE WIN_CreateWindowEx( CREATESTRUCT *cs, ATOM classAtom) wndPtr->pProp = NULL; wndPtr->userdata = 0; wndPtr->hSysMenu = (wndPtr->dwStyle & WS_SYSMENU) - ? MENU_GetSysMenu( hWnd, 0 ) : 0; + ? MENU_GetSysMenu( wndPtr->hwndSelf, 0 ) : 0; if (classPtr->cbWndExtra) HEAP_memset( wndPtr->wExtra, 0, classPtr->cbWndExtra); @@ -210,7 +207,7 @@ HANDLE WIN_CreateWindowEx( CREATESTRUCT *cs, ATOM classAtom) cbtc.lpcs = cs; cbtc.hwndInsertAfter = hWndLinkAfter; - ret = HOOK_CallHooks(WH_CBT, HCBT_CREATEWND, (INT)hWnd, (LPARAM)&cbtc, classPtr->bUnicode); + ret = HOOK_CallHooks(WH_CBT, HCBT_CREATEWND, (INT)wndPtr->hwndSelf, (LPARAM)&cbtc, classPtr->bUnicode); if (ret) { @@ -331,7 +328,7 @@ HANDLE WIN_CreateWindowEx( CREATESTRUCT *cs, ATOM classAtom) if ((wndPtr->dwStyle & (WS_CAPTION | WS_CHILD)) == WS_CAPTION ) { if (cs->hMenu) - SetMenu(hWnd, cs->hMenu); + SetMenu(wndPtr->hwndSelf, cs->hMenu); else { if (classPtr->menuName) { @@ -364,9 +361,9 @@ HANDLE WIN_CreateWindowEx( CREATESTRUCT *cs, ATOM classAtom) /* Insert the window in the linked list */ - WIN_LinkWindow( hWnd, hWndLinkAfter ); + WIN_LinkWindow( wndPtr->hwndSelf, hWndLinkAfter ); - WINPOS_SendNCCalcSize( hWnd, FALSE, &wndPtr->rectWindow, + WINPOS_SendNCCalcSize( wndPtr->hwndSelf, FALSE, &wndPtr->rectWindow, NULL, NULL, 0, &wndPtr->rectClient ); OffsetRect(&wndPtr->rectWindow, maxPos.x - wndPtr->rectWindow.left, maxPos.y - wndPtr->rectWindow.top); @@ -374,7 +371,7 @@ HANDLE WIN_CreateWindowEx( CREATESTRUCT *cs, ATOM classAtom) if( (MSG_SendMessage( wndPtr, WM_CREATE, 0, (LPARAM)cs)) == -1 ) { - WIN_UnlinkWindow( hWnd ); + WIN_UnlinkWindow( wndPtr->hwndSelf ); WIN_DestroyWindow( wndPtr ); return NULL; } @@ -405,7 +402,7 @@ HANDLE WIN_CreateWindowEx( CREATESTRUCT *cs, ATOM classAtom) swFlag = ((wndPtr->dwStyle & WS_CHILD) || GetActiveWindow()) ? SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED : SWP_NOZORDER | SWP_FRAMECHANGED; - SetWindowPos( hWnd, 0, newPos.left, newPos.top, + SetWindowPos( wndPtr->hwndSelf, 0, newPos.left, newPos.top, newPos.right, newPos.bottom, swFlag ); } @@ -414,19 +411,19 @@ HANDLE WIN_CreateWindowEx( CREATESTRUCT *cs, ATOM classAtom) /* Notify the parent window only */ MSG_SendMessage( wndPtr->parent, WM_PARENTNOTIFY, - MAKEWPARAM(WM_CREATE, wndPtr->wIDmenu), (LPARAM)hWnd ); - if( !IsWindow(hWnd) ) return 0; + MAKEWPARAM(WM_CREATE, wndPtr->wIDmenu), (LPARAM)wndPtr->hwndSelf ); + if( !IsWindow(wndPtr->hwndSelf) ) return 0; } if (cs->style & WS_VISIBLE) - ShowWindow( hWnd, SW_SHOW ); + ShowWindow( wndPtr->hwndSelf, SW_SHOW ); /* Call WH_SHELL hook */ if (!(wndPtr->dwStyle & WS_CHILD) && !wndPtr->owner) - HOOK_CallHooks( WH_SHELL, HSHELL_WINDOWCREATED, (INT)hWnd, 0L, classPtr->bUnicode); + HOOK_CallHooks( WH_SHELL, HSHELL_WINDOWCREATED, (INT)wndPtr->hwndSelf, 0L, classPtr->bUnicode); - return hWnd; + return wndPtr->hwndSelf; } @@ -445,14 +442,14 @@ WINBOOL WIN_IsWindow(HANDLE hWnd) HWND WIN_FindWinToRepaint( HWND hwnd, HQUEUE hQueue ) { HWND hwndRet; - WND *pWnd = pWndDesktop; + WND *pWnd = WIN_GetDesktop(); /* Note: the desktop window never gets WM_PAINT messages * The real reason why is because Windows DesktopWndProc * does ValidateRgn inside WM_ERASEBKGND handler. */ - pWnd = hwnd ? WIN_FindWndPtr( hwnd ) : pWndDesktop->child; + pWnd = hwnd ? WIN_FindWndPtr( hwnd ) : WIN_GetDesktop()->child; for ( ; pWnd ; pWnd = pWnd->next ) { diff --git a/reactos/lib/user32/internal/winpos.c b/reactos/lib/user32/internal/winpos.c index 1081c1d9e93..3213c96eebe 100644 --- a/reactos/lib/user32/internal/winpos.c +++ b/reactos/lib/user32/internal/winpos.c @@ -41,7 +41,10 @@ HWND WINPOS_GetActiveWindow(void) WINBOOL WINPOS_CreateInternalPosAtom() { LPSTR str = "SysIP"; - atomInternalPos = (LPCSTR)(DWORD)GlobalAddAtomA(str); +atomInternalPos ="SysIP"; + // atomInternalPos = (LPCSTR)(DWORD)GlobalAddAtomA(str); + //if ( atomInternalPos == NULL ) +// atomInternalPos = (LPCSTR)(DWORD)GlobalFindAtom(str); return (atomInternalPos) ? TRUE : FALSE; } diff --git a/reactos/lib/user32/misc/dllmain.c b/reactos/lib/user32/misc/dllmain.c index 03a40e3686a..00eaf3b62f4 100644 --- a/reactos/lib/user32/misc/dllmain.c +++ b/reactos/lib/user32/misc/dllmain.c @@ -27,6 +27,13 @@ DllMain( case DLL_PROCESS_ATTACH: //WinStation = CreateWindowStationA(NULL,0,GENERIC_ALL,NULL); //Desktop = CreateDesktopA(NULL,NULL,NULL,0,0,NULL); + WINPOS_CreateInternalPosAtom(); + SYSCOLOR_Init(); + WIDGETS_Init(); + ICONTITLE_Init(); + DIALOG_Init(); + COMBO_Init(); + MENU_Init(); break; case DLL_THREAD_ATTACH: break; diff --git a/reactos/lib/user32/misc/main.c b/reactos/lib/user32/misc/main.c index a0cb579a81d..64c7fa83e31 100644 --- a/reactos/lib/user32/misc/main.c +++ b/reactos/lib/user32/misc/main.c @@ -10,9 +10,10 @@ int main(int argc, char **argv) { - + WINPOS_CreateInternalPosAtom(); SYSCOLOR_Init(); WIDGETS_Init(); + ICONTITLE_Init(); DIALOG_Init(); COMBO_Init(); MENU_Init(); diff --git a/reactos/lib/user32/windows/wndproc.c b/reactos/lib/user32/windows/wndproc.c index 5eadd16231c..2a558076a9f 100644 --- a/reactos/lib/user32/windows/wndproc.c +++ b/reactos/lib/user32/windows/wndproc.c @@ -6,8 +6,8 @@ //#include -#define MDICREATESTRUCTA MDICREATESTRUCT -#define MDICREATESTRUCTW MDICREATESTRUCT +#define MDICREATESTRUCT MDICREATESTRUCT +#define MDICREATESTRUCT MDICREATESTRUCT /********************************************************************** @@ -124,7 +124,7 @@ LRESULT WINAPI DefWindowProcA( HWND hwnd, UINT msg, WPARAM wParam, { case WM_NCCREATE: { - CREATESTRUCTA *cs = (CREATESTRUCTA *)lParam; + CREATESTRUCT *cs = (CREATESTRUCT *)lParam; if (cs->lpszName) DEFWND_SetTextA( wndPtr, cs->lpszName ); result = 1; } @@ -191,7 +191,7 @@ LRESULT WINAPI DefWindowProcW( HWND hwnd, UINT msg, WPARAM wParam, { case WM_NCCREATE: { - CREATESTRUCTW *cs = (CREATESTRUCTW *)lParam; + CREATESTRUCT *cs = (CREATESTRUCT *)lParam; if (cs->lpszName) DEFWND_SetTextW( wndPtr, cs->lpszName ); result = 1; } @@ -303,10 +303,10 @@ INT WINPROC_MapMsg32ATo32W( HWND hwnd, UINT msg, WPARAM wParam, LPARAM *plparam case WM_NCCREATE: case WM_CREATE: { - CREATESTRUCTW *cs = (CREATESTRUCTW *)HeapAlloc( GetProcessHeap(), 0, + CREATESTRUCT *cs = (CREATESTRUCT *)HeapAlloc( GetProcessHeap(), 0, sizeof(*cs) ); if (!cs) return -1; - *cs = *(CREATESTRUCTW *)*plparam; + *cs = *(CREATESTRUCT *)*plparam; if (HIWORD(cs->lpszName)) cs->lpszName = HEAP_strdupAtoW( GetProcessHeap(), 0, (LPCSTR)cs->lpszName ); @@ -318,7 +318,7 @@ INT WINPROC_MapMsg32ATo32W( HWND hwnd, UINT msg, WPARAM wParam, LPARAM *plparam return 1; case WM_MDICREATE: { - MDICREATESTRUCTW *cs = HeapAlloc( GetProcessHeap(), 0, sizeof(MDICREATESTRUCT) ); + MDICREATESTRUCT *cs = HeapAlloc( GetProcessHeap(), 0, sizeof(MDICREATESTRUCT) ); if (!cs) return -1; *cs = *(MDICREATESTRUCT *)*plparam; if (HIWORD(cs->szClass)) @@ -410,7 +410,7 @@ void WINPROC_UnmapMsg32ATo32W( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam case WM_NCCREATE: case WM_CREATE: { - CREATESTRUCTW *cs = (CREATESTRUCTW *)lParam; + CREATESTRUCT *cs = (CREATESTRUCT *)lParam; if (HIWORD(cs->lpszName)) HeapFree( GetProcessHeap(), 0, (LPVOID)cs->lpszName ); if (HIWORD(cs->lpszClass)) @@ -421,7 +421,7 @@ void WINPROC_UnmapMsg32ATo32W( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam case WM_MDICREATE: { - MDICREATESTRUCTW *cs = (MDICREATESTRUCTW *)lParam; + MDICREATESTRUCT *cs = (MDICREATESTRUCT *)lParam; if (HIWORD(cs->szTitle)) HeapFree( GetProcessHeap(), 0, (LPVOID)cs->szTitle ); if (HIWORD(cs->szClass)) @@ -522,10 +522,10 @@ INT WINPROC_MapMsg32WTo32A( HWND hwnd, UINT msg, WPARAM wParam, LPARAM *plparam case WM_NCCREATE: case WM_CREATE: { - CREATESTRUCTA *cs = (CREATESTRUCTA *)HeapAlloc( GetProcessHeap(), 0, + CREATESTRUCT *cs = (CREATESTRUCT *)HeapAlloc( GetProcessHeap(), 0, sizeof(*cs) ); if (!cs) return -1; - *cs = *(CREATESTRUCTA *)*plparam; + *cs = *(CREATESTRUCT *)*plparam; if (HIWORD(cs->lpszName)) cs->lpszName = HEAP_strdupWtoA( GetProcessHeap(), 0, (LPCWSTR)cs->lpszName ); @@ -537,10 +537,10 @@ INT WINPROC_MapMsg32WTo32A( HWND hwnd, UINT msg, WPARAM wParam, LPARAM *plparam return 1; case WM_MDICREATE: { - MDICREATESTRUCTA *cs = - (MDICREATESTRUCTA *)HeapAlloc( GetProcessHeap(), 0, sizeof(*cs) ); + MDICREATESTRUCT *cs = + (MDICREATESTRUCT *)HeapAlloc( GetProcessHeap(), 0, sizeof(*cs) ); if (!cs) return -1; - *cs = *(MDICREATESTRUCTA *)*plparam; + *cs = *(MDICREATESTRUCT *)*plparam; if (HIWORD(cs->szTitle)) cs->szTitle = HEAP_strdupWtoA( GetProcessHeap(), 0, (LPCWSTR)cs->szTitle ); @@ -643,7 +643,7 @@ void WINPROC_UnmapMsg32WTo32A( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam case WM_NCCREATE: case WM_CREATE: { - CREATESTRUCTA *cs = (CREATESTRUCTA *)lParam; + CREATESTRUCT *cs = (CREATESTRUCT *)lParam; if (HIWORD(cs->lpszName)) HeapFree( GetProcessHeap(), 0, (LPVOID)cs->lpszName ); if (HIWORD(cs->lpszClass)) @@ -654,7 +654,7 @@ void WINPROC_UnmapMsg32WTo32A( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam case WM_MDICREATE: { - MDICREATESTRUCTA *cs = (MDICREATESTRUCTA *)lParam; + MDICREATESTRUCT *cs = (MDICREATESTRUCT *)lParam; if (HIWORD(cs->szTitle)) HeapFree( GetProcessHeap(), 0, (LPVOID)cs->szTitle ); if (HIWORD(cs->szClass))