home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2233.zip / wxOS2-2_3_3.zip / wxWindows-2.3.3 / src / os2 / msgdlg.cpp < prev    next >
C/C++ Source or Header  |  2000-07-15  |  4KB  |  141 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        msgdlg.cpp
  3. // Purpose:     wxMessageDialog
  4. // Author:      David Webster
  5. // Modified by:
  6. // Created:     10/10/99
  7. // RCS-ID:      $$
  8. // Copyright:   (c) David Webster
  9. // Licence:     wxWindows licence
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. #ifdef __GNUG__
  13. #pragma implementation "msgdlg.h"
  14. #endif
  15.  
  16. // For compilers that support precompilation, includes "wx.h".
  17. #include "wx/wxprec.h"
  18.  
  19. #ifndef WX_PRECOMP
  20. #include <stdio.h>
  21. #include "wx/defs.h"
  22. #include "wx/utils.h"
  23. #include "wx/dialog.h"
  24. #include "wx/app.h"
  25. #include "wx/msgdlg.h"
  26. #endif
  27.  
  28. #include "wx/os2/private.h"
  29.  
  30. #include <math.h>
  31. #include <stdlib.h>
  32. #include <string.h>
  33.  
  34. #define wxDIALOG_DEFAULT_X 300
  35. #define wxDIALOG_DEFAULT_Y 300
  36.  
  37. IMPLEMENT_CLASS(wxMessageDialog, wxDialog)
  38.  
  39. wxMessageDialog::wxMessageDialog(
  40.   wxWindow*                         pParent
  41. , const wxString&                   rsMessage
  42. , const wxString&                   rsCaption
  43. , long                              lStyle
  44. , const wxPoint&                    pPos
  45. )
  46. {
  47.     m_sCaption     = rsCaption;
  48.     m_sMessage     = rsMessage;
  49.     m_lDialogStyle = lStyle;
  50.     m_pParent      = NULL; // pParent;
  51. } // end of wxMessageDialog::wxMessageDialog
  52.  
  53. int wxMessageDialog::ShowModal()
  54. {
  55.     HWND                            hWnd = 0;
  56.     ULONG                           ulStyle = MB_OK;
  57.     int                             nAns = wxOK;
  58.  
  59.     if (!wxTheApp->GetTopWindow())
  60.     {
  61.         //
  62.         // when the message box is shown from wxApp::OnInit() (i.e. before the
  63.         // message loop is entered), this must be done or the next message box
  64.         // will never be shown - just try putting 2 calls to wxMessageBox() in
  65.         // OnInit() to see it
  66.         //
  67.         while (wxTheApp->Pending())
  68.             wxTheApp->Dispatch();
  69.     }
  70.  
  71.     if (m_pParent)
  72.         hWnd = (HWND) m_pParent->GetHWND();
  73.     else
  74.         hWnd = HWND_DESKTOP;
  75.     if (m_lDialogStyle & wxYES_NO)
  76.     {
  77.         if (m_lDialogStyle & wxCANCEL)
  78.             ulStyle = MB_YESNOCANCEL;
  79.         else
  80.             ulStyle = MB_YESNO;
  81.  
  82.         if (m_lDialogStyle & wxNO_DEFAULT)
  83.             ulStyle |= MB_DEFBUTTON2;
  84.     }
  85.  
  86.     if (m_lDialogStyle & wxOK)
  87.     {
  88.         if (m_lDialogStyle & wxCANCEL)
  89.             ulStyle = MB_OKCANCEL;
  90.         else
  91.             ulStyle = MB_OK;
  92.     }
  93.     if (m_lDialogStyle & wxICON_EXCLAMATION)
  94.         ulStyle |= MB_ICONEXCLAMATION;
  95.     else if (m_lDialogStyle & wxICON_HAND)
  96.         ulStyle |= MB_ICONHAND;
  97.     else if (m_lDialogStyle & wxICON_INFORMATION)
  98.         ulStyle |= MB_ICONEXCLAMATION;
  99.     else if (m_lDialogStyle & wxICON_QUESTION)
  100.         ulStyle |= MB_ICONQUESTION;
  101.  
  102.     if (hWnd != HWND_DESKTOP)
  103.         ulStyle |= MB_APPLMODAL;
  104.     else
  105.         ulStyle |= MB_SYSTEMMODAL;
  106.  
  107.     //
  108.     // This little line of code is get message boxes under OS/2 to
  109.     // behve like the other ports.  In OS/2 if the parent is a window
  110.     // it displays, clipped, in the window.  This centers it on the
  111.     // desktop, like the other ports but still allows control over modality
  112.     //
  113.     hWnd = HWND_DESKTOP;
  114.  
  115.     ULONG                           ulAns = ::WinMessageBox( hWnd
  116.                                                             ,hWnd
  117.                                                             ,(PSZ)m_sMessage.c_str()
  118.                                                             ,(PSZ)m_sCaption.c_str()
  119.                                                             ,0L
  120.                                                             ,ulStyle);
  121.     switch (ulAns)
  122.     {
  123.         case MBID_CANCEL:
  124.             nAns = wxID_CANCEL;
  125.             break;
  126.         case MBID_OK:
  127.             nAns = wxID_OK;
  128.             break;
  129.         case MBID_YES:
  130.             nAns = wxID_YES;
  131.             break;
  132.         case MBID_NO:
  133.             nAns = wxID_NO;
  134.             break;
  135.         default:
  136.            nAns = wxID_CANCEL;
  137.     }
  138.     return nAns;
  139. } // end of wxMessageDialog::ShowModal
  140.  
  141.