【问题标题】:Doesn't share client area with any other window application不与任何其他窗口应用程序共享客户区
【发布时间】:2014-03-24 16:55:01
【问题描述】:

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

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

现在我需要所有其他应用程序出现在它下方,这样它就不会覆盖任何其他窗口应用程序的菜单或顶部窗格。

任何帮助都会非常感激。

【问题讨论】:

  • 这个this->SetWindowPos(&wndTopMost, 10, 0, 0, 0, SWP_NOMOVE)把窗口设置在最上面,你遇到什么问题?

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


【解决方案1】:

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

示例(此处hwnd - 是您的窗口句柄。此窗口应具有 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);

【讨论】:

  • 它有什么用。我有一个对话框,我只想在最大化时充当任务窗格。
  • @Heena,我添加了一个示例。
  • 它有点工作,但它正在向下移动所有应用程序,但我的应用程序也随之下降。应该在哪里写这段代码。现在我写在OninitDialog()
  • @Heena,你的窗口应该有 WS_EX_TOOLWINDOW 样式,否则它也会下移。
  • 我认为 WS_EX_TOOLWINDOW 禁用了此参考中也提到的默认菜单样式:msdn.microsoft.com/en-us/library/windows/desktop/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 2014-12-19
  • 2013-08-25
  • 2017-03-20
  • 2020-08-26
  • 1970-01-01
相关资源
最近更新 更多