c++ - 创建具有固定顶部坐标的可调整大小的窗口

标签 c++ winapi window hwnd

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

我已经实现了窗口,使用 SetWindowPos 设置它的位置但我正在努力维持其最高坐标值。

最佳答案

你可以创建一个没有标题栏的窗口,例如

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

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

如果窗口有标题栏,例如:

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

关于c++ - 创建具有固定顶部坐标的可调整大小的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36455622/

相关文章:

javascript - 在 anchor 标记内调整 Window.Open 的大小

c++ - 为 C++ 配置 Eclipse Juno

c++ - 尝试在 Windows 10 中通过 cmake 在 Visual Studio Code 中使用 vcpkg 安装 SDL2

c++ - 为什么 "extern template"不能与 shared_ptr 一起使用?

c++ - OpenThread() 返回 NULL Win32

c++ - 如何更改子窗口在父窗口中的位置并显示工具栏?

python - 如何在 Windows 中用 python 创建服务?

c++ - 连接 boost::mpl::string

c++ - 更改按钮按下时的文本颜色 WIN32

c++ - 如何获取另一个应用程序的所有窗口的句柄