开发学院软件开发VC 关于对话框 阅读

关于对话框

 2008-04-19 20:29:02 来源:WEB开发网   
核心提示:问:程序是基于对话框的,我显示两个对话框,一个在另一个后面,下面是我的做法:CMyApp::InitInstance (){ ... CMyDialog1dlg1; m_hMainWnd = &dlg1; int result = dlg1.DoModal (); CMyDialog2 dlg2; result = d

问:程序是基于对话框的,我显示两个对话框,一个在另一个后面,下面是我的做法:

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在向导中已经被使用,你不能去象你那样的使用.

Tags:关于 对话框

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接