2012-07-30 119 views
1

我想解决MFC功能包中的这个错误:Windows 7 taskbar won't auto-unhide when wizard-built MFC app is maximized使自动隐藏的任务栏可见窗口最大化而不隐藏它

问题:

当应用程序最大化和用户都有自己的任务栏上的自动隐藏,窗口涵盖了“隐藏”任务栏(这应该仍然是可见的,但只有1个像素的高点)。当隐藏的任务栏像这样弯曲时,用户不能通过将鼠标移动到屏幕底部来隐藏它。

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

我已经试过什么:

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

非常感谢。

回答

1
  1. 想法,如果您处理WM_GETMINMAXINFO最大化窗口的大小可能会起作用。 “DefWindowProc”之后的补丁ptMaxSize/ptMaxPosition
  2. 您是否尝试SetWindowPos (hTaskbar, *YourHwnd*, 0,0,0,0, SWP_NOMOVE|SWP_NOSIZE)? Windows 7中的
1

恼人的功能,在全屏幕上的任务栏 运行的每个标题较少的窗口... 的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); 
    } 
}