使用固定的顶部坐标创建可调整大小的 window

Create resizable window with fixed top coordinate

我想实现一个 window,它的顶部坐标始终是 X(为简单起见,假设为 0)。意思是,window 的顶部固定在屏幕顶部的 0 上。

我已经实现了 window,使用 SetWindowPos 设置了它的位置,但我正在努力维护它的顶部坐标值。

您可以创建一个没有标题栏的window,例如

CreateWindow(className, title, WS_THICKFRAME | WS_POPUP, ...)

然后覆盖 WM_NCHITTEST 以更改上下移动 window 的请求。

如果window有标题栏,例如:

CreateWindow(className, title, WS_OVERLAPPEDWINDOW, ...)

然后也为 WM_WINDOWPOSCHANGING 添加覆盖:

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {

    case WM_NCHITTEST:
    {
        LRESULT lresult = DefWindowProc(hwnd, msg, wParam, lParam);
        switch (lresult)
        {
        case HTTOP:      lresult = HTCLIENT; break;
        case HTTOPLEFT:  lresult = HTLEFT;   break;
        case HTTOPRIGHT: lresult = HTRIGHT;  break;
        }
        return lresult;
    }

    case WM_WINDOWPOSCHANGING:
    {
        WINDOWPOS* wndpos = (WINDOWPOS*)lParam;
        wndpos->y = 100;//choose a fixed position
        break;
    }

    ...
    }

    return DefWindowProc(hwnd, msg, wParam, lParam);
}