客户区重设问题
此内容仅用于方便客户区布局CreateWindow函数参数设置的大小为窗口宽度 包括客户区与非客户区
当窗口大小减去非客户区所占区域的结果不为偶数倍时 为了方便布局以及画面对称美观 应重设客户区大小
可用 MoveWindow和SetWindowPos两个函数重设窗口大小
void ChangeWinRect(HWND hwnd){
RECT WinRect,ClientRect;
int iHighGap,iWidthGap;
GetWindowRect(hwnd,&WinRect);
GetClientRect(hwnd,&ClientRect);
iHighGap = (WinRect.bottom - WinRect.top) - (ClientRect.bottom - ClientRect.top);
iWidthGap = (WinRect.right - WinRect.left) - (ClientRect.right - ClientRect.left);
ClientRect.right += (iWidthGap * 2);
ClientRect.bottom += (iHighGap * 2);
MoveWindow(hwnd,WinRect.left,WinRect.top,
ClientRect.right,ClientRect.bottom,FALSE);
}
以此为例
重设时应注意函数参数也是设置窗口大小并非客户区大小
故ClientRect.right和ClientRect.bottom应加上非客户区大小的两倍
或直接以 WinRect.right +iWidthGap和WInRect.buttom + iHighGap作为设置窗口大小的参数
否则窗口将保持原型或达不到预期结果
为避免使用时程序时不必要的误解
此函数应放在CreateWindow所发出的消息内执行 个人认为放在WM_CREATE消息内较好
应该放在WM_SIZE里 仰望天上的光 发表于 2014-8-18 20:17
应该放在WM_SIZE里
放在哪得看情况
我这里只是想显示之前就改变大小 所以放在CREATE 谢谢分享 学了不少东西,感谢 感谢楼主分享 {:7_146:}
页:
[1]