]> git.saurik.com Git - wxWidgets.git/blob - src/msw/nativewin.cpp
call OnNativeDestroyed() if the native window is destroyed independently from us
[wxWidgets.git] / src / msw / nativewin.cpp
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: src/msw/nativewin.cpp
3 // Purpose: wxNativeWindow implementation
4 // Author: Vadim Zeitlin
5 // Created: 2008-03-05
6 // RCS-ID: $Id$
7 // Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwindows.org>
8 // Licence: wxWindows licence
9 ///////////////////////////////////////////////////////////////////////////////
10
11 // ============================================================================
12 // declarations
13 // ============================================================================
14
15 // ----------------------------------------------------------------------------
16 // headers
17 // ----------------------------------------------------------------------------
18
19 // for compilers that support precompilation, includes "wx.h".
20 #include "wx/wxprec.h"
21
22 #ifdef __BORLANDC__
23 #pragma hdrstop
24 #endif
25
26 #ifndef WX_PRECOMP
27 #endif // WX_PRECOMP
28
29 #include "wx/nativewin.h"
30 #include "wx/msw/private.h"
31
32 // ============================================================================
33 // implementation
34 // ============================================================================
35
36 bool wxNativeContainerWindow::Create(wxNativeContainerWindowHandle hwnd)
37 {
38 if ( !::IsWindow(hwnd) )
39 {
40 // strictly speaking, the fact that IsWindow() returns true doesn't
41 // mean that the window handle is valid -- it could be being deleted
42 // right now, for example
43 //
44 // but if it returns false, the handle is definitely invalid
45 return false;
46 }
47
48 // make this HWND really a wxWindow
49 SubclassWin(hwnd);
50
51 // inherit the other attributes we can from the native HWND
52 AdoptAttributesFromHWND();
53
54 return true;
55 }
56
57 void wxNativeContainerWindow::OnNativeDestroyed()
58 {
59 // don't use Close() or even Destroy() here, we really don't want to keep
60 // an object using a no more existing HWND around for longer than necessary
61 delete this;
62 }
63
64 WXLRESULT wxNativeContainerWindow::MSWWindowProc(WXUINT nMsg,
65 WXWPARAM wParam,
66 WXLPARAM lParam)
67 {
68 if ( nMsg == WM_DESTROY )
69 {
70 OnNativeDestroyed();
71
72 return 0;
73 }
74
75 return wxTopLevelWindow::MSWWindowProc(nMsg, wParam, lParam);
76 }
77
78 wxNativeContainerWindow::~wxNativeContainerWindow()
79 {
80 // prevent the base class dtor from destroying the window, it doesn't
81 // belong to us so we should leave it alive
82 DissociateHandle();
83 }
84