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;
}

解决方案 »

  1.   

    我大概知道是什么问题了
    while (GetMessage(&csTempMsg, NULL, 0, 0)) 

      if ( hDlgModeless==0||!IsDialogMessage(hDlgModeless,&csTempMsg) ) 
      {  
       TranslateMessage (&csTempMsg); DispatchMessage (&csTempMsg); 
      } 
    }
    没有出口死循环了。
    但是,不加这段的话,我的对话框跳出来就没响应了。请问高人们,假如我想做个非模态的对话框该怎么做? 
      

  2.   


    CTestDlg *dlg=new CTestDlg;
    dlg->Create(IDD_TEST_DLG,NULL);
    dlg->ShowWindows(SW_SHOW);
      

  3.   

    CTestDlg *dlg=new CTestDlg;
    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); 
      } 

    进入消息循环后,我不知道怎么出来了。
      

  4.   

    直接使用模态对话类多方便啊,这个太麻烦了.如果想封装模态对话框的话,这个消息循环可以这样写
    while (GetMessage(&csTempMsg, NULL, 0, 0)) 

      if (hDlgModeless == NULL)
      {
          if(IsDialogMessage(hDlgModeless,&csTempMsg))
          {
             if(dlg.m_bExit) break;
             continues;
          }
          TranslateMessage (&csTempMsg); 
          DispatchMessage (&csTempMsg); 
      } 

      

  5.   

    我是希望 模态非模态都支持,bIsModal参数来控制。
      

  6.   

    没办法了,唯有用线程,把AFXMESSAGEBOX直接装进去。