我建立一个对话框工程,要实现点OK时对话框消毁并再显示出另一个对话框。
我的做法:
建立一个TEST的对话框工程;
插入一个对话框资源,并建立相应的类MYTEST;
在主程序类CTESTApp的InitInstance()中添加代码如下;
BOOL CTESTApp::InitInstance()
{
AfxEnableControlContainer();
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif CTESTDlg dlg;//程序自己生成的对话框类,也就是第一个对话框
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
MYTEST TT;//这两行是我添加的实现第二个对话框显示的代码
TT.DoModal();//这两行是我添加的实现第二个对话框显示的代码
}
else if (nResponse == IDCANCEL)
{
} return FALSE;
}
编译执行通过,可是我点第一个对话框的OK后屏幕只是闪了一下就完成退出了,并没有显示出第二个对话框啊?请问这到底是怎么回事啊?而且我把上面显示第二个对话框的代码改成AfxMessageBox("hello"),也是显示不出来啊?
我的做法:
建立一个TEST的对话框工程;
插入一个对话框资源,并建立相应的类MYTEST;
在主程序类CTESTApp的InitInstance()中添加代码如下;
BOOL CTESTApp::InitInstance()
{
AfxEnableControlContainer();
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif CTESTDlg dlg;//程序自己生成的对话框类,也就是第一个对话框
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
MYTEST TT;//这两行是我添加的实现第二个对话框显示的代码
TT.DoModal();//这两行是我添加的实现第二个对话框显示的代码
}
else if (nResponse == IDCANCEL)
{
} return FALSE;
}
编译执行通过,可是我点第一个对话框的OK后屏幕只是闪了一下就完成退出了,并没有显示出第二个对话框啊?请问这到底是怎么回事啊?而且我把上面显示第二个对话框的代码改成AfxMessageBox("hello"),也是显示不出来啊?
把
MYTEST TT;//这两行是我添加的实现第二个对话框显示的代码
TT.DoModal();//这两行是我添加的实现第二个对话框显示的代码
写在CTESTDlg里的ok按钮消息里试试。
if(nResponse == IDCANCEL)
{
return FALSE;
} MYTEST TT;//这两行是我添加的实现第二个对话框显示的代码
TT.DoModal();//这两行是我添加的实现第二个对话框显示的代码
m_pMainWnd = &dlg;
去掉,也无伤大雅,你的程序就可以运行了;
不过这个指针你的工程就不能用了;
当m_pMainWnd析构时调用PostQuitMessage(0)这样当前线程结束,当然你的第二个对话框就不能显示了
{
// 扔掉 WM_QUIT 消息
MSG msg;
while((::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)); MYTEST TT;//这两行是我添加的实现第二个对话框显示的代码
TT.DoModal();//这两行是我添加的实现第二个对话框显示的代码
}