如何使用WinAPI调整窗口大小

时间:2010-05-31 12:25:42

标签: c# windows winapi resize

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

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

调整窗口大小,但不重绘窗口内容。如果我使用鼠标调整此窗口的大小,则会重新绘制内容。如何使用带内容重绘的WinAPI调整窗口大小?

3 个答案:

答案 0 :(得分:4)

确保未在uFlags参数中指定SWP_NOREDRAW。如果没有设置并且您仍然遇到问题,请手动调用UpdateWindow(hwnd)。

答案 1 :(得分:2)

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

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

尽管如此,您可以随时致电WM_SIZE / InvalidateRect来使任何窗口无效。

答案 2 :(得分:2)

在窗口过程中编写以下代码:

代码:

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.
    }