MFC 主窗口如何在创建的子窗口前

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC 主窗口如何在创建的子窗口前相关的知识,希望对你有一定的参考价值。

我做一个工程时遇到一个问题,用非模方式创建出来的窗口总是在主窗口前,请问如何将主窗口设置在前,或者点击主窗口时主窗口会显示在前???

参考技术A 你在打开子模块的时候,获取主窗口指针并调用主窗口的这一个函数SetWindowPos(&wnd,TopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE),之后你再把这个TopMost的状态取消掉就可以了 参考技术B 将主窗口作为子窗口的父窗口,即创建子窗口时,parent参数是主窗口 ,前后次序可以用set Zorder改变追问

我就是这样的,可是还是......

追答

这是因为你的某个操作里隐含改变了Zorder,你可以在合适的地方再改变过来。如在点击会有ONFOUCS,就会自动将窗口激活,你可以重写ONFOUCS

追问

晕死不小心按错了选择了满意的回答了 我再提问哈~!

参考技术C 选择主窗口置顶,或用模拟器追问

请问怎么选择主窗口置顶

追答

internet选项,高级,允许页面自动转换

本回答被提问者采纳

MFC 由主对话框创建的子对话框始终显示在主对话框前面,而且最小化主对话框,子对话框也会跟着最小化

m_dlgTest.Create(IDD_DIALOG1,GetWindow(NULL));
m_dlgTest.ShowWindow(SW_SHOW);
可能是你创建子窗口的方法有问题吧。
可以先添加一个对话框资源,然后创建一个该对话框资源的类,然后在主对话框类中添加这个子对话框类的一个变量,然后用
Create(),
和ShowWindow
两个函数配合做的窗口不会出现你这样的问题。
现在你改的话很麻烦。可以找到主窗口最小化的消息响应函数在里头加补丁代码了,最小化的时候把要正常显示的子窗口再显示出来。
看了下代码
FindWindow
函数
不管你窗口是显示还是隐藏的,只要窗口存在都会找到。
所以你每次FindWindow都是成功的,所以每次都会执行隐藏窗口。
大概看了下代码没仔细看。
参考技术A 详见附件
demo
要把
非模态子窗口

父窗口设置
桌面
void
CMfcdlg2014Dlg::OnButton1()

//
TODO:
Add
your
control
notification
handler
code
here
if(!pSubDlg)

pSubDlg
=
new
CSubDlg();//
非模态
pSubDlg->Create(IDD_DIALOG1,
GetDesktopWindow());创建子窗口的时候传入桌面的窗口指针

pSubDlg->
ShowWindow
(SW_SHOW);//
显示
+
pSubDlg->SetFocus();//
得到焦点

以上是关于MFC 主窗口如何在创建的子窗口前的主要内容,如果未能解决你的问题,请参考以下文章

MFC 由主对话框创建的子对话框始终显示在主对话框前面,而且最小化主对话框,子对话框也会跟着最小化

如何在mfc项目中创建新窗口

如何使用 MFC 分别创建两个窗口?

MFC中,如何获取一个已知窗口标题的窗口的句柄

MFC 中如何点击一个按钮,则主窗口关闭,在重新加载打开

MFC如何将窗口中所有控件大小随父窗口大小改变