Files
wxWidgets/src/os2/msgdlg.cpp
Vadim Zeitlin 2afb9e1690 1. Derive wxMessageDialogBase from wxDialog (why did we use multiple
inheritance here?), moved more wxMessageDialog fields into the base class
2. Added functions to set the text of message box buttons (patch 1700393,
   currently only implemented for wxMac)
3. Added wxMessageDialog::SetMessage() and SetExtendedMessage() and
   implemented them for wxMac (part of the patch), wxGTK 2.4+ and in
   a generic way for everybody else
4. Allow changing the dialog attributes between creating and showing it,
   for this the real dialog creation is now done on in ShowModal() in all
   ports


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46199 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-05-24 12:50:42 +00:00

123 lines
3.5 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/os2/msgdlg.cpp
// Purpose: wxMessageDialog
// Author: David Webster
// Modified by:
// Created: 10/10/99
// RCS-ID: $Id$
// Copyright: (c) David Webster
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#include "wx/msgdlg.h"
#ifndef WX_PRECOMP
#include <stdio.h>
#include "wx/utils.h"
#include "wx/dialog.h"
#include "wx/app.h"
#include "wx/math.h"
#endif
#include "wx/os2/private.h"
#include <stdlib.h>
#include <string.h>
#define wxDIALOG_DEFAULT_X 300
#define wxDIALOG_DEFAULT_Y 300
IMPLEMENT_CLASS(wxMessageDialog, wxDialog)
int wxMessageDialog::ShowModal()
{
HWND hWnd = 0;
ULONG ulStyle = MB_OK;
int nAns = wxOK;
const long lStyle = GetMessageDialogStyle();
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_parent)
hWnd = (HWND) m_parent->GetHWND();
else
hWnd = HWND_DESKTOP;
if (lStyle & wxYES_NO)
{
if (lStyle & wxCANCEL)
ulStyle = MB_YESNOCANCEL;
else
ulStyle = MB_YESNO;
if (lStyle & wxNO_DEFAULT)
ulStyle |= MB_DEFBUTTON2;
}
if (lStyle & wxOK)
{
if (lStyle & wxCANCEL)
ulStyle = MB_OKCANCEL;
else
ulStyle = MB_OK;
}
if (lStyle & wxICON_EXCLAMATION)
ulStyle |= MB_ICONEXCLAMATION;
else if (lStyle & wxICON_HAND)
ulStyle |= MB_ICONHAND;
else if (lStyle & wxICON_INFORMATION)
ulStyle |= MB_ICONEXCLAMATION;
else if (lStyle & wxICON_QUESTION)
ulStyle |= MB_ICONQUESTION;
if (hWnd != HWND_DESKTOP)
ulStyle |= MB_APPLMODAL;
else
ulStyle |= MB_SYSTEMMODAL;
//
// This little line of code is get message boxes under OS/2 to
// behve like the other ports. In OS/2 if the parent is a window
// it displays, clipped, in the window. This centers it on the
// desktop, like the other ports but still allows control over modality
//
hWnd = HWND_DESKTOP;
ULONG ulAns = ::WinMessageBox( hWnd
,hWnd
,GetFullMessage().c_str()
,m_caption.c_str()
,0L
,ulStyle);
switch (ulAns)
{
case MBID_CANCEL:
nAns = wxID_CANCEL;
break;
case MBID_OK:
nAns = wxID_OK;
break;
case MBID_YES:
nAns = wxID_YES;
break;
case MBID_NO:
nAns = wxID_NO;
break;
default:
nAns = wxID_CANCEL;
}
return nAns;
} // end of wxMessageDialog::ShowModal