Ignore:
Timestamp:
Jun 20, 1999, 6:47:39 PM (26 years ago)
Author:
sandervl
Message:

Parent notification changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/wndclass.cpp

    r131 r134  
    1 /* $Id: wndclass.cpp,v 1.4 1999-06-20 14:02:13 sandervl Exp $ */
     1/* $Id: wndclass.cpp,v 1.5 1999-06-20 16:47:38 sandervl Exp $ */
    22
    33/*
     
    4343WNDPROC_O32 ScrollbarHandler = 0;
    4444WNDPROC_O32 StaticHandler = 0;
     45
     46HWND hwndButton = 0;
     47HWND hwndListbox = 0;
     48HWND hwndEdit = 0;
     49HWND hwndCombobox = 0;
     50HWND hwndScrollbar = 0;
     51HWND hwndMdiClient = 0;
     52HWND hwndStatic = 0;
     53
     54Win32WindowClass *ButtonClass = 0;
     55Win32WindowClass *ListboxClass = 0;
     56Win32WindowClass *EditClass = 0;
     57Win32WindowClass *ComboboxClass = 0;
     58Win32WindowClass *MdiClientClass = 0;
     59Win32WindowClass *ScrollbarClass = 0;
     60Win32WindowClass *StaticClass = 0;
    4561//******************************************************************************
    4662//******************************************************************************
    4763LRESULT WIN32API ButtonCallback(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
    4864{
     65  switch(Msg)
     66  {
     67        case WM_CREATE:
     68        case WM_DESTROY:
     69        case WM_LBUTTONDOWN:
     70        case WM_MBUTTONDOWN:
     71        case WM_RBUTTONDOWN:
     72                NotifyParent(hwnd, Msg, wParam, lParam);
     73                break;
     74  }
    4975  return ButtonHandler(hwnd, Msg, wParam, lParam);
    5076}
     
    91117{
    92118 WNDCLASSA wndclass;
     119 HWND hwnd;
    93120
    94121   if(O32_GetClassInfo(NULL, "BUTTON", &wndclass)) {
    95         new Win32WindowClass(ButtonCallback, "BUTTON", hModule);
     122        dprintf(("Create BUTTON System class"));
     123        ButtonClass = new Win32WindowClass(ButtonCallback, "BUTTON", hModule);
    96124        ButtonHandler = (WNDPROC_O32)wndclass.lpfnWndProc;
     125        hwndButton = O32_CreateWindow("BUTTON", "BUTTON", 0, 0, 0, 0, 0, 0, 0, 0, 0);
     126        if(hwndButton == 0) {
     127                dprintf(("RegisterSystemClasses failed!!"));
     128        }
     129        O32_SetClassLong(hwndButton, GCL_WNDPROC, (LONG)ButtonCallback);
    97130   }
    98131   if(O32_GetClassInfo(NULL, "LISTBOX", &wndclass)) {
    99         new Win32WindowClass(ListboxCallback, "LISTBOX", hModule);
     132        dprintf(("Create LISTBOX System class"));
     133        ListboxClass = new Win32WindowClass(ListboxCallback, "LISTBOX", hModule);
    100134        ListboxHandler = (WNDPROC_O32)wndclass.lpfnWndProc;
     135        hwndListbox = O32_CreateWindow("LISTBOX", "LISTBOX", 0, 0, 0, 0, 0, 0, 0, 0, 0);
     136        if(hwndListbox == 0) {
     137                dprintf(("RegisterSystemClasses failed!!"));
     138        }
     139        O32_SetClassLong(hwndListbox, GCL_WNDPROC, (LONG)ListboxCallback);
    101140   }
    102141   if(O32_GetClassInfo(NULL, "COMBOBOX", &wndclass)) {
    103         new Win32WindowClass(ComboboxCallback, "COMBOBOX", hModule);
     142        dprintf(("Create COMBOBOX System class"));
     143        ComboboxClass = new Win32WindowClass(ComboboxCallback, "COMBOBOX", hModule);
    104144        ComboboxHandler = (WNDPROC_O32)wndclass.lpfnWndProc;
     145        hwndCombobox = O32_CreateWindow("COMBOBOX", "COMBOBOX", 0, 0, 0, 0, 0, 0, 0, 0, 0);
     146        if(hwndCombobox == 0) {
     147                dprintf(("RegisterSystemClasses failed!!"));
     148        }
     149        O32_SetClassLong(hwndCombobox, GCL_WNDPROC, (LONG)ComboboxCallback);
    105150   }
    106151   if(O32_GetClassInfo(NULL, "EDIT", &wndclass)) {
    107         new Win32WindowClass(EditCallback, "EDIT", hModule);
     152        dprintf(("Create EDIT System class"));
     153        EditClass = new Win32WindowClass(EditCallback, "EDIT", hModule);
    108154        EditHandler = (WNDPROC_O32)wndclass.lpfnWndProc;
     155        hwndEdit = O32_CreateWindow("EDIT", "EDIT", 0, 0, 0, 0, 0, 0, 0, 0, 0);
     156        if(hwndEdit == 0) {
     157                dprintf(("RegisterSystemClasses failed!!"));
     158        }
     159        O32_SetClassLong(hwndEdit, GCL_WNDPROC, (LONG)EditCallback);
    109160   }
     161   //TODO: This doens't work yet!! (need to create a normal window as parent)
    110162   if(O32_GetClassInfo(NULL, "MDICLIENT", &wndclass)) {
    111         new Win32WindowClass(MdiClientCallback, "MDICLIENT", hModule);
     163        dprintf(("Create MDICLIENT System class"));
     164        MdiClientClass = new Win32WindowClass(MdiClientCallback, "MDICLIENT", hModule);
    112165        MdiClientHandler = (WNDPROC_O32)wndclass.lpfnWndProc;
     166        hwndMdiClient = O32_CreateWindow("MDICLIENT", "MDICLIENT", WS_CHILD, 0, 0, 0, 0, hwndListbox, 0, 0, 0);
     167        if(hwndMdiClient == 0) {
     168                dprintf(("RegisterSystemClasses failed!!"));
     169        }
     170        O32_SetClassLong(hwndMdiClient, GCL_WNDPROC, (LONG)MdiClientCallback);
    113171   }
    114172   if(O32_GetClassInfo(NULL, "SCROLLBAR", &wndclass)) {
    115         new Win32WindowClass(ScrollbarCallback, "SCROLLBAR", hModule);
     173        dprintf(("Create SCROLLBAR System class"));
     174        ScrollbarClass = new Win32WindowClass(ScrollbarCallback, "SCROLLBAR", hModule);
    116175        ScrollbarHandler = (WNDPROC_O32)wndclass.lpfnWndProc;
     176        hwndScrollbar = O32_CreateWindow("SCROLLBAR", "SCROLLBAR", 0, 0, 0, 0, 0, 0, 0, 0, 0);
     177        if(hwndScrollbar == 0) {
     178                dprintf(("RegisterSystemClasses failed!!"));
     179        }
     180        O32_SetClassLong(hwndScrollbar, GCL_WNDPROC, (LONG)ScrollbarCallback);
    117181   }
    118182   if(O32_GetClassInfo(NULL, "STATIC", &wndclass)) {
    119         new Win32WindowClass(StaticCallback, "STATIC", hModule);
     183        dprintf(("Create STATIC System class"));
     184        StaticClass = new Win32WindowClass(StaticCallback, "STATIC", hModule);
    120185        StaticHandler = (WNDPROC_O32)wndclass.lpfnWndProc;
     186        hwndStatic = O32_CreateWindow("STATIC", "STATIC", 0, 0, 0, 0, 0, 0, 0, 0, 0);
     187        if(hwndStatic == 0) {
     188                dprintf(("RegisterSystemClasses failed!!"));
     189        }
     190        O32_SetClassLong(hwndStatic, GCL_WNDPROC, (LONG)StaticCallback);
    121191   }
    122192//TODO: More standard classes in win95/NT4?
     193}
     194//******************************************************************************
     195//******************************************************************************
     196void UnregisterSystemClasses()
     197{
     198   dprintf(("KERNEL32: UnregisterSystemClasses"));
     199   if(hwndButton)    O32_DestroyWindow(hwndButton);
     200   if(hwndListbox)   O32_DestroyWindow(hwndListbox);
     201   if(hwndCombobox)  O32_DestroyWindow(hwndCombobox);
     202   if(hwndMdiClient) O32_DestroyWindow(hwndMdiClient);
     203   if(hwndEdit)      O32_DestroyWindow(hwndEdit);
     204   if(hwndScrollbar) O32_DestroyWindow(hwndScrollbar);
     205   if(hwndStatic)    O32_DestroyWindow(hwndStatic);
     206   if(ButtonClass)    delete ButtonClass;
     207   if(ListboxClass)   delete ListboxClass;
     208   if(EditClass)      delete EditClass;
     209   if(ComboboxClass)  delete ComboboxClass;
     210   if(MdiClientClass) delete MdiClientClass;
     211   if(ScrollbarClass) delete ScrollbarClass;
     212   if(StaticClass)    delete StaticClass;
     213   ButtonClass    = NULL;
     214   EditClass      = NULL;
     215   ListboxClass   = NULL;
     216   ComboboxClass  = NULL;
     217   MdiClientClass = NULL;
     218   ScrollbarClass = NULL;
     219   StaticClass    = NULL;
    123220}
    124221//******************************************************************************
     
    218315    //These are not supported by Open32
    219316    wc.style &= ~(CS_PARENTDC | CS_CLASSDC);
    220  
    221 //SvL: 18-7-'98 Breaks apps (solitaire, rasmol..) 
    222 #if 0
    223     /* @@@PH 98/06/21 experimental fix for WInhlp32 */
    224 #ifndef CS_SYNCPAINT
    225   #define CS_SYNCPAINT 0x02000000L
    226 #endif
    227  
    228     wc.style |= CS_SYNCPAINT;
    229 #endif 
    230  
     317   
    231318    wc.lpfnWndProc = (WNDPROC)Win32WindowClass::GetOS2ClassCallback();
    232319
     
    708795 char                  szClass[128];
    709796 Win32WindowClass     *wclass;
     797 LRESULT               rc;
     798 DWORD                 dwStyle, dwExStyle;
     799 HWND                  parentHwnd;
     800 Win32WindowProc      *window;
    710801
    711802#ifdef DEBUG
     
    720811        wclass = Win32WindowClass::FindClass(szClass);
    721812        if(wclass) {
    722                 //SvL: Correct Open32 key mapping bug
    723                 if(Msg == WM_KEYDOWN || Msg == WM_KEYUP || Msg == WM_CHAR) {
    724 //                        dprintf(("WM_KEYDOWN %X %08X\n", wParam, lParam));
    725                         lParam = MapOEMToRealKey(wParam, lParam);
    726                 }
    727 
    728                 if(Msg == WM_CREATE) {//Open32 isn't sending WM_NCCREATE messages!!
     813                switch(Msg)
     814                {
     815                case WM_CREATE://Open32 isn't sending WM_NCCREATE messages!!
     816                        window = Win32WindowProc::FindProc(hwnd, GetCurrentThreadId());
     817                        if(window) {
     818                                dprintf(("OS2ToWinCallback (class): New window object!"));
     819                                window->SetWindowHandle(hwnd);
     820                        }
     821               
    729822                        if(wclass->GetWinCallback()(hwnd, WM_NCCREATE, 0, lParam) == 0) {
    730823                                dprintf(("WM_NCCREATE returned FALSE\n"));
    731824                                return(-1); //don't create window
    732825                        }
    733                 }
    734                 if(Msg == WM_ACTIVATE && LOWORD(wParam) != WA_INACTIVE)
    735                 {//SvL: Bugfix, Open32 is NOT sending this to the window (messes up Solitaire)
    736                   HDC hdc = GetDC(hwnd);
    737 
    738                         wclass->GetWinCallback()(hwnd, WM_ERASEBKGND, hdc, 0);
    739                         ReleaseDC(hwnd, hdc);
    740                 }
     826                        //Send WM_CREATE message before notifying parent
     827                        rc = wclass->GetWinCallback()(hwnd, Msg, wParam, lParam);
     828
     829                        NotifyParent(hwnd, WM_CREATE, wParam, lParam);
     830                        return(rc);
     831
     832                case WM_DESTROY: //nofity parent
     833                case WM_LBUTTONDOWN:
     834                case WM_MBUTTONDOWN:
     835                case WM_RBUTTONDOWN:
     836                        NotifyParent(hwnd, Msg, wParam, lParam);
     837                        break;
     838
     839                case WM_KEYDOWN:
     840                case WM_KEYUP:
     841                case WM_CHAR:   //SvL: Correct Open32 key mapping bug
     842                        lParam = MapOEMToRealKey(wParam, lParam);
     843                        break;
     844                case WM_ACTIVATE:
     845                        if(LOWORD(wParam) != WA_INACTIVE)
     846                        {//SvL: Bugfix, Open32 is NOT sending this to the window (messes up Solitaire)
     847                         HDC hdc = GetDC(hwnd);
     848
     849                                wclass->GetWinCallback()(hwnd, WM_ERASEBKGND, hdc, 0);
     850                                ReleaseDC(hwnd, hdc);
     851                        }
     852                        break;
     853                }
    741854                return wclass->GetWinCallback()(hwnd, Msg, wParam, lParam);
    742855        }
Note: See TracChangeset for help on using the changeset viewer.