GME
13
|
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 }