MFC(C++):如何按设计设置ListBox的宽度?
MFC (C++): how to set the width of ListBox as designed?
我按照这个 link 来动态设置 ListBox 的高度 ()。但是,同时我想保持宽度固定(即 rc 中最初指定的值)。但我不知道如何检索值和设置宽度。
我想实现的是根据项目的数量调整ListBox的高度,同时保持设计中指定的宽度固定。我几乎遵循这里的解决方案 ()。它改变了高度但也修改了宽度,这是不可接受的。
以下行通过考虑修复问题的滚动条宽度来调整宽度。
rc.right += (GetSystemMetrics(SM_CXEDGE) * 2);
+ if ((list.GetStyle() & WS_VSCROLL) != 0)
+ rc.right += GetSystemMetrics(SM_CXVSCROLL);
或者按照评论中的建议,
- rc.right += (GetSystemMetrics(SM_CXEDGE) * 2);
rc.bottom += GetSystemMetrics(SM_CXEDGE) * 2;
+ RECT window_rc;
+ ::GetWindowRect(hWndLB, &window_rc);
// resize
- ::SetWindowPos(hWndLB, 0, 0, 0, rc.right, rc.bottom, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
+ ::SetWindowPos(hWndLB, 0, 0, 0, window_rc.right - window_rc.left, rc.bottom, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
我按照这个 link 来动态设置 ListBox 的高度 (
我想实现的是根据项目的数量调整ListBox的高度,同时保持设计中指定的宽度固定。我几乎遵循这里的解决方案 (
以下行通过考虑修复问题的滚动条宽度来调整宽度。
rc.right += (GetSystemMetrics(SM_CXEDGE) * 2);
+ if ((list.GetStyle() & WS_VSCROLL) != 0)
+ rc.right += GetSystemMetrics(SM_CXVSCROLL);
或者按照评论中的建议,
- rc.right += (GetSystemMetrics(SM_CXEDGE) * 2);
rc.bottom += GetSystemMetrics(SM_CXEDGE) * 2;
+ RECT window_rc;
+ ::GetWindowRect(hWndLB, &window_rc);
// resize
- ::SetWindowPos(hWndLB, 0, 0, 0, rc.right, rc.bottom, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
+ ::SetWindowPos(hWndLB, 0, 0, 0, window_rc.right - window_rc.left, rc.bottom, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);