繁体   English   中英

如何使用 WinAPI 调整窗口大小

[英]How to resize window using WinAPI

我想使用 WinAPI 调整窗口大小。 我使用 WinAPI 函数:

SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);

调整窗口大小,但不重绘其内容。 如果我使用鼠标调整此窗口的大小,内容将重绘。 如何使用带有内容重绘的 WinAPI 调整窗口大小?

确保您没有在uFlags参数中指定SWP_NOREDRAW 如果未设置且窗口仍未重绘,请在调用SetWindowPos后调用UpdateWindow

默认情况下,窗口在调整大小时不会重绘(更准确地说 - 不会失效)。 如果缩小窗口 - 它根本不会收到WM_PAINT消息。 如果放大它 - 更新区域将只包括添加的区域。

如果窗口的内容取决于其大小 - 窗口本身必须在处理WM_SIZE消息时决定使自身无效(通过调用InvalidateRect / InvalidateRgn )。

不过,您可以随时通过调用InvalidateRect / InvalidateRgn使任何窗口InvalidateRgn

在窗口过程中编写此代码:

代码:

case WM_SIZE:
    {
        HWND groupControl;
        RECT rcClient;//screen size

        GetClientRect(hwnd, &rcClient);

        groupControl = GetDlgItem(hwnd,Id);//get the id of control
        SetWindowPos(groupControl, NULL, rcClient.right-50, 
         rcClient.bottom-50, 20, 20,
          SWP_NOZORDER);//set a coordinate of control and 
       height and width.
    }

暂无
暂无

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

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