自定义了CMyDialog类,与一个模式对话框关联,在别的视图类里要调用这个对话框,代码如下:
CMyDialog dlg;
dlg.DoModal();
Sleep(2000); //让对话框显示两秒钟
dlg.EndDialog(2);调用EndDialog应该可以关闭对话框了,可是对话框没有消失,不知怎样才能关闭它?是不是我的用法有误?谢谢大家了!
CMyDialog dlg;
dlg.DoModal();
Sleep(2000); //让对话框显示两秒钟
dlg.EndDialog(2);调用EndDialog应该可以关闭对话框了,可是对话框没有消失,不知怎样才能关闭它?是不是我的用法有误?谢谢大家了!
CMyDialog dlg;
dlg.DoModal();--》程序运行到此处,主线程将被阻塞!如果调试的话,断点将停止。必须等待dlg对话框退出后才会继续向下运行!所以你的Sleep(2000)和dlg.EndDialog(2)在对话框关闭前根本就不会被调用!所以以下两句话毫无意义。你对模式和非模式的还非常不了解。
Sleep(2000); //让对话框显示两秒钟
dlg.EndDialog(2);
// MyWnd.cpp
#include "MyDialog.h"void CMyWnd::ShowDialog()
{
CMyDialog myDlg;
int nRet = myDlg.DoModal(); if ( nRet == IDOK || nRet == 5 )
AfxMessageBox("Dialog closed successfully");
}// MyDialog.cpp
void CMyDialog::OnSomeAction()
{
// Do something int nRet = 5; // Just any value would do!
EndDialog(nRet); // This value is returned by DoModal! // Do something return; // Dialog closed and DoModal returns only here!
}
void CMyDialog::OnChar()
楼上,请搞清楚了,你说的EndDialog是在这个对话框内部调用的!这当然没有问题了。可楼主说的EndDialog是在对话框外部调用的,不是一回事。
可是如果我只能用模式对话框,有没有办法实现让其自动关闭啊?
我刚才测试了一个办法。用定时器来关闭它。比如你的程序可以这样改:
首先将CMyDialog dlg这个变量定义成定时器事件中可以获取到的变量。比如,你这段程序是在视图类里面调用的,那么将dlg定义为视图类的成员变量。然后修改:
SetTimer(1,2000,NULL);设置2秒定时器
dlg.DoModal();
KillTimer(1);//取消定时器定时器事件中这样:
void CMDITestView::OnTimer(UINT nIDEvent)
{
if(dlg.m_hWnd != NULL )
EndDialog(dlg.m_hWnd,2);
CScrollView::OnTimer(nIDEvent);
}这样可以关闭对话框。但可能还有别的问题出现。
我对操作的判断比如说if(btool==FALSE)是跟在dlg.DoModal()之后的,按照happyparrot(快乐鹦鹉)大侠所说,就根本执行不到这个 if语句了,那究竟该怎么办呢?
别用 EndDialog函数就行了.....
用别的 OnOK OnCancel 一堆呢