
在编写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);
这样就完美了,看见没有~~弹出的对话框只在你本程序的窗口序列中置顶了!!