如何创建标题较少边框的窗口?当窗口最大化时,它不应覆盖任务栏

时间:2014-02-13 09:16:25

标签: windows winapi

我想使用没有标题栏的win32创建一个窗口。边框应调整窗口大小。但是当我最大化窗口时,它也覆盖了任务栏,我不想覆盖任务栏。我怎样才能做到这一点?

谢谢。

2 个答案:

答案 0 :(得分:4)

认为如果窗口处于MAXIMIZED状态,它不会覆盖标准任务栏 - 但是,您可以强制窗口全屏,而不会使其最大化。为了证明:

// Force window to cover the taskbar...
case WM_SIZE:
  if( wParam == SIZE_MAXIMIZED )
  {
    ShowWindow( hWnd, SW_RESTORE ); // not MAXIMIZED any more

    // show on top at 1920x1080 size
    SetWindowPos( hWnd, HWND_TOPMOST,0,0,1920,1080,SWP_SHOWWINDOW );
  }
  break;

请注意,这确实存在与窗口为TOPMOST相关的所有问题!

<强>另外... 如果你有一个没有菜单栏的窗口在最大化时覆盖任务栏而你希望任务栏仍然可见,那么将窗口调整大小到屏幕工作区:

HMONITOR hmon= MonitorFromWindow(hDlg, MONITOR_DEFAULTTONEAREST );
MONITORINFO moninfo;
moninfo.cbSize= sizeof(moninfo);
GetMonitorInfo(hmon, &moninfo);

SetWindowPos(hWnd,0, moninfo.rcWork.left, moninfo.rcWork.top,
                     moninfo.rcWork.right,moninfo.rcWork.bottom, SWP_NOZORDER );

注意:您不希望将此窗口设置为MAXIMIZED,只需使用上面的内容将其调整为全屏减去任务栏(如果窗口没有标题栏/系统菜单,则用户无法移动它,所以它就像最大化一样。)

答案 1 :(得分:0)

当显示没有标题栏的任何全屏窗口时,Windows任务栏将自行降低(让自己被覆盖)。这是为了支持游戏,Flash视频,Power Point演示等方案。

当您与系统中的其他窗口进行交互时,您所做的任何黑客攻击最终都会被覆盖。

您可以做的最好的事情就是TonyWilk所说的,即使用屏幕工作区域(或桌面工作区域)并在用户想要最大化窗口时将窗口调整为该大小。请注意,每次要最大限度地处理诸如桌面工作区域更改或窗口移动到另一台监视器等问题时,都需要计算这些内容。