VOID ATPMessagebox(char *strATPMsg, char *strBoxTitle, BOOL bIsModal, int iWaitTime)
{
CString csATPMsg = strATPMsg;
CString csBoxTitle = strBoxTitle;
if (!bIsModal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
dlg->Create(IDD_DIALOG1);
if (csATPMsg.GetLength() > 0)
{
dlg->m_csMessage = csATPMsg;
}else
{
AfxMessageBox("111111");
}
dlg->SetWindowText(csBoxTitle); dlg->ShowWindow(SW_SHOW);
HWND hDlgModeless = dlg->GetSafeHwnd();
UpdateWindow(dlg->m_hWnd);
MSG csTempMsg;
while (GetMessage(&csTempMsg, NULL, 0, 0))
{
if ( hDlgModeless==0||!IsDialogMessage(hDlgModeless,&csTempMsg) )
{
TranslateMessage (&csTempMsg);
DispatchMessage (&csTempMsg);
}
}
}else
{
dlg->m_csMessage = csATPMsg;
dlg->SetWindowText(csBoxTitle);
UpdateWindow(dlg->m_hWnd);
dlg->DoModal();
}
}调用
VOID ATPMessagebox(char *strATPMsg, char *strBoxTitle, BOOL bIsModal, int iWaitTime);
#pragma comment (lib, "ATPMessageBox");
int main(int argc, char* argv[])
{
ATPMessagebox("ceshi", "biaoti", FALSE, 10);
ATPMessagebox("ceshi", "biaoti", FALSE, 10); //中断了
ATPMessagebox("ceshi", "biaoti", FALSE, 10);
ATPMessagebox("ceshi", "biaoti", FALSE, 10);
int i;
cin>>i;
return 0;
}
{
CString csATPMsg = strATPMsg;
CString csBoxTitle = strBoxTitle;
if (!bIsModal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
dlg->Create(IDD_DIALOG1);
if (csATPMsg.GetLength() > 0)
{
dlg->m_csMessage = csATPMsg;
}else
{
AfxMessageBox("111111");
}
dlg->SetWindowText(csBoxTitle); dlg->ShowWindow(SW_SHOW);
HWND hDlgModeless = dlg->GetSafeHwnd();
UpdateWindow(dlg->m_hWnd);
MSG csTempMsg;
while (GetMessage(&csTempMsg, NULL, 0, 0))
{
if ( hDlgModeless==0||!IsDialogMessage(hDlgModeless,&csTempMsg) )
{
TranslateMessage (&csTempMsg);
DispatchMessage (&csTempMsg);
}
}
}else
{
dlg->m_csMessage = csATPMsg;
dlg->SetWindowText(csBoxTitle);
UpdateWindow(dlg->m_hWnd);
dlg->DoModal();
}
}调用
VOID ATPMessagebox(char *strATPMsg, char *strBoxTitle, BOOL bIsModal, int iWaitTime);
#pragma comment (lib, "ATPMessageBox");
int main(int argc, char* argv[])
{
ATPMessagebox("ceshi", "biaoti", FALSE, 10);
ATPMessagebox("ceshi", "biaoti", FALSE, 10); //中断了
ATPMessagebox("ceshi", "biaoti", FALSE, 10);
ATPMessagebox("ceshi", "biaoti", FALSE, 10);
int i;
cin>>i;
return 0;
}
while (GetMessage(&csTempMsg, NULL, 0, 0))
{
if ( hDlgModeless==0||!IsDialogMessage(hDlgModeless,&csTempMsg) )
{
TranslateMessage (&csTempMsg); DispatchMessage (&csTempMsg);
}
}
没有出口死循环了。
但是,不加这段的话,我的对话框跳出来就没响应了。请问高人们,假如我想做个非模态的对话框该怎么做?
CTestDlg *dlg=new CTestDlg;
dlg->Create(IDD_TEST_DLG,NULL);
dlg->ShowWindows(SW_SHOW);
dlg->Create(IDD_TEST_DLG,NULL);
dlg->ShowWindows(SW_SHOW);我在别的地方已经初始化了。我是想封装一个非模态对话框进DLL,来取代AFXMESSAGEBOX
但是
while (GetMessage(&csTempMsg, NULL, 0, 0))
{
if ( hDlgModeless==0||!IsDialogMessage(hDlgModeless,&csTempMsg) )
{
TranslateMessage (&csTempMsg); DispatchMessage (&csTempMsg);
}
}
进入消息循环后,我不知道怎么出来了。
while (GetMessage(&csTempMsg, NULL, 0, 0))
{
if (hDlgModeless == NULL)
{
if(IsDialogMessage(hDlgModeless,&csTempMsg))
{
if(dlg.m_bExit) break;
continues;
}
TranslateMessage (&csTempMsg);
DispatchMessage (&csTempMsg);
}
}