win32调整客户区大小
**********************创建特定大小客户区的窗口**************************************
转自:win32 创建指定客户区大小的窗口 | linux畅想 (lchx.me)
RECT rect; rect.left = 0; rect.top = 0; rect.right = w; rect.bottom = h; AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, false); CreateWindow(TEXT(""),TEXT(""),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,rect.right - rect.left, rect.bottom - rect.top, NULL, NULL, hInstance, NULL);
******************************让窗口不可调节大小**************************************
转自:win32 创建指定客户区大小的窗口 | linux畅想 (lchx.me)
#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, CW_USEDEFAULT, rect.right - rect.left, rect.bottom - rect.top, NULL, NULL, hInstance, NULL);
*************************在创建窗口后改变客户区的大小*******************************
转自:设置窗口客户区大小的方法 - 女孩不哭 - 博客园 (cnblogs.com)
0) 变量定义
RECT rcWindow; -> 整个窗口的大小
RECT rcClient; -> 客户区大小
int borderWidth,borderHeight; ->非客户大小
1) 通过 GetWindowRect 取得整个窗口的大小
GetWindowRect(hWnd,&rcWindow);
2) 通过 GetClientRect 取得客户矩形的大小
GetClientRect(hWnd,&rcClient);
3) 由以上两者相减得到非客户的大小
borderWidth = (rcWindow.right-rcWindow.left)
-(rcClient.right-rcClient.left);
borderHeight = (rcWindow.bottom-rcWindow.top)
-(rcClient.bottom-rcClient.top);
4) 使用 SetWindowPos/MoveWindow 重新设置窗口大小
SetWindowPos(hWnd,0,0,0,boderWidth+新客户区宽度,
boderHeight+新客户区高度,SWP_NOMOVE|SWP_NOZORDER);