]> git.saurik.com Git - wxWidgets.git/commitdiff
Several updates for fixing the subclassing problems and accelerator processing
authorDavid Webster <Dave.Webster@bhmi.com>
Fri, 1 Sep 2000 13:52:31 +0000 (13:52 +0000)
committerDavid Webster <Dave.Webster@bhmi.com>
Fri, 1 Sep 2000 13:52:31 +0000 (13:52 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8233 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/os2/frame.h
src/os2/accel.cpp
src/os2/app.cpp
src/os2/frame.cpp
src/os2/menu.cpp
src/os2/window.cpp

index be8181910a162148cc54f22bba8b1bf218d542d7..468341d98eddc01f8b423106c7ccd81efbd06043 100644 (file)
@@ -102,7 +102,6 @@ public:
 #endif // wxUSE_STATUSBAR
 
     WXHMENU GetWinMenu() const { return m_hMenu; }
-    WXHWND  GetFrame() const { return m_hFrame; }
 
     // Returns the origin of client area (may be different from (0,0) if the
     // frame has a toolbar)
@@ -205,13 +204,6 @@ private:
     WXHWND                          m_hWndToolTip;
 #endif // tooltips
 
-    //
-    // The main handle of a frame window, that used for message processing
-    // is the client handle under PM.  But we still need the frame handle
-    // as well
-    //
-    WXHWND                          m_hFrame;
-
     //
     // Handles to child windows of the Frame that we don't have child objects for
     //
index bda2003f77eb3ad4d05ce3bce2c33e4cb228efa3..1b901b20c4bf966c9a73e4eb7975b8c80b231805 100644 (file)
@@ -90,7 +90,7 @@ wxAcceleratorTable::wxAcceleratorTable(
 
         ::WinSetAccelTable( vHabmain
                            ,hAccel
-                           ,(HWND)pFrame->GetFrame()
+                           ,(HWND)pFrame->GetHWND()
                           );
     }
     M_ACCELDATA->m_hAccel = hAccel;
@@ -153,7 +153,7 @@ wxAcceleratorTable::wxAcceleratorTable(
 
         ::WinSetAccelTable( vHabmain
                            ,M_ACCELDATA->m_hAccel
-                           ,(HWND)pFrame->GetFrame()
+                           ,(HWND)pFrame->GetHWND()
                           );
     }
 
index 46dc757d507ae1a6da37fb339ab2e72bc7bf5d1e..ef18d55511daf9494f801e07729ceead8fff6acd 100644 (file)
@@ -184,7 +184,7 @@ bool wxApp::RegisterWindowClasses(
     if (!::WinRegisterClass( vHab
                             ,wxFrameClassName
                             ,(PFNWP)wxWndProc
-                            ,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT
+                            ,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT | CS_FRAME
                             ,sizeof(ULONG)
                            ))
     {
@@ -651,11 +651,11 @@ int wxApp::MainLoop()
 #if wxUSE_THREADS
         wxMutexGuiLeaveOrEnter();
 #endif // wxUSE_THREADS
-        while (!Pending() && ProcessIdle())
-        {
-//            wxUsleep(10000);
-        }
-        DoMessage();
+      while (!Pending() && ProcessIdle())
+      {
+//          wxUsleep(10000);
+      }
+      DoMessage();
     }
     return (int)svCurrentMsg.mp1;
 } // end of wxApp::MainLoop
@@ -761,11 +761,11 @@ bool wxApp::ProcessMessage(
     //
     // Anyone for a non-translation message? Try youngest descendants first.
     //
-    for (pWnd = pWndThis; pWnd; pWnd = pWnd->GetParent())
-    {
-        if (pWnd->OS2ProcessMessage(pWxmsg))
-            return TRUE;
-    }
+//  for (pWnd = pWndThis; pWnd; pWnd = pWnd->GetParent())
+//  {
+//      if (pWnd->OS2ProcessMessage(pWxmsg))
+//          return TRUE;
+//  }
     return FALSE;
 } // end of wxApp::ProcessMessage
 
index e1244b42d8ef14a88f3481facd59e0cc7aeb79ce..98308cc88cb7d21d9de08f0a1ce491f9e92016fe 100644 (file)
@@ -164,6 +164,7 @@ bool wxFrame::Create(
 wxFrame::~wxFrame()
 {
     m_isBeingDeleted = TRUE;
+
     wxTopLevelWindows.DeleteObject(this);
 
     DeleteAllBars();
@@ -174,7 +175,7 @@ wxFrame::~wxFrame()
 
         if (wxTheApp->GetExitOnFrameDelete())
         {
-            ::WinPostMsg(m_hFrame, WM_QUIT, 0, 0);
+            ::WinPostMsg(GetHWND(), WM_QUIT, 0, 0);
         }
     }
     wxModelessWindows.DeleteObject(this);
@@ -262,7 +263,7 @@ void wxFrame::DoSetClientSize(
 
     ::WinQueryWindowRect(GetHwnd(), &vRect);
 
-    ::WinQueryWindowRect(m_hFrame, &vRect2);
+    ::WinQueryWindowRect(GetHWND(), &vRect2);
 
     //
     // Find the difference between the entire window (title bar and all)
@@ -319,7 +320,7 @@ void wxFrame::DoGetSize(
 {
     RECTL                           vRect;
 
-    ::WinQueryWindowRect(m_hFrame, &vRect);
+    ::WinQueryWindowRect(GetHWND(), &vRect);
     *pWidth = vRect.xRight - vRect.xLeft;
     *pHeight = vRect.yTop - vRect.yBottom;
 } // end of wxFrame::DoGetSize
@@ -332,7 +333,7 @@ void wxFrame::DoGetPosition(
     RECTL                           vRect;
     POINTL                          vPoint;
 
-    ::WinQueryWindowRect(m_hFrame, &vRect);
+    ::WinQueryWindowRect(GetHWND(), &vRect);
     vPoint.x = vRect.xLeft;
 
     //
@@ -352,7 +353,7 @@ void wxFrame::DoShowWindow(
   int                               bShowCmd
 )
 {
-    ::WinShowWindow(m_hFrame, (BOOL)bShowCmd);
+    ::WinShowWindow(GetHWND(), (BOOL)bShowCmd);
     m_bIconized = bShowCmd == SWP_MINIMIZE;
 } // end of wxFrame::DoShowWindow
 
@@ -368,9 +369,9 @@ bool wxFrame::Show(
     {
         wxActivateEvent             vEvent(wxEVT_ACTIVATE, TRUE, m_windowId);
 
-        ::WinQueryWindowPos(m_hFrame, &vSwp);
+        ::WinQueryWindowPos(GetHWND(), &vSwp);
         m_bIconized = vSwp.fl & SWP_MINIMIZE;
-        ::WinEnableWindow(m_hFrame, TRUE);
+        ::WinEnableWindow(GetHWND(), TRUE);
         vEvent.SetEventObject(this);
         GetEventHandler()->ProcessEvent(vEvent);
     }
@@ -437,7 +438,7 @@ bool wxFrame::IsMaximized() const
     SWP                             vSwp;
     bool                            bIconic;
 
-    ::WinQueryWindowPos(m_hFrame, &vSwp);
+    ::WinQueryWindowPos(GetHWND(), &vSwp);
     return (vSwp.fl & SWP_MAXIMIZE);
 } // end of wxFrame::IsMaximized
 
@@ -449,12 +450,12 @@ void wxFrame::SetIcon(
 
     if ((m_icon.GetHICON()) != NULLHANDLE)
     {
-        ::WinSendMsg( m_hFrame
+        ::WinSendMsg( GetHWND()
                      ,WM_SETICON
                      ,(MPARAM)((HPOINTER)m_icon.GetHICON())
                      ,NULL
                     );
-        ::WinSendMsg( m_hFrame
+        ::WinSendMsg( GetHWND()
                      ,WM_UPDATEFRAME
                      ,(MPARAM)FCF_ICON
                      ,(MPARAM)0
@@ -487,7 +488,7 @@ wxStatusBar* wxFrame::OnCreateStatusBar(
     // so we have to set the parent to actually be the Frame.
     //
     hWnd = pStatusBar->GetHWND();
-    if (!::WinSetParent(hWnd, m_hFrame, FALSE))
+    if (!::WinSetParent(hWnd, GetHWND(), FALSE))
     {
         vError = ::WinGetLastError(vHabmain);
         sError = wxPMErrorToStr(vError);
@@ -648,14 +649,14 @@ void wxFrame::SetMenuBar(
     //
     // Now resize the client to fit the new frame
     //
-    WinQueryWindowPos(m_hFrame, &vSwp);
-    hTitlebar = WinWindowFromID(m_hFrame, FID_TITLEBAR);
+    WinQueryWindowPos(GetHWND(), &vSwp);
+    hTitlebar = WinWindowFromID(GetHWND(), FID_TITLEBAR);
     WinQueryWindowPos(hTitlebar, &vSwpTitlebar);
-    hHScroll = WinWindowFromID(m_hFrame, FID_HORZSCROLL);
+    hHScroll = WinWindowFromID(GetHWND(), FID_HORZSCROLL);
     WinQueryWindowPos(hHScroll, &vSwpHScroll);
-    hVScroll = WinWindowFromID(m_hFrame, FID_VERTSCROLL);
+    hVScroll = WinWindowFromID(GetHWND(), FID_VERTSCROLL);
     WinQueryWindowPos(hVScroll, &vSwpVScroll);
-    hMenuBar = WinWindowFromID(m_hFrame, FID_MENU);
+    hMenuBar = WinWindowFromID(GetHWND(), FID_MENU);
     WinQueryWindowPos(hMenuBar, &vSwpMenu);
     WinSetWindowPos( GetHwnd()
                     ,HWND_TOP
@@ -674,20 +675,20 @@ void wxFrame::InternalSetMenuBar()
     //
     // Set the parent and owner of the menubar to be the frame
     //
-    if (!::WinSetParent(m_hMenu, m_hFrame, FALSE))
+    if (!::WinSetParent(m_hMenu, GetHWND(), FALSE))
     {
         vError = ::WinGetLastError(vHabmain);
         sError = wxPMErrorToStr(vError);
         wxLogError("Error setting parent for submenu. Error: %s\n", sError);
     }
 
-    if (!::WinSetOwner(m_hMenu, m_hFrame))
+    if (!::WinSetOwner(m_hMenu, GetHWND()))
     {
         vError = ::WinGetLastError(vHabmain);
         sError = wxPMErrorToStr(vError);
         wxLogError("Error setting parent for submenu. Error: %s\n", sError);
     }
-    WinSendMsg((HWND)m_hFrame, WM_UPDATEFRAME, (MPARAM)FCF_MENU, (MPARAM)0);
+    WinSendMsg((HWND)GetHWND(), WM_UPDATEFRAME, (MPARAM)FCF_MENU, (MPARAM)0);
 } // end of wxFrame::InternalSetMenuBar
 
 //
@@ -749,9 +750,9 @@ bool wxFrame::ShowFullScreen(
 
         if (lStyle & wxFULLSCREEN_NOMENUBAR)
         {
-            ::WinSetParent(m_hMenu, m_hFrame, FALSE);
-            ::WinSetOwner(m_hMenu, m_hFrame);
-            ::WinSendMsg((HWND)m_hFrame, WM_UPDATEFRAME, (MPARAM)FCF_MENU, (MPARAM)0);
+            ::WinSetParent(m_hMenu, GetHWND(), FALSE);
+            ::WinSetOwner(m_hMenu, GetHWND());
+            ::WinSendMsg((HWND)GetHWND(), WM_UPDATEFRAME, (MPARAM)FCF_MENU, (MPARAM)0);
         }
 
         //
@@ -864,9 +865,9 @@ bool wxFrame::ShowFullScreen(
 
         if ((m_lFsStyle & wxFULLSCREEN_NOMENUBAR) && (m_hMenu != 0))
         {
-            ::WinSetParent(m_hMenu, m_hFrame, FALSE);
-            ::WinSetOwner(m_hMenu, m_hFrame);
-            ::WinSendMsg((HWND)m_hFrame, WM_UPDATEFRAME, (MPARAM)FCF_MENU, (MPARAM)0);
+            ::WinSetParent(m_hMenu, GetHWND(), FALSE);
+            ::WinSetOwner(m_hMenu, GetHWND());
+            ::WinSendMsg((HWND)GetHWND(), WM_UPDATEFRAME, (MPARAM)FCF_MENU, (MPARAM)0);
         }
         Maximize(m_bFsIsMaximized);
 
@@ -987,33 +988,16 @@ bool wxFrame::OS2Create(
     //
     // Create the frame window
     //
-    if ((m_hFrame = ::WinCreateWindow( hParent               // Frame is parent
-                                      ,WC_FRAME              // standard frame class
-                                      ,(PSZ)zTitle           // Window title
-                                      ,0                     // No styles
-                                      ,0, 0, 0, 0            // Window position
-                                      ,NULLHANDLE            // Owner
-                                      ,HWND_TOP              // Sibling
-                                      ,(ULONG)nId            // ID
-                                      ,(PVOID)&vFrameCtlData // Creation data
-                                      ,NULL                  // Window Pres Params
-                                     )) == 0L)
-    {
-        return FALSE;
-    }
 
-    if (!wxWindow::OS2Create( m_hFrame
-                             ,wxFrameClassName
-                             ,NULL
-                             ,0L
-                             ,0L
-                             ,0L
-                             ,0L
-                             ,0L
-                             ,m_hFrame
+    if (!wxWindow::OS2Create( hParent
+                             ,WC_FRAME
+                             ,(PSZ)zTitle
+                             ,0
+                             ,0, 0, 0, 0
+                             ,NULLHANDLE
                              ,HWND_TOP
-                             ,(unsigned long)FID_CLIENT
-                             ,NULL
+                             ,(ULONG)nId
+                             ,(PVOID)&vFrameCtlData
                              ,NULL
                             ))
     {
@@ -1023,7 +1007,8 @@ bool wxFrame::OS2Create(
     //
     // Now size everything.  If adding a menu the client will need to be resized.
     //
-    if (!::WinSetWindowPos( m_hFrame
+
+    if (!::WinSetWindowPos( GetHWND()
                            ,HWND_TOP
                            ,nX
                            ,nY
@@ -1033,10 +1018,10 @@ bool wxFrame::OS2Create(
                           ))
         return FALSE;
 
-    uCtlCount = SHORT1FROMMP(::WinSendMsg(m_hFrame, WM_FORMATFRAME, (MPARAM)vSwp, (MPARAM)vRect));
+    uCtlCount = SHORT1FROMMP(::WinSendMsg(GetHWND(), WM_FORMATFRAME, (MPARAM)vSwp, (MPARAM)vRect));
     for (int i = 0; i < uCtlCount; i++)
     {
-        if (vSwp[i].hwnd == m_hFrame)
+        if (vSwp[i].hwnd == GetHWND())
             memcpy(&m_vSwp, &vSwp[i], sizeof(SWP));
         else if (vSwp[i].hwnd == m_hVScroll)
             memcpy(&m_vSwpVScroll, &vSwp[i], sizeof(SWP));
@@ -1234,7 +1219,7 @@ bool wxFrame::OS2TranslateMessage(
         return FALSE;
 
     const wxAcceleratorTable&       rAcceleratorTable = pMenuBar->GetAccelTable();
-    return rAcceleratorTable.Translate(m_hFrame, pMsg);
+    return rAcceleratorTable.Translate(GetHWND(), pMsg);
 } // end of wxFrame::OS2TranslateMessage
 
 // ---------------------------------------------------------------------------
@@ -1244,7 +1229,7 @@ bool wxFrame::HandlePaint()
 {
     RECTL                           vRect;
 
-    if (::WinQueryUpdateRect(GetHwnd(), &vRect))
+    if (::WinQueryUpdateRect(GetHWND(), &vRect))
     {
         if (m_bIconized)
         {
@@ -1254,7 +1239,7 @@ bool wxFrame::HandlePaint()
             HPOINTER                hIcon;
 
             if (m_icon.Ok())
-                hIcon = (HPOINTER)::WinSendMsg(m_hFrame, WM_QUERYICON, 0L, 0L);
+                hIcon = (HPOINTER)::WinSendMsg(GetHWND(), WM_QUERYICON, 0L, 0L);
             else
                 hIcon = (HPOINTER)m_hDefaultIcon;
 
@@ -1289,12 +1274,13 @@ bool wxFrame::HandlePaint()
         }
         else
         {
+/*          DosBeep(500,500);
             HPS                             hPS;
             RECTL                           vRect;
 
             hPS = WinBeginPaint(GetHwnd(), 0L, &vRect);
             WinFillRect(hPS, &vRect, SYSCLR_WINDOW);
-            WinEndPaint(hPS);
+            WinEndPaint(hPS);*/
 
             return wxWindow::HandlePaint();
         }
@@ -1429,8 +1415,9 @@ bool wxFrame::HandleMenuSelect(
 , WXHMENU                           hMenu
 )
 {
-    int                             nMenuItem;
+//    int                             nMenuItem;
 
+/*  This is wrong section according to IBM's documentation
     if (nFlags == 0xFFFF && hMenu == 0)
     {
         //
@@ -1450,10 +1437,24 @@ bool wxFrame::HandleMenuSelect(
         //
         return FALSE;
     }
-    wxMenuEvent                     vEvent(wxEVT_MENU_HIGHLIGHT, nMenuItem);
+*/
 
-    vEvent.SetEventObject(this);
-    return GetEventHandler()->ProcessEvent(vEvent);
+    if( !nFlags )
+    {
+        MENUITEM mItem;
+        MRESULT  rc;
+
+        rc = WinSendMsg(hMenu, MM_QUERYITEM, MPFROM2SHORT(nItem, TRUE), (MPARAM)&mItem);
+
+        if(rc && !(mItem.afStyle & (MIS_SUBMENU | MIS_SEPARATOR)))
+        {
+            wxMenuEvent                     vEvent(wxEVT_MENU_HIGHLIGHT, nItem);
+
+            vEvent.SetEventObject(this);
+            GetEventHandler()->ProcessEvent(vEvent); // return value would be ignored by PM
+        }
+    }
+    return TRUE;
 } // end of wxFrame::HandleMenuSelect
 
 // ---------------------------------------------------------------------------
@@ -1514,6 +1515,7 @@ MRESULT wxFrame::OS2WindowProc(
                                               ,wFlags
                                               ,hMenu
                                              );
+                mRc = (MRESULT)TRUE;
             }
             break;
 
@@ -1535,7 +1537,7 @@ MRESULT wxFrame::OS2WindowProc(
                 HPOINTER                hIcon;
 
                 if (m_icon.Ok())
-                    hIcon = (HPOINTER)::WinSendMsg(m_hFrame, WM_QUERYICON, 0L, 0L);
+                    hIcon = (HPOINTER)::WinSendMsg(GetHWND(), WM_QUERYICON, 0L, 0L);
                 else
                     hIcon = (HPOINTER)m_hDefaultIcon;
                 mRc = (MRESULT)hIcon;
@@ -1553,6 +1555,6 @@ MRESULT wxFrame::OS2WindowProc(
                                       ,wParam
                                       ,lParam
                                      );
-    return (MRESULT)0;
+    return (MRESULT)mRc;
 } // wxFrame::OS2WindowProc
 
index 5f2ddd5927d7b40f3577cd8602bf8012565883ee..a9c390acc31d7a9f6389d6eccfeb89d69bb68d14 100644 (file)
@@ -1031,7 +1031,7 @@ void wxMenuBar::Attach(
     // Ensure the accelerator table is set to the frame (not the client!)
     //
     if (!::WinSetAccelTable( vHabmain
-                            ,(HWND)pFrame->GetFrame()
+                            ,(HWND)pFrame->GetHWND()
                             ,m_vAccelTable.GetHACCEL()
                            ))
         wxLogLastError("WinSetAccelTable");
index 75900f1d950879a14dea0fb2b9d95dc1f07a31fd..0573448e600f9e6ff69f6f1bbbcb283f9f65b19c 100644 (file)
@@ -306,8 +306,11 @@ wxWindow::~wxWindow()
     if (m_parent)
         m_parent->RemoveChild(this);
     DestroyChildren();
+
     if (m_hWnd)
     {
+//      UnsubclassWin();
+
         if(!::WinDestroyWindow(GetHWND()))
             wxLogLastError(wxT("DestroyWindow"));
         //
@@ -382,6 +385,7 @@ bool wxWindow::Create(
               ,NULLHANDLE
               ,m_windowId
              );
+
     return(TRUE);
 } // end of wxWindow::Create
 
@@ -714,28 +718,28 @@ void wxWindow::SubclassWin(
 
     wxCHECK_RET(::WinIsWindow(vHabmain, hwnd), wxT("invalid HWND in SubclassWin") );
 
-    wxAssociateWinWithHandle(hwnd, this);
+//  wxAssociateWinWithHandle(hwnd, this);
 
     m_fnOldWndProc = (WXFARPROC) ::WinSubclassWindow(hwnd, (PFNWP)wxWndProc);
-    ::WinSetWindowULong(hwnd, QWS_USER, (ULONG)wxWndProc);
+//    ::WinSetWindowULong(hwnd, QWL_USER, (ULONG)wxWndProc);
 } // end of wxWindow::SubclassWin
 
 void wxWindow::UnsubclassWin()
 {
-    wxRemoveHandleAssociation(this);
+//    wxRemoveHandleAssociation(this);
 
     //
     // Restore old Window proc
     //
-    HWND                            hwnd = GetHwnd();
+    HWND                            hwnd = GetHWND();
 
-    if (hwnd)
+    if (m_hWnd)
     {
-        m_hWnd = 0;
+//        m_hWnd = 0;
 
         wxCHECK_RET( ::WinIsWindow(vHabmain, hwnd), wxT("invalid HWND in UnsubclassWin") );
 
-        PFNWP                       fnProc = (PFNWP)::WinQueryWindowULong(hwnd, QWS_USER);
+        PFNWP                       fnProc = (PFNWP)::WinQueryWindowPtr(hwnd, QWP_PFNWP);
         if ( (m_fnOldWndProc != 0) && (fnProc != (PFNWP) m_fnOldWndProc))
         {
             WinSubclassWindow(hwnd, (PFNWP)m_fnOldWndProc);
@@ -1502,9 +1506,9 @@ MRESULT wxWindow::OS2DefWindowProc(
 )
 {
     if (m_fnOldWndProc)
-        return ((MRESULT)m_fnOldWndProc());
+        return (MRESULT)m_fnOldWndProc(GetHWND(), (ULONG)uMsg, (MPARAM)wParam, (MPARAM)lParam);
     else
-        return (::WinDefWindowProc(GetHwnd(), (ULONG)uMsg, (MPARAM)wParam, (MPARAM)lParam));
+        return ::WinDefWindowProc(GetHWND(), (ULONG)uMsg, (MPARAM)wParam, (MPARAM)lParam);
 } // end of wxWindow::OS2DefWindowProc
 
 bool wxWindow::OS2ProcessMessage(
@@ -1798,7 +1802,8 @@ MRESULT EXPENTRY wxWndProc(
         pWnd->SetHWND((WXHWND)hWnd);
     }
 
-    MRESULT                         rc;
+    MRESULT                         rc = (MRESULT)FALSE;
+
 
     //
     // Stop right here if we don't have a valid handle in our wxWindow object.
@@ -1813,7 +1818,7 @@ MRESULT EXPENTRY wxWndProc(
     {
         if (pWnd)
             rc = pWnd->OS2WindowProc(ulMsg, wParam, lParam);
-        if (!rc)
+        else
             rc = ::WinDefWindowProc(hWnd, ulMsg, wParam, lParam);
     }
     return rc;
@@ -1833,22 +1838,26 @@ MRESULT wxWindow::OS2WindowProc(
     // Did we process the uMsg?
     //
     bool                            bProcessed = FALSE;
+    bool                            bAllow;
+    MRESULT                         mResult;
+    WXHICON                         hIcon;
+    WXHBRUSH                        hBrush;
 
     //
     // The return value
     //
-    union
-    {
-        bool                        bAllow;
-        MRESULT                     mResult;
-        WXHICON                     hIcon;
-        WXHBRUSH                    hBrush;
-    } vRc;
+//  union
+//  {
+//      bool                        bAllow;
+//      MRESULT                     mResult;
+//      WXHICON                     hIcon;
+//      WXHBRUSH                    hBrush;
+//  } vRc;
 
     //
     // For most messages we should return 0 when we do process the message
     //
-    vRc.mResult = (MRESULT)0;
+    mResult = (MRESULT)0;
 
     switch (uMsg)
     {
@@ -1864,14 +1873,16 @@ MRESULT wxWindow::OS2WindowProc(
                     //
                     // Return 0 to bAllow window creation
                     //
-                    vRc.mResult = (MRESULT)(bMayCreate ? 0 : -1);
+                    mResult = (MRESULT)(bMayCreate ? 0 : -1);
                 }
             }
             break;
 
         case WM_DESTROY:
-            bProcessed = HandleDestroy();
-            break;
+             HandleDestroy();
+             bProcessed = TRUE;
+             delete this;
+             break;
 
         case WM_MOVE:
             bProcessed = HandleMove( LOWORD(lParam)
@@ -1900,6 +1911,7 @@ MRESULT wxWindow::OS2WindowProc(
                 bProcessed = HandleActivate( wState
                                             ,(WXHWND)hWnd
                                            );
+                bProcessed = FALSE;
             }
             break;
 
@@ -1920,7 +1932,7 @@ MRESULT wxWindow::OS2WindowProc(
             // ourselves in ~wxWindow
             //
             bProcessed = TRUE;
-            vRc.mResult = (MRESULT)TRUE;
+            mResult = (MRESULT)TRUE;
             break;
 
         case WM_SHOW:
@@ -1987,14 +1999,14 @@ MRESULT wxWindow::OS2WindowProc(
                 }
 
                 if ( bProcessed )
-                    vRc.mResult = (MRESULT)TRUE;
+                    mResult = (MRESULT)TRUE;
             }
             break;
 
         case WM_QUERYDLGCODE:
             if ( m_lDlgCode )
             {
-                vRc.mResult = (MRESULT)m_lDlgCode;
+                mResult = (MRESULT)m_lDlgCode;
                 bProcessed = TRUE;
             }
             //
@@ -2093,7 +2105,7 @@ MRESULT wxWindow::OS2WindowProc(
 #if defined(__VISAGECPP__) && (__IBMCPP__ >= 400)
         case WM_CTLCOLORCHANGE:
             {
-                bProcessed = HandleCtlColor(&vRc.hBrush);
+                bProcessed = HandleCtlColor(&hBrush);
             }
             break;
 #endif
@@ -2132,7 +2144,7 @@ MRESULT wxWindow::OS2WindowProc(
                 //
                 // We processed the message, i.e. erased the background
                 //
-                vRc.mResult = (MRESULT)TRUE;
+                mResult = (MRESULT)TRUE;
             }
             break;
 
@@ -2147,7 +2159,7 @@ MRESULT wxWindow::OS2WindowProc(
             if ( bProcessed )
             {
                 // we never set focus from here
-                vRc.mResult = FALSE;
+                mResult = FALSE;
             }
             break;
 
@@ -2158,7 +2170,7 @@ MRESULT wxWindow::OS2WindowProc(
 
         case WM_SYSVALUECHANGED:
             // TODO: do something
-            vRc.mResult = (MRESULT)TRUE;
+            mResult = (MRESULT)TRUE;
             break;
 
         //
@@ -2175,7 +2187,7 @@ MRESULT wxWindow::OS2WindowProc(
                 // processing this message - exactly what we need because we've
                 // just set the cursor.
                 //
-                vRc.mResult = (MRESULT)TRUE;
+                mResult = (MRESULT)TRUE;
             }
             break;
     }
@@ -2186,9 +2198,9 @@ MRESULT wxWindow::OS2WindowProc(
         wxLogTrace(wxTraceMessages, wxT("Forwarding %s to DefWindowProc."),
                    wxGetMessageName(uMsg));
 #endif // __WXDEBUG__
-        vRc.mResult = OS2DefWindowProc(uMsg, wParam, lParam);
+        mResult = OS2DefWindowProc(uMsg, wParam, lParam);
     }
-    return vRc.mResult;
+    return mResult;
 } // end of wxWindow::OS2WindowProc
 
 //
@@ -2414,6 +2426,12 @@ bool wxWindow::OS2Create(
     wxAssociateWinWithHandle((HWND)m_hWnd
                              ,this
                             );
+    // 
+    // Now need to subclass window.
+    //
+
+    SubclassWin(GetHWND());
+
     return TRUE;
 } // end of wxWindow::OS2Create
 
@@ -2806,11 +2824,11 @@ bool wxWindow::HandlePaint()
          return FALSE;
     }
     m_updateRegion = wxRegion(hRgn);
-
-    hPS = WinBeginPaint(GetHwnd(), 0L, &vRect);
+/*
+    hPS = WinBeginPaint(GetHWND(), 0L, &vRect);
     WinFillRect(hPS, &vRect, SYSCLR_WINDOW);
     WinEndPaint(hPS);
-
+*/
     vEvent.SetEventObject(this);
     return (GetEventHandler()->ProcessEvent(vEvent));
 } // end of wxWindow::HandlePaint