首先,在CreateWindow函数里面填上希望的窗口客户区尺寸,例:hWnd = CreateWindow(szWindowClass, szTitle, WS_SYSMENU | WS_MINIMIZEBOX, CW_USEDEFAULT, 0, DEFAULT_WIDTH, DEFAULT_HIGHT, NULL, NULL, hInstance, NULL);
DEFAULT_WIDTH,为窗口客户区宽度,DEFAULT_HIGHT为客户区高度。再编写一下函数,用来调整窗体大小。
void SetWindowSize(HWND hWnd)
{
RECT WindowRect;
RECT ClientRect;
GetWindowRect(hWnd, &WindowRect);
GetClientRect(hWnd, &ClientRect);
WindowRect.right += (DEFAULT_WIDTH - ClientRect.right);
WindowRect.bottom += (DEFAULT_HIGHT - ClientRect.bottom);
MoveWindow(hWnd, WindowRect.left, WindowRect.top, WindowRect.right-WindowRect.left, WindowRect.bottom-WindowRect.top, true);
}
在创建窗体的的函数里设置窗口客户区大小主要是用作参考,这里设置的大小实际为窗体大小,其它参数自行配置。
因主题不同,所以程序的边框宽度不同,所以很难直接使用CreateWindow一次创建成功所需的窗体。
使用GetWindowRect获取到的WindowRect.left为窗体左上角距屏幕最左边的距离,WindowRect.top为窗体左上角距屏幕最上边的距离,WindowRect.right为窗体右下角距屏幕最左边的距离,WindowRect.bottom为窗体右下角距屏幕最上边的距离。
函数原型:BOOL MoveWindow( HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint );
参数hWnd指定了窗口的句柄
x指定了CWnd的左边的新位置。
y指定了CWnd的顶部的新位置。
nWidth指定了CWnd的新宽度。
nHeight指定了CWnd的新高度。
bRepaint指定了是否要重画CWnd。如果为TRUE,则CWnd象通常那样在OnPaint消息处理函数中接收到一条WM_PAINT消息。如果这个参数为FALSE,则不会发生任何类型的重画操作。这应用于客户区、非客户区(包括标题条和滚动条)和由于CWnd移动而露出的父窗口的任何部分。当这个参数为FALSE的时候,应用程序必须明确地使CWnd和父窗口中必须重画的部分无效或重画。