winapi - MFC (C++):如何按设计设置 ListBox 的宽度?
问题描述
我正在关注此链接以动态设置 ListBox 的高度(如何调整 Win32 列表框的大小以适合其内容?)。但是,同时我想保持宽度固定(即最初在 rc 中指定的值)。但我不知道如何检索值并设置宽度。
解决方案
我想要实现的是根据项目数调整 ListBox 的高度,同时保持设计中指定的宽度固定。我非常关注这里的解决方案(如何调整 Win32 列表框的大小以适应其内容?)。它改变了高度,但也修改了宽度,这是不可接受的。
以下行通过考虑修复问题的滚动条宽度来调整宽度。
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);
推荐阅读
- javascript - Vue 不是来自 .js
- python - Data getting repeated when fetched from the database while trying to display in bootstrap modals in Django
- excel - Download an Excel file from the latest email in Outlook inbox using Excel VBA
- java - 通过 MessageConverters 对 Instant 进行 Spring Boot 序列化
- excel - 为什么这个 IF/ELSE 不一致?
- matlab - Matlab中使用fft进行卷积的执行时间
- angular - 角度订阅没有等待足够长的时间
- html - 用剃刀设置背景颜色
- groovy - jmeter - 如何组合多个变量数组?
- ios - 如何配置 Travis-CI 为 iOS 应用程序使用正确的时区?