CreateWindow(TEXT(""), TEXT(""), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
上面是创建一个窗口,位置和大小都有系统随意指定。
一般来说,如果写一个win32窗口,想指定其大小,往往第一感觉应该是客户区大小才对,因为鼠标等消息返回的坐标是客户区坐上叫为原点的。但事实却是:创建的窗口大小是包括标题栏等表框的,这让很多想要有指定客户区大小的初学者苦恼了(^_^包括我)。
下面介绍一种比较方便的方法来创建一个指定客户区大小的窗口:
RECT rect; rect.right = w; rect.bottom = h; rect.left = 0; rect.top = 0; AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, false); CreateWindow(TEXT(""), TEXT(""), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, rect.right - rect.left, rect.bottom - rect.top, NULL, NULL, hInstance, NULL);
AdjustWindowRect的三个参数分别是客户区区域、窗口风格、是否包含菜单(窗口风格要和将要创建的窗口风格一致)。
该函数将调整rect的位置及大小,使其能创建出客户区大小为w、h的窗口。
有指定客户区大小需求的人,往往也不希望窗口大小是可调节的,顺便再说一下如何让窗口不可调节大小:
#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | \ WS_CAPTION | \ WS_SYSMENU | \ WS_THICKFRAME | \ WS_MINIMIZEBOX | \ WS_MAXIMIZEBOX)
上面是WinUser.h头文件中关于 WS_OVERLAPPEDWINDOW 的宏定义。
只要把 WS_THICKFRAME 和 WS_MAXIMIZEBOX 风格去掉就行了:
AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW^WS_THICKFRAME^WS_MAXIMIZEBOX, false); CreateWindow(TEXT(""), TEXT(""), WS_OVERLAPPEDWINDOW^WS_THICKFRAME^WS_MAXIMIZEBOX, CW_USEDEFAULT, 0, rect.right - rect.left, rect.bottom - rect.top, NULL, NULL, hInstance, NULL);
这样就可以创建一个指定客户区大小为w、h的窗口了
0 条评论。