c++ - 使自动隐藏任务栏在窗口最大化时可见而不取消隐藏

标签 c++ visual-studio-2010 visual-studio visual-c++ mfc

我正在尝试解决 MFC 功能包中的此错误:Windows 7 taskbar won't auto-unhide when wizard-built MFC app is maximized .

问题:

当应用程序最大化并且用户在其任务栏上自动隐藏时,窗口将覆盖“隐藏”任务栏(它应该仍然可见,但只有 1 像素高)。当隐藏的任务栏像这样隐藏时,用户无法通过将鼠标移动到屏幕底部来取消隐藏它。

要访问任务栏,用户必须按 Windows 键或 Alt-Tab。

我尝试过的:

  • 测试窗口是否在窗口焦点上最大化并在任务栏上调用 ShowWindow/BringWindowToFront。这使得任务栏可见,但会自动打开它,就像将鼠标移到它上面一样。我只想以“隐藏”状态(1 像素高)显示任务栏。
  • 调整窗口大小以在屏幕底部保留一行像素 - 这不适用于最大化的窗口。

非常感谢。

最佳答案

Windows 7 的烦人功能是在任务栏上全屏运行每个无字幕窗口 ... Windows 7 实际上是通过重置 TOPMOST 标志来实现这一点的。所以我们需要将其设置回来。 这也是任务栏属性不再具有“始终位于顶部”复选框的原因。

void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
  // TODO: Add your message handler code here and/or call default
  CWnd::OnSysCommand(nID, lParam);

  // Windows7 bug fix
  if (nID == SC_MAXIMIZE)
  {
    HWND hTaskbar = ::FindWindowW(L"Shell_TrayWnd", NULL);
    ::SetWindowPos(hTaskbar, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE );
  }
}

关于c++ - 使自动隐藏任务栏在窗口最大化时可见而不取消隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11725827/

相关文章:

c# - 将 Resharper 中的间距行为更改为多行 lambda 现场表达式

c++ - SDL/SDL.h : No such file or directory

visual-studio - Microsoft Visual Studio 2010 学术版

c++ - 从 vector 中获取通用双向迭代器

visual-studio-2010 - PowerBuilder 和 Visual Studio 文件在同一个 StarTeam 项目中?

visual-studio-2010 - Visual Studio 2010 可以帮助在 Visual Studio 中查看吗?

c - 在 Visual Studio Code 中调试 C 程序

c++ - Visual Studio 是否支持 C++ 代码索引?

c++ - 将对象指针添加到位于类内部的指向对象的指针 vector

c++ - 分配引用