Получение ширины элемента управления Win32 TreeView - PullRequest
1 голос
/ 24 февраля 2011

Элемент управления Win32 TreeView не имеет встроенного сообщения / макроса, чтобы получить его (прокручиваемую) ширину, например, если вы хотите установить ширину TreeView, чтобы не требовалась полоса прокрутки.

Как это можно сделать?

1 Ответ

1 голос
/ 24 февраля 2011

Вот функция C, чтобы сделать это:

int TreeView_GetWidth(HWND hTreeWnd)
{
    SCROLLINFO scrollInfo;
    SCROLLBARINFO scrollBarInfo;

    scrollInfo.cbSize = sizeof(scrollInfo);
    scrollInfo.fMask = SIF_RANGE;

    scrollBarInfo.cbSize = sizeof(scrollBarInfo);

    // To find the whole (scrollable) width of the tree control,
    // we determine the range of the scrollbar.
    // Unfortunately when a scrollbar isn't needed (and is invisible),
    // its range isn't zero (but rather 0 to 100),
    // so we need to specifically ignore it then.
    if (GetScrollInfo(hTreeWnd, SB_HORZ, &scrollInfo) &&
        GetScrollBarInfo(hTreeWnd, OBJID_HSCROLL, &scrollBarInfo))
    {
        // Only if the scrollbar is displayed
        if ((scrollBarInfo.rgstate[0] & STATE_SYSTEM_INVISIBLE) == 0)
        {
            int scrollBarWidth = GetSystemMetrics(SM_CXVSCROLL);
            // This is a hardcoded value to accomodate some extra pixels.
            // If you can find a cleaner way to account for them (e.g. through
            // some extra calls to GetSystemMetrics), please do so.
            // (Maybe less than 10 is also enough.)
            const int extra = 10;

            return (scrollInfo.nMax - scrollInfo.nMin) + scrollBarWidth + extra;
        }
    }

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...