问:程序是基于对话框的,我显示两个对话框,一个在另一个后面,下面是我的做法:
CMyApp::InitInstance ()
{
...
CMyDialog1 dlg1;
m_hMainWnd = &dlg1;
int result = dlg1.DoModal ();
CMyDialog2 dlg2;
result = dlg2.DoModal ();
...
}
在上面的代码中,首先一个对话框得到了适当地调用,但第二个对话框却没有,比如:调用 dlg2.DoModal()返回-1,当我逐步跟踪时我发现WM_QUIT被加入到消息队列 中,我不知道 为什么会这样.
答:1)因为MFC需要m_hMainWnd成员函数必须指向一个带有效窗口句柄的对象,如果没有,它将 会自己给自己发送WM_QUIT消息来中断自己.
2)我知道为什么会这样,当你设置m_pMainWnd指向dlg1时,MFC认为你的Dialog1是主窗口. 当用户关闭对话框时,MFC认为用户想退出程序,因为m_pMainWnd指向的窗 口被关闭了.
你认为不工作是因为应用程序在两个DoModal()调用后会退出.InitInstance()会返回 m_pMainWnd在向导中已经被使用,你不能去象你那样的使用.
时间: 2024-10-11 12:32:19