#include "wx/frame.h"
#include "wx/app.h"
#include "wx/settings.h"
+#include "wx/intl.h"
+#include "wx/log.h"
#endif
#include "wx/msw/private.h"
// Allows creation of dialogs with & without captions under MSWindows,
// resizeable or not (but a resizeable dialog always has caption -
// otherwise it would look too strange)
- const char *dlg;
- if ( style & wxTHICK_FRAME )
- dlg = "wxResizeableDialog";
+ const wxChar *dlg;
+ if ( style & wxRESIZE_BORDER )
+ dlg = _T("wxResizeableDialog");
else if ( style & wxCAPTION )
- dlg = "wxCaptionDialog";
+ dlg = _T("wxCaptionDialog");
else
- dlg = "wxNoCaptionDialog";
+ dlg = _T("wxNoCaptionDialog");
MSWCreate(m_windowId, parent, NULL, this, NULL,
x, y, width, height,
0, // style is not used if we have dlg template
wxTopLevelWindows.DeleteObject(this);
+ Show(FALSE);
+
if (m_modalShowing)
{
- Show(FALSE);
// For some reason, wxWindows can activate another task altogether
// when a frame is destroyed after a modal dialog has been invoked.
// Try to bring the parent to the top.
}
m_modalShowing = FALSE;
- if ( GetHWND() )
- ShowWindow((HWND) GetHWND(), SW_HIDE);
if ( (GetWindowStyleFlag() & wxDIALOG_MODAL) != wxDIALOG_MODAL )
wxModelessWindows.DeleteObject(this);
- UnsubclassWin();
-
// If this is the last top-level window, exit.
if (wxTheApp && (wxTopLevelWindows.Number() == 0))
{
{
if (show)
{
- m_hwndOldFocus = (WXHWND)::GetFocus();
+ // find the top level window which had focus before - we will restore
+ // focus to it later
+ m_hwndOldFocus = 0;
+ for ( HWND hwnd = ::GetFocus(); hwnd; hwnd = ::GetParent(hwnd) )
+ {
+ m_hwndOldFocus = (WXHWND)hwnd;
+ }
if (m_modalShowing)
{
void wxDialog::SetTitle(const wxString& title)
{
- SetWindowText((HWND) GetHWND(), (const char *)title);
+ SetWindowText((HWND) GetHWND(), title.c_str());
}
wxString wxDialog::GetTitle() const
Refresh();
#endif
}
+
+// ---------------------------------------------------------------------------
+// dialog window proc
+// ---------------------------------------------------------------------------
+
+long wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
+{
+ long rc = 0;
+ bool processed = FALSE;
+
+ switch ( message )
+ {
+ case WM_CLOSE:
+ // if we can't close, tell the system that we processed the
+ // message - otherwise it would close us
+ processed = !Close();
+ break;
+ }
+
+ if ( !processed )
+ rc = wxWindow::MSWWindowProc(message, wParam, lParam);
+
+ return rc;
+}