【发布时间】:2017-09-18 11:32:41
【问题描述】:
我想在主窗口创建后调整客户区的高度。我在创建它时使用CW_USEDEFAULT,我只是想将其调整到最接近的高度,该高度可以被一个固定的数字整除。我已经尝试处理WM_SIZE,但它似乎不像我想要的那样工作,而且我不确定SetWindowPos 是调整client 区域大小的适当方法。 . ?
LRESULT CALLBACK mainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_SIZE:
if (HIWORD(lParam) % 15) {
SetWindowPos(hWnd, NULL, 0, 0, LOWORD(lParam), HIWORD(lParam) / 15 * 15, SWP_NOMOVE);
}
return DefWindowProc(hWnd, message, wParam, lParam);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
break;
}
return 0;
}
由于某种原因,结果是一个零高度的客户区:
我尝试过的另外几种方法:
- 更新
RECTtop / bottom 成员时WM_NCCALCSIZE已发送。 - 在
WM_CREATE时更改CREATESTRUCT的cy成员 消息已发送。
有什么想法吗?
【问题讨论】:
-
需要调用
return DefWindowProc(hWnd, message, wParam, lParam)而不是return 0 -
@RbMm 得到相同的结果..
-
使用
SetWindowPos -
@PaulOgilvie 这就是我目前正在做的事情?
-
对我来说听起来像是 XY 问题。如果您想调整窗口大小以使客户区具有特定大小,请在构建窗口之前调用AdjustWindowRectEx。
标签: c user-interface winapi