首页 > 解决方案 > MFC (C++):如何按设计设置 ListBox 的宽度?

问题描述

我正在关注此链接以动态设置 ListBox 的高度(如何调整 Win32 列表框的大小以适合其内容?)。但是,同时我想保持宽度固定(即最初在 rc 中指定的值)。但我不知道如何检索值并设置宽度。

标签: winapimfclistbox

解决方案


我想要实现的是根据项目数调整 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);


推荐阅读