IMPLEMENT_DYNAMIC_CLASS(wxDialog, wxTopLevelWindow)
 
-BEGIN_EVENT_TABLE(wxDialog, wxDialogBase)
-    EVT_BUTTON(wxID_OK, wxDialog::OnOK)
-    EVT_BUTTON(wxID_APPLY, wxDialog::OnApply)
-    EVT_BUTTON(wxID_CANCEL, wxDialog::OnCancel)
-    EVT_SYS_COLOUR_CHANGED(wxDialog::OnSysColourChanged)
-
-    EVT_CLOSE(wxDialog::OnCloseWindow)
-END_EVENT_TABLE()
-
 // ----------------------------------------------------------------------------
 // wxDialogModalData
 // ----------------------------------------------------------------------------
 
 void wxDialog::Init()
 {
-    m_pOldFocus = (wxWindow *)NULL;
+    m_pOldFocus = NULL;
     m_isShown = false;
-    m_pWindowDisabler = (wxWindowDisabler *)NULL;
+    m_pWindowDisabler = NULL;
     m_modalData = NULL;
     SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE));
 } // end of wxDialog::Init
 
 wxDialog::~wxDialog()
 {
-    m_isBeingDeleted = true;
+    SendDestroyEvent();
 
     // this will also reenable all the other windows for a modal dialog
     Show(false);
 
     if (bShow)
     {
+        if (CanDoLayoutAdaptation())
+            DoLayoutAdaptation();
+
         // this usually will result in TransferDataToWindow() being called
         // which will change the controls values so do it before showing as
         // otherwise we could have some flicker
 
     wxString title = GetTitle();
     if (!title.empty())
-        ::WinSetWindowText((HWND)GetHwnd(), (PSZ)title.c_str());
+        ::WinSetWindowText((HWND)GetHwnd(), title.c_str());
 
     if ( bShow )
     {