Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > CListBox. нужна ли прокрутка


Автор: _hunter 8.11.2006, 20:57
Добрый день...

Подскажите как определить нужна ли в CListBox полоса прокрутки (или как у него узнать (сам бокс это знает -- если прокрутка не нужна он ее серой делает)).
И как эту полосу спрятать (точнее в обработчике какого сообщения выполнять вышеупомянутую проверку)?
Не хочется перекрывать функции добавления/удаления и в них высоты итемов считать...

С уважением...

Автор: Earnest 9.11.2006, 09:18
1) Посмотри функции GetScrollInfo
2) Чтобы листбокс не имел скрол-бара, когда места достаточно, нужно убрать флаг LVS_DISABLENOSCROLL (как раз этот флаг заставляет скроллбар оставаться и дизэблиться).

Автор: _hunter 9.11.2006, 12:00
второе не помогло...
написал:
Код

void CHScrollListBox::PreSubclassWindow() 
{
    CListBox::PreSubclassWindow();

    ModifyStyle(LBS_DISABLENOSCROLL, 0, 0);

    ModifyStyle(WS_HSCROLL, 0, 0);
}

но вертикальная полоса всеравно просто дисблится...

Автор: Earnest 10.11.2006, 08:50
А если убить стиль прямо в ресурсах? (Горизонтальный скролл тоже).
Кроме того, при вызове ModifyStyle, последний параметр ставь SWP_FRAMECHANGED. И можно одинм вызовом:
Код

ModifyStyle (LVS_DISABLENOSCROLL | WS_HSCROLL, 0, SWP_FRAMECHANGED);

Автор: _hunter 10.11.2006, 12:06
из ресурсов убрал -- помогло. но в чем разница?..

Автор: Earnest 10.11.2006, 14:06
Думаю, в отсутствии флага SWP_FRAMECHANGED в вызове ModifyStyle: этот флаг заставляет окно пересчитать (и перерисовать) не-клиентскую область. А без него - это просто SetWindowLong.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)