生肖取名:MFC的弹出窗口置顶!~

来源:百度文库 编辑:中财网 时间:2024/05/08 06:18:06

在编写MFC程序的时候,总是希望作为控制的面板页面在我们的窗口界面以外,并且最好的是浮动的,这样往往选用非模式的弹出式对话框。

 m_pPropertyDlg = new CPropretyDlg;
 m_pPropertyDlg->Create(IDD_DIALOG2);

不过新的问题出现了,点击主窗口的时候,作为参考参数显示的弹出式对话框就被遮挡在主窗体之后了,为了让弹出式窗口始终显示,我们让他置顶。上图中的【结构视图】和【控件属性】两个面板就是非模式弹出式对话框。

::SetWindowPos(m_pElementTree->m_hWnd,HWND_TOP,0,0,0,0,SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE);

这里有一个参数HWND_TOP,解释是放在窗口队列的最高位置,这个位置可选择HWND_TOPMOST和HWND_TOP,在使用HWND_TOP无效果以后,选用了HWND_TOPMOST;这样弹出式窗口就置顶了。本来事情到这里就结束了,不过还有一个问题随后发生了。当我切换到其他程序的时候,弹出式的两个非模式对话框依然是置顶的。这就让我重新开始思考HWND_TOP和HWND_TOPMOST的区别,查了很多的资料都是这么解释的:HWND_TOP是窗口队列的置顶,HWND_TOPMOST是所有窗口的置顶;但是HWND_TOP为什么设定没有效果呢?后来我才发现问题的所在,原来这两个窗体要知道自己的父窗体。那么我们在创建这个对话框的时候就必须要告诉他父窗体才行:

 m_pPropertyDlg = new CPropretyDlg;
 m_pPropertyDlg->Create(IDD_DIALOG2,this);

这样就完美了,看见没有~~弹出的对话框只在你本程序的窗口序列中置顶了!!