开发过程中想实现新线程创建子窗口处理子窗口的事情,父窗口仍然可以相应用户请求的功能。
利用“非模态窗口”实现
不多做介绍了,自己了解的也不深入,下面是相关资料链接:
【转载】MFC下的模态与非模态对话框
VC++中SetWindowPos函数详解(设置窗口位置 和非模式关系不大)
从代码上看创建非模式对话框很简单
CMyDialog* m_myDlg;
m_myDlg=new CMyDialog(pWnd); //堆分配非模态对话框内存空间, //CMyDialog(CWnd* pParent=NULL)为构造函数
m_myDlg->Create(IDD_MYDIALOG,pWnd);
m_myDlg->ShowWindow(SW_SHOW);
但是如果上面的代码时在一个函数或线程内部执行的话创建的类对象是存储在局部存储空间的,函数或线程结束后,它的局部存储空间被释放,new出来的对象也就没了
从而导致对话框一闪而过。
解决方案:
1.使用全局变量,即对话框对象使用全局变量。
2.函数或线程中添加消息循环(紧跟在showwindow函数之后即可)
MSG msg;
while(GetMessage(&msg,NULL,0,0))//添加消息循环,防止窗口消失
{
if(hDlgModeless==0||!IsDialogMessage(hDlgModeless,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}