X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ad81651f00edc6f489d9b6a0839d316a964fd521..66b6b04535cf261b7bae7da77332835b242abd04:/src/msw/msgdlg.cpp diff --git a/src/msw/msgdlg.cpp b/src/msw/msgdlg.cpp index 70a83e908b..9468d76841 100644 --- a/src/msw/msgdlg.cpp +++ b/src/msw/msgdlg.cpp @@ -6,7 +6,7 @@ // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -21,26 +21,22 @@ #endif #ifndef WX_PRECOMP -#include -#include "wx/defs.h" -#include "wx/utils.h" -#include "wx/dialog.h" -#include "wx/msgdlg.h" + #include "wx/app.h" + #include "wx/defs.h" + #include "wx/utils.h" + #include "wx/dialog.h" + #include "wx/msgdlg.h" #endif #include "wx/msw/private.h" -#include -#include -#include - -#define wxDIALOG_DEFAULT_X 300 -#define wxDIALOG_DEFAULT_Y 300 - IMPLEMENT_CLASS(wxMessageDialog, wxDialog) -wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxString& message, const wxString& caption, - long style, const wxPoint& pos) +wxMessageDialog::wxMessageDialog(wxWindow *parent, + const wxString& message, + const wxString& caption, + long style, + const wxPoint& WXUNUSED(pos)) { m_caption = caption; m_message = message; @@ -48,60 +44,71 @@ wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxString& message, cons m_parent = parent; } -int wxMessageDialog::ShowModal(void) +int wxMessageDialog::ShowModal() { - HWND hWnd = 0; - if (m_parent) hWnd = (HWND) m_parent->GetHWND(); - unsigned int msStyle = MB_OK; - if (m_dialogStyle & wxYES_NO) - { - if (m_dialogStyle & wxCANCEL) - msStyle = MB_YESNOCANCEL; - else - msStyle = MB_YESNO; + if ( !wxTheApp->GetTopWindow() ) + { + // when the message box is shown from wxApp::OnInit() (i.e. before the + // message loop is entered), this must be done or the next message box + // will never be shown - just try putting 2 calls to wxMessageBox() in + // OnInit() to see it + while ( wxTheApp->Pending() ) + wxTheApp->Dispatch(); + } - if (m_dialogStyle & wxNO_DEFAULT) - msStyle |= MB_DEFBUTTON2; - } + HWND hWnd = 0; + if (m_parent) hWnd = (HWND) m_parent->GetHWND(); + unsigned int msStyle = MB_OK; + if (m_dialogStyle & wxYES_NO) + { + if (m_dialogStyle & wxCANCEL) + msStyle = MB_YESNOCANCEL; + else + msStyle = MB_YESNO; - if (m_dialogStyle & wxOK) - { - if (m_dialogStyle & wxCANCEL) - msStyle = MB_OKCANCEL; - else - msStyle = MB_OK; - } - if (m_dialogStyle & wxICON_EXCLAMATION) - msStyle |= MB_ICONEXCLAMATION; - else if (m_dialogStyle & wxICON_HAND) - msStyle |= MB_ICONHAND; - else if (m_dialogStyle & wxICON_INFORMATION) - msStyle |= MB_ICONINFORMATION; - else if (m_dialogStyle & wxICON_QUESTION) - msStyle |= MB_ICONQUESTION; + if (m_dialogStyle & wxNO_DEFAULT) + msStyle |= MB_DEFBUTTON2; + } + + if (m_dialogStyle & wxOK) + { + if (m_dialogStyle & wxCANCEL) + msStyle = MB_OKCANCEL; + else + msStyle = MB_OK; + } + if (m_dialogStyle & wxICON_EXCLAMATION) + msStyle |= MB_ICONEXCLAMATION; + else if (m_dialogStyle & wxICON_HAND) + msStyle |= MB_ICONHAND; + else if (m_dialogStyle & wxICON_INFORMATION) + msStyle |= MB_ICONINFORMATION; + else if (m_dialogStyle & wxICON_QUESTION) + msStyle |= MB_ICONQUESTION; - if (hWnd) - msStyle |= MB_APPLMODAL; - else - msStyle |= MB_TASKMODAL; + if (hWnd) + msStyle |= MB_APPLMODAL; + else + msStyle |= MB_TASKMODAL; - int msAns = MessageBox(hWnd, (LPCTSTR)(const wxChar *)m_message, (LPCTSTR)(const wxChar *)m_caption, msStyle); - int ans = wxOK; - switch (msAns) - { - case IDCANCEL: - ans = wxID_CANCEL; - break; - case IDOK: - ans = wxID_OK; - break; - case IDYES: - ans = wxID_YES; - break; - case IDNO: - ans = wxID_NO; - break; - } - return ans; + int msAns = MessageBox(hWnd, (LPCTSTR)m_message.c_str(), + (LPCTSTR)m_caption.c_str(), msStyle); + int ans = wxOK; + switch (msAns) + { + case IDCANCEL: + ans = wxID_CANCEL; + break; + case IDOK: + ans = wxID_OK; + break; + case IDYES: + ans = wxID_YES; + break; + case IDNO: + ans = wxID_NO; + break; + } + return ans; }