使窗口上的自动隐藏任务栏最大化而不会隐藏它

时间:2012-07-30 16:40:43

标签: 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像素高)。
  • 调整窗口大小以在屏幕底部留下一行像素 - 这不适用于最大化窗口。

非常感谢。

2 个答案:

答案 0 :(得分:1)

  1. 如果你处理WM_GETMINMAXINFO,思考,调整最大化窗口的大小可能会有效。在“DefWindowProc”之后修补ptMaxSize / ptMaxPosition
  2. 您是否尝试过SetWindowPos (hTaskbar, *YourHwnd*, 0,0,0,0, SWP_NOMOVE|SWP_NOSIZE)

答案 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 );
  }
}