非模态窗口

来源:互联网 发布:c语言开发环境搭建 编辑:程序博客网 时间:2024/05/05 23:44

开发过程中想实现新线程创建子窗口处理子窗口的事情,父窗口仍然可以相应用户请求的功能。

利用“非模态窗口”实现

不多做介绍了,自己了解的也不深入,下面是相关资料链接:

【转载】MFC下的模态与非模态对话框

VC++中SetWindowPos函数详解(设置窗口位置 和非模式关系不大)

MFC子窗口和父窗口(SetParent,SetOwner)

非模态对话框在任务栏上显示
为什么DLL远程创建的非模式对话框一闪就没了,而模式对话框就不会
vc中建立无模式对话框的问题(创建无模式对话框,为什么生成的对话框一闪就没了?
模式对话框和非模式对话框的区别

从代码上看创建非模式对话框很简单
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); }}


3.自定义一条消息,在线程中需要创建非模态对话框向应用程序消息队列投递一条自定义消息,在此消息的响应函数中创建。还可以再定义一条消息进行销毁。表示没看懂。。。。。


原创粉丝点击