繁体   English   中英

无边框窗口覆盖任务栏

[英]Borderless Window Covers Taskbar

我有一个定制的无边框窗口。 最大化时,它会覆盖任务栏。 这不是我想要的。 我玩过WM_GETMINMAXINFO消息。 但是,我发现 Windows 10 会在底部和右侧留下额外的 8 像素间隙。 这是一个全有或全无的命题。 这是我尝试的第一个代码:

case WM_GETMINMAXINFO:
     PMINMAXINFO pmm;
     pmm = (PMINMAXINFO)lParam;
     pmm->ptMaxSize.x = GetSystemMetrics(SM_CXSCREEN);
     pmm->ptMaxSize.y = GetSystemMetrics(SM_CYSCREEN);
     return 0;

这样做的结果我的结果相同,没有挂钩WM_GETMINMAXINFO消息。 所以,我从底部敲了两个像素,这样我就可以访问任务栏(处于“自动隐藏”模式):

case WM_GETMINMAXINFO:
     PMINMAXINFO pmm;
     pmm = (PMINMAXINFO)lParam;
     pmm->ptMaxSize.x = GetSystemMetrics(SM_CXSCREEN);
     pmm->ptMaxSize.y = GetSystemMetrics(SM_CYSCREEN)-2;
     return 0;

突然,我底部有一个10像素的间隙,右侧有一个新的8 像素间隙! 这似乎是 Windows 10 的事情,因为这在 Win7 中从未发生过。 我也试过SystemParametersInfo ,调用SPI_GETWORKAREA (而不是GetSystemMetrics() )。 这会产生相同的结果。

据我所知,问题WM_GETMINMAXINFO 相反,我需要将命令放入我的代码中,以将任务栏保持在顶部。 我已经搜索了 Windows 样式。 但是,我在那里找不到任何帮助。

有谁知道如何解决这个关键问题。

好吧,我在一个最不可能的地方找到了答案。 有人试图用 Python 代码操纵边界。 从他们的尝试中,我能够为无边界窗口设计一个 C++ 解决方案。 结果如下:

首先,我用WS_OVERLAPPEDWINDOW | WS_VISIBLE创建了一个窗口WS_OVERLAPPEDWINDOW | WS_VISIBLE WS_OVERLAPPEDWINDOW | WS_VISIBLE样式,启用所有 Windows 功能。 然后我使用以下代码处理WM_NCCALCSIZE消息:

case WM_NCCALCSIZE:
 {
    WINDOWPLACEMENT      wp;
    LPNCCALCSIZE_PARAMS  szr;

    wp.length = sizeof(WINDOWPLACEMENT);
    GetWindowPlacement(hWnd, &wp);
    szr = LPNCCALCSIZE_PARAMS(lParam);
    if (wp.showCmd == SW_SHOWMAXIMIZED)  szr->rgrc[0].bottom -= (WFRAME+2);
    return 0;
 }

在上面的代码中,我从第一个矩形的底部减去边框的宽度。 添加了额外的 2 个像素,以暴露自动隐藏的任务栏。 最大化的窗口现在正常运行,允许访问任务栏。

为了在这个无边框窗口中创建我的虚拟客户区,我在WM_CREATEWM_SIZE处理程序中添加了这段代码:

WINDOWPLACEMENT  wp;
GetWindowRect(hWnd, &rWnd);
GetClientRect(hWnd, &rClient);
wp.length = sizeof(WINDOWPLACEMENT);
GetWindowPlacement(hWnd, &wp);
rClient.left += WFRAME;  rClient.right -= WFRAME;    rClient.top += (WFRAME+cyMenu);
if (wp.showCmd == SW_SHOWNORMAL)  rClient.bottom -= WFRAME;
cxClient = rClient.right-rClient.left;
cyClient = rClient.bottom-rClient.top;

元素cyMenu是为我的虚拟菜单栏保留的空间。 它将包含一系列按钮,模拟菜单和最小/最大/关闭按钮。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM