不与任何其他窗口应用程序共享客户区域

时间:2014-03-21 09:44:47

标签: c++ visual-c++ mfc

我想建立一个对话框,使其不与任何其他应用程序共享其客户区。为此,我已将其粘贴在屏幕顶部和Z顺序中所有其他窗口的顶部

this->SetWindowPos(&wndTopMost, 10, 0, 0, 0, SWP_NOMOVE);

现在我需要所有其他应用程序显示在之下,以便它不会覆盖任何其他窗口应用程序的菜单或顶部窗格。

任何帮助都会得到真正的赞赏。

1 个答案:

答案 0 :(得分:3)

好像你想要实现一个appbar,所以你必须使用SHAppBarMessage

示例(这里hwnd - 是你的Windows句柄。这个窗口应该有WS_EX_TOOLWINDOW样式才能工作):

#include <Shellapi.h>
#define APPBAR_CALLBACK  (WM_USER + 0x01)
APPBARDATA pData;
RECT rt;

...

GetWindowRect(hwnd,&rt);
pData.cbSize=sizeof(pData);
pData.hWnd=hwnd;
pData.uCallbackMessage=APPBAR_CALLBACK; 
pData.uEdge=ABE_TOP;
pData.rc=rt;
SHAppBarMessage(ABM_NEW,&pData);
SHAppBarMessage(ABM_SETPOS, &pData); 
MoveWindow(pData.hWnd, 
           pData.rc.left,
           pData.rc.top, 
           pData.rc.right - pData.rc.left,
           pData.rc.bottom - pData.rc.top, 
           TRUE); 

要禁用此模式,您应致电

SHAppBarMessage(ABM_REMOVE,&pData);