我想要使用WinAPI调整窗口大小。我使用WinAPI函数
SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);
调整窗口大小,但不重绘窗口内容。如果我使用鼠标调整此窗口的大小,则会重新绘制内容。如何使用带内容重绘的WinAPI调整窗口大小?
答案 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.
}