AdjustWindowRectExForDpi 并将 RECT 归零

问题描述 投票:0回答:1

GLFW 处理

WM_GETMINMAXINFO
这样:

case WM_GETMINMAXINFO:
{
    RECT frame = {0};
    MINMAXINFO* mmi = (MINMAXINFO*) lParam;
    const DWORD style = getWindowStyle(window);
    const DWORD exStyle = getWindowExStyle(window);

    if (window->monitor)
        break;

    if (_glfwIsWindows10Version1607OrGreaterWin32())
    {
        AdjustWindowRectExForDpi(&frame, style, FALSE, exStyle,
                                 GetDpiForWindow(window->win32.handle));
    }
    else
        AdjustWindowRectEx(&frame, style, FALSE, exStyle);

    if (window->minwidth != GLFW_DONT_CARE &&
        window->minheight != GLFW_DONT_CARE)
    {
        mmi->ptMinTrackSize.x = window->minwidth + frame.right - frame.left;
        mmi->ptMinTrackSize.y = window->minheight + frame.bottom - frame.top;
    }

    if (window->maxwidth != GLFW_DONT_CARE &&
        window->maxheight != GLFW_DONT_CARE)
    {
        mmi->ptMaxTrackSize.x = window->maxwidth + frame.right - frame.left;
        mmi->ptMaxTrackSize.y = window->maxheight + frame.bottom - frame.top;
    }

    if (!window->decorated)
    {
        MONITORINFO mi;
        const HMONITOR mh = MonitorFromWindow(window->win32.handle,
                                              MONITOR_DEFAULTTONEAREST);

        ZeroMemory(&mi, sizeof(mi));
        mi.cbSize = sizeof(mi);
        GetMonitorInfoW(mh, &mi);

        mmi->ptMaxPosition.x = mi.rcWork.left - mi.rcMonitor.left;
        mmi->ptMaxPosition.y = mi.rcWork.top - mi.rcMonitor.top;
        mmi->ptMaxSize.x = mi.rcWork.right - mi.rcWork.left;
        mmi->ptMaxSize.y = mi.rcWork.bottom - mi.rcWork.top;
    }

    return 0;
}

归零的 RECT 帧被传递到

AdjustWindowRectExForDpi
。它是如何工作的 ?我认为传递给
AdjustWindowRectExForDpi
的 RECT 应该包含一些实际值。

winapi
1个回答
0
投票

为什么你认为归零的 RECT 不包含一些实际值?

根据AdjustWindowRectExForDpi,它将返回一个不包含客户区的RECT结构。

使用 NotificationIcon 示例进行简单测试。

© www.soinside.com 2019 - 2024. All rights reserved.