有种情况是这样的:比如,程序正在处理一件事情,需要用户等待,这时需要弹出一个窗体,显示“请等待”字样,处理完了以后窗体消失,没有Ok和Cancel按钮。我用CDialog来实现这个“请等待”的窗体,可是用CDialog::DoModal一定要返回IDOK等消息才能让窗体消失,否则窗体一直在,又使用CDialog::ShowWindow(SW_NORMAL),会有断言错误,如果要实现这样一个“请等待”的窗体该怎么办?

解决方案 »

  1.   

    如果用DoModal的话,你自己的处理程序不就是阻断了吗?
    如果不想被阻断,有三个方法:
    一. 你的处理程序用单独的线程进行处理,这时
    定义一个全局变量bool g_noshow=0;在你弹出的这个对话框中加一个定时器SetTimer(1,10,0);
    在OnTimer()中加入:
    if(g_nshow)
      OnOK();//关闭本对话框这时,你只要在线程里控制那个变量就行二. 把你的处理程序放到新开的对话框中去,这样比较好控制,
    处理完了,关闭当前对话框即可.三. 用非模态对话框
      

  2.   

    用非模式对话框。或者你干脆像MSN/Foxmail那样,屏幕右下角弄个自动弹出的气球窗口。
      

  3.   

    楼主讲的这种功能,一般都是采用非模态对话框。
    CYDlg * dlg = new CYDlg;
    dlg->Crreate(IDD_DLGRESOURCE, 0);//IDD_DLGRESOURCE是你的对话框资源的ID
    dlg->ShowWindow(SW_SHOW);
      

  4.   

    已经试过了,用非模态对话框比较好,处理完了就DestroyWindow(),谢谢楼上各位