]> git.saurik.com Git - wxWidgets.git/commitdiff
added As/DissociateHandle() and implemented it for MSW (modified patch 972356)
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 11 Sep 2004 22:17:22 +0000 (22:17 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 11 Sep 2004 22:17:22 +0000 (22:17 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29102 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/window.h
include/wx/window.h
src/msw/window.cpp

index f1f12f0b44f13646c13c152a5ab2c182fa1e6b11..d3739f665aaffbe71748ea3cc0dea847cf950c1c 100644 (file)
@@ -148,16 +148,20 @@ public:
     virtual bool UnregisterHotKey(int hotkeyId);
 #endif // wxUSE_HOTKEY
 
-    // implementation from now on
-    // --------------------------
-
-    // simple accessors
-    // ----------------
+    // window handle stuff
+    // -------------------
 
     WXHWND GetHWND() const { return m_hWnd; }
     void SetHWND(WXHWND hWnd) { m_hWnd = hWnd; }
     virtual WXWidget GetHandle() const { return GetHWND(); }
 
+    void AssociateHandle(WXWidget handle);
+    void DissociateHandle();
+
+
+    // implementation from now on
+    // ==========================
+
     // event handlers
     // --------------
 
index 825294129642d8cfa7df1b3314cf471ed89d68da..fe7d74ea05f736071a62b11a826e34c23e761830 100644 (file)
@@ -1018,6 +1018,10 @@ public:
         // is only used for wxWin itself or for user code which wants to call
         // platform-specific APIs
     virtual WXWidget GetHandle() const = 0;
+        // associate the window with a new native handle
+    virtual void AssociateHandle(WXWidget WXUNUSED(handle)) { }
+        // dissociate the current native handle from the window
+    virtual void DissociateHandle() { }
 
 #if wxUSE_PALETTE
         // Store the palette used by DCs in wxWindow so that the dcs can share
index 0549e8fa9b5c2df58ab18d3bce6715e6b2ac57f2..2bc19adc48a90a8800c2414138ef74a7e93b9482 100644 (file)
@@ -1005,7 +1005,7 @@ void wxWindowMSW::UnsubclassWin()
     HWND hwnd = GetHwnd();
     if ( hwnd )
     {
-        m_hWnd = 0;
+        SetHWND(0);
 
         wxCHECK_RET( ::IsWindow(hwnd), wxT("invalid HWND in UnsubclassWin") );
 
@@ -1021,6 +1021,27 @@ void wxWindowMSW::UnsubclassWin()
     }
 }
 
+void wxWindowMSW::AssociateHandle(WXWidget handle) 
+{
+    if ( m_hWnd )
+    {
+      if ( !::DestroyWindow(GetHwnd()) )
+        wxLogLastError(wxT("DestroyWindow"));
+    }
+    
+    WXHWND wxhwnd = (WXHWND)handle;
+
+    SetHWND(wxhwnd);
+    SubclassWin(wxhwnd);
+}
+
+void wxWindowMSW::DissociateHandle()
+{ 
+    // this also calls SetHWND(0) for us
+    UnsubclassWin(); 
+}
+
+
 bool wxCheckWindowWndProc(WXHWND hWnd, WXFARPROC wndProc)
 {
     // Unicows note: the code below works, but only because WNDCLASS contains