git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65474 
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
     bool Create(wxWindow *parent, WXWindow nativeWindow);
     
     virtual ~wxNonOwnedWindow();
     bool Create(wxWindow *parent, WXWindow nativeWindow);
     
     virtual ~wxNonOwnedWindow();
+    
+    virtual void SubclassWin(WXWindow nativeWindow);
+    virtual void UnsubclassWin();
 
     virtual wxPoint GetClientAreaOrigin() const;
 
 
     virtual wxPoint GetClientAreaOrigin() const;
 
 
         m_dir = wxPathOnly(m_path);
     }
 
         m_dir = wxPathOnly(m_path);
     }
 
     ::NavDisposeReply(&navReply);
     ::NavDialogDispose(dialog);
 
     ::NavDisposeReply(&navReply);
     ::NavDialogDispose(dialog);
 
 
         returnCode = [sPanel runModalForDirectory:dir.AsNSString() file:file.AsNSString() ];
         ModalFinishedCallback(sPanel, returnCode);
 
         returnCode = [sPanel runModalForDirectory:dir.AsNSString() file:file.AsNSString() ];
         ModalFinishedCallback(sPanel, returnCode);
 
         [sPanel setAccessoryView:nil];
     }
     else
         [sPanel setAccessoryView:nil];
     }
     else
 
         ModalFinishedCallback(oPanel, returnCode);
         
 
         ModalFinishedCallback(oPanel, returnCode);
         
         [oPanel setAccessoryView:nil];
         
         if ( types != nil )
         [oPanel setAccessoryView:nil];
         
         if ( types != nil )
 
 
 bool wxNonOwnedWindow::Create(wxWindow *parent, WXWindow nativeWindow)
 {
 
 bool wxNonOwnedWindow::Create(wxWindow *parent, WXWindow nativeWindow)
 {
-    m_nowpeer = wxNonOwnedWindowImpl::CreateNonOwnedWindow(this, parent, nativeWindow );
+    if ( parent )
+        parent->AddChild(this);
+    
+    SubclassWin(nativeWindow);
+    
+    return true;
+}
+
+void wxNonOwnedWindow::SubclassWin(WXWindow nativeWindow)
+{
+    wxASSERT_MSG( !m_isNativeWindowWrapper, wxT("subclassing window twice?") );
+    wxASSERT_MSG( m_nowpeer == NULL, wxT("window already was created") );
+
+    m_nowpeer = wxNonOwnedWindowImpl::CreateNonOwnedWindow(this, GetParent(), nativeWindow );
     m_isNativeWindowWrapper = true;
     wxNonOwnedWindowImpl::Associate( m_nowpeer->GetWXWindow() , m_nowpeer ) ;
     m_peer = wxWidgetImpl::CreateContentView(this);
     m_isNativeWindowWrapper = true;
     wxNonOwnedWindowImpl::Associate( m_nowpeer->GetWXWindow() , m_nowpeer ) ;
     m_peer = wxWidgetImpl::CreateContentView(this);
-    if ( parent )
-        parent->AddChild(this);
+void wxNonOwnedWindow::UnsubclassWin()
+{
+    wxASSERT_MSG( m_isNativeWindowWrapper, wxT("window was not subclassed") );
+
+    if ( GetParent() )
+        GetParent()->RemoveChild(this);
+    wxNonOwnedWindowImpl::RemoveAssociations(m_nowpeer) ;    
+    m_isNativeWindowWrapper = false;
+    wxDELETE(m_nowpeer);
+    wxDELETE(m_peer);
 wxNonOwnedWindow::~wxNonOwnedWindow()
 {
     SendDestroyEvent();
 wxNonOwnedWindow::~wxNonOwnedWindow()
 {
     SendDestroyEvent();