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



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

谢谢。

我认为如果窗口处于最大化状态,它不会覆盖标准任务栏 - 但是,您可以在不最大化的情况下强制窗口全屏显示。要演示:

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

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

或者。。。如果您有一个没有菜单栏的窗口,该窗口在最大化时覆盖任务栏,并且您希望任务栏仍然可见,请将窗口大小调整为屏幕工作区:

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

注意:您不想将这样的窗口设置为最大化,只需使用上面的功能将其大小调整为全屏减去任务栏(如果窗口没有标题栏/系统菜单,则用户无法移动它,因此它的工作方式就像最大化一样)。

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

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

你能做的最好的事情就是TonyWilk所说的,即使用屏幕工作区(或桌面工作区),并在用户想要最大化窗口时将窗口大小调整为仅该大小。请注意,每次您希望最大化以处理桌面工作区更改或窗口移动到另一台显示器等问题时,都需要计算此值。

最新更新