問:程序是基於對話框的,我顯示兩個對話框,一個在另一個後面,下面是我的做法:
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在向導中已經被使用,你不能去象你那樣的使用.