使自动隐藏的任务栏在窗口最大化而不取消隐藏

Posted

技术标签:

【中文标题】使自动隐藏的任务栏在窗口最大化而不取消隐藏【英文标题】:Making auto-hidden taskbar visible on window maximize without un-hiding it 【发布时间】:2012-07-30 16:40:43 【问题描述】:

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

问题:

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

要进入任务栏,用户必须按 windows 键或 Alt-Tab。

我尝试过的:

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

非常感谢。

【问题讨论】:

【参考方案1】:

Windows 7 的烦人功能是在任务栏上全屏运行每个没有字幕的窗口 ... Windows 7 实际上是通过重置 TOPMOST 标志来实现的。所以我们需要重新设置它。 这也是为什么任务栏属性不再有 Always on Top 复选框的原因。

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 );
  

【讨论】:

【参考方案2】:
    想一想,如果您处理WM_GETMINMAXINFO,调整最大化窗口的大小可能会起作用。在“DefWindowProc”之后修补 ptMaxSize / ptMaxPosition。 你试过SetWindowPos (hTaskbar, *YourHwnd*, 0,0,0,0, SWP_NOMOVE|SWP_NOSIZE)吗?

【讨论】:

以上是关于使自动隐藏的任务栏在窗口最大化而不取消隐藏的主要内容,如果未能解决你的问题,请参考以下文章

Winform 最小化 最大化 关闭 点击任务栏隐藏显示 点击鼠标左键移动窗体

WinForm 禁止调整大小禁止最大化窗口

隐藏WPF窗口上的最小化最大化按钮

Chrome浏览器双击标题栏假死

Unity实战篇 |Unity 打包exe 实现隐藏窗口标题栏隐藏最小化最大化关闭按钮

Unity实战篇 |Unity 打包exe 实现隐藏窗口标题栏隐藏最小化最大化关闭按钮