MF C (C ++): как установить ширину ListBox, как задумано? - PullRequest
0 голосов
/ 05 февраля 2020

Я перехожу по этой ссылке, чтобы динамически установить высоту ListBox ( Как изменить размер списка Win32 для соответствия его содержимому? ). Однако в то же время я хочу сохранить фиксированную ширину (то есть значения, которые изначально были указаны в r c). Но я не знаю, как получить значение и установить ширину.

1 Ответ

0 голосов
/ 06 февраля 2020

Чего я хочу добиться, так это отрегулировать высоту 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);

...