#include "wx/msw/private.h"
#include "wx/log.h"
-#if wxUSE_COMMON_DIALOGS
+#if wxUSE_COMMON_DIALOGS && !defined(__WXMICROWIN__)
#include <commdlg.h>
#endif
IMPLEMENT_DYNAMIC_CLASS(wxDialog, wxTopLevelWindow)
-BEGIN_EVENT_TABLE(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)
m_windowDisabler = (wxWindowDisabler *)NULL;
- SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE));
+ SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE));
}
bool wxDialog::Create(wxWindow *parent,
if ( !wxTopLevelWindow::Create(parent, id, title, pos, size, style, name) )
return FALSE;
- SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
-
- return TRUE;
-}
-
-bool wxDialog::EnableCloseButton(bool enable)
-{
-#ifndef __WXMICROWIN__
- // get system (a.k.a. window) menu
- HMENU hmenu = ::GetSystemMenu(GetHwnd(), FALSE /* get it */);
- if ( !hmenu )
- {
- wxLogLastError(_T("GetSystemMenu"));
-
- return FALSE;
- }
-
- // enabling/disabling the close item from it also automatically
- // disables/enabling the close title bar button
- if ( !::EnableMenuItem(hmenu, SC_CLOSE,
- MF_BYCOMMAND | (enable ? MF_ENABLED : MF_GRAYED)) )
- {
- wxLogLastError(_T("EnableMenuItem(SC_CLOSE)"));
-
- return FALSE;
- }
-
- // update appearance immediately
- if ( !::DrawMenuBar(GetHwnd()) )
- {
- wxLogLastError(_T("DrawMenuBar"));
- }
-#endif
+ SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
return TRUE;
}
#if wxUSE_CTL3D
Ctl3dColorChange();
#else
- SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE));
+ SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE));
Refresh();
#endif
}
// dialog window proc
// ---------------------------------------------------------------------------
+BOOL CALLBACK wxRefreshChildProc(HWND hwnd, LPARAM WXUNUSED(lParam))
+{
+ ::InvalidateRect(hwnd, NULL, FALSE /* don't erase bg */);
+
+ // continue enumeration
+ return TRUE;
+}
+
long wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
{
long rc = 0;
switch ( message )
{
-#if 0 // now that we got owner window right it doesn't seem to be needed
- case WM_ACTIVATE:
- switch ( LOWORD(wParam) )
- {
- case WA_ACTIVE:
- case WA_CLICKACTIVE:
- if ( IsModalShowing() && GetParent() )
- {
- // bring the owner window to top as the standard dialog
- // boxes do
- if ( !::SetWindowPos
- (
- GetHwndOf(GetParent()),
- GetHwnd(),
- 0, 0,
- 0, 0,
- SWP_NOACTIVATE |
- SWP_NOMOVE |
- SWP_NOSIZE
- ) )
- {
- wxLogLastError(wxT("SetWindowPos(SWP_NOACTIVATE)"));
- }
- }
- // fall through to process it normally as well
- }
- break;
-#endif // 0
-
case WM_CLOSE:
// if we can't close, tell the system that we processed the
// message - otherwise it would close us
processed = !Close();
break;
+ case WM_SIZE:
+ // the Windows dialogs unfortunately are not meant to be resizeable
+ // at all and their standard class doesn't include CS_[VH]REDRAW
+ // styles which means that the window is not refreshed properly
+ // after the resize and no amount of WS_CLIPCHILDREN/SIBLINGS can
+ // help with it - so we have to refresh it manually which certainly
+ // creates flicker but at least doesn't show garbage on the screen
+ rc = wxWindow::MSWWindowProc(message, wParam, lParam);
+ processed = TRUE;
+ if ( !HasFlag(wxNO_FULL_REPAINT_ON_RESIZE) )
+ {
+ ::EnumChildWindows(GetHwnd(), wxRefreshChildProc, 0);
+ }
+ break;
+
#ifndef __WXMICROWIN__
case WM_SETCURSOR:
// we want to override the busy cursor for modal dialogs: