GME  13
GMESmallMessageBox.cpp
Go to the documentation of this file.
00001  //###############################################################################################################################################
00002 //
00003 //      Object Constraint Language Generic Manager
00004 //      GMESmallMessageBox.cpp
00005 //
00006 //###############################################################################################################################################
00007 
00008 #include "stdafx.h"
00009 #include "constraintmanager.h"
00010 #include "GMESmallMessageBox.h"
00011 
00012 #ifdef _DEBUG
00013 #define new DEBUG_NEW
00014 #undef THIS_FILE
00015 static char THIS_FILE[] = __FILE__;
00016 #endif
00017 
00018 //##############################################################################################################################################
00019 //
00020 //      C L A S S : CSmallMessageBox <<< + CDialog
00021 //
00022 //##############################################################################################################################################
00023 
00024 CSmallMessageBox::CSmallMessageBox( CWnd* pParent /*=NULL*/)
00025         : CDialog(CSmallMessageBox::IDD, pParent)
00026 {
00027         //{{AFX_DATA_INIT(CSmallMessageBox)
00028                 // NOTE: the ClassWizard will add member initialization here
00029         //}}AFX_DATA_INIT
00030         m_bCloseRequested = false;
00031 }
00032 
00033 
00034 void CSmallMessageBox::DoDataExchange(CDataExchange* pDX)
00035 {
00036         CDialog::DoDataExchange(pDX);
00037         //{{AFX_DATA_MAP(CSmallMessageBox)
00038         DDX_Control(pDX, NOEX_PROGRESS, m_ctrlProgress);
00039         DDX_Control(pDX, NOEX_LBLMESSAGE, m_lblMessage);
00040         DDX_Control(pDX, NOEX_BTNOK, m_btnOK);
00041         //}}AFX_DATA_MAP
00042 }
00043 
00044 
00045 BEGIN_MESSAGE_MAP(CSmallMessageBox, CDialog)
00046         //{{AFX_MSG_MAP(CSmallMessageBox)
00047         ON_BN_CLICKED(NOEX_BTNOK, OnClickOK)
00048         //}}AFX_MSG_MAP
00049 END_MESSAGE_MAP()
00050 
00051 
00052 
00053 
00054 
00055 BOOL CSmallMessageBox::OnInitDialog()
00056 {
00057         CDialog::OnInitDialog();
00058 
00059         m_lblMessage.SetWindowText( _T("No Constraint violations were found.") );
00060         m_ctrlProgress.SetRange32( 0, 100 );
00061         m_ctrlProgress.SetPos( 100 );
00062         m_btnOK.EnableWindow( TRUE );
00063         m_btnOK.SetWindowText( _T("OK") );
00064         m_btnOK.ShowWindow( SW_SHOW );
00065         m_bModeless = false;
00066 
00067         return TRUE;
00068 }
00069 
00070 void CSmallMessageBox::OnClickOK()
00071 {
00072         if (m_bModeless) {
00073                 int nRet = ::AfxMessageBox(_T("Are you sure you want to abort the constraint checking?"), MB_YESNO | MB_ICONWARNING);
00074                 if (nRet == IDYES)
00075                         m_bCloseRequested = true;
00076                 else
00077                         ASSERT(nRet == IDNO);
00078         } else {
00079                 CDialog::OnOK();
00080         }
00081 }
00082 
00083 BOOL CSmallMessageBox::PreTranslateMessage( MSG* pMsg )
00084 {
00085         return ( pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE ) ? FALSE : CDialog::PreTranslateMessage( pMsg );
00086 }
00087 
00088 bool CSmallMessageBox::IncrementProgress()
00089 {
00090         m_ctrlProgress.SetPos( m_ctrlProgress.GetPos() + 1 );
00091 
00092         // About this technique see "PeekMessage Elsewhere in Your Application" section
00093         // in "Idle Loop Processing" article in MSDN:
00094         // http://msdn.microsoft.com/en-us/library/3dy7kd92%28VS.80%29.aspx
00095         MSG msg;
00096         while (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
00097         {
00098                 if (!AfxGetApp()->PumpMessage())
00099                 {
00100                         break;
00101                 }
00102         }
00103 
00104         return !m_bCloseRequested;
00105 }
00106 
00107 void CSmallMessageBox::DoModeless( int iRange )
00108 {
00109         AfxGetApp()->DoWaitCursor( 1 );
00110         Create( IDD_PROGRESS_DIALOG );
00111         ShowWindow( SW_SHOW );
00112         m_lblMessage.SetWindowText( _T("Evaluation of Constraints is in progress....") );
00113         m_ctrlProgress.SetRange32( 0, iRange );
00114         m_ctrlProgress.SetPos( 0 );
00115         m_btnOK.SetWindowText( _T("Abort") );
00116         m_bModeless = true;
00117 }
00118 
00119 void CSmallMessageBox::UndoModeless()
00120 {
00121         ShowWindow( SW_HIDE );
00122         DestroyWindow();
00123         AfxGetApp()->DoWaitCursor( -1 );
00124 }