Плоские полосы прокрутки

Microsoft Internet Обозреватель 4.0 представила новую визуальную технологию под названием плоские полосы прокрутки. Функционально плоские полосы прокрутки ведут себя так же, как стандартные полосы прокрутки. Разница заключается в том, что вы можете настроить внешний вид на большую степень, чем стандартные полосы прокрутки.

На следующем рисунке показано окно, содержащее плоскую полосу прокрутки.

screen shot of a window that contains a flat scroll bar

Примечание.

Плоские полосы прокрутки поддерживаются Comctl32.dll версии 4.71–5.82. Comctl32.dll версии 6.00 и более поздних версий не поддерживают плоские полосы прокрутки.

 

Использование неструктурированных полос прокрутки

В этом разделе описывается реализация плоских полос прокрутки в приложении.

Перед началом

Чтобы использовать функции плоской полосы прокрутки, необходимо включить Commctrl.h в исходные файлы и связаться с Comctl32.lib.

Добавление плоских полос прокрутки в окно

Чтобы добавить плоские полосы прокрутки в окно, вызовите InitializeFlatSB, передав дескриптор в окно. Вместо использования стандартных функций полосы прокрутки для управления полосами прокрутки необходимо использовать эквивалентную функцию FlatSB_XXX. Существуют функции плоской полосы прокрутки для задания и получения сведений о прокрутке, диапазона и положения. Если плоские полосы прокрутки не были инициализированы для окна, API плоской полосы прокрутки отложит соответствующие стандартные функции, если они используются. Это позволяет включать и отключать плоские полосы прокрутки без необходимости писать условный код.

Так как приложение может задать пользовательские метрики для его плоских полос прокрутки, они не обновляются автоматически при изменении системных метрик. При изменении метрик полосы прокрутки система передает сообщение WM_SETTINGCHANGE со значением wParam, равным SPI_SETNONCLIENTMETRICS. Чтобы обновить плоские полосы прокрутки до новых системных метрик, приложения должны обрабатывать это сообщение и изменять свойства, зависящие от метрик, плоскую полосу прокрутки явным образом.

Чтобы обновить свойства полосы прокрутки, используйте FlatSB_SetScrollProp. Следующий фрагмент кода изменяет метрики метрики плоской полосы прокрутки на текущие системные значения.

void FlatSB_UpdateMetrics(HWND hWnd)
{
FlatSB_SetScrollProp(hWnd, WSB_PROP_CXVSCROLL, GetSystemMetrics(SM_CXVSCROLL), FALSE);
FlatSB_SetScrollProp(hWnd, WSB_PROP_CXHSCROLL, GetSystemMetrics(SM_CXHSCROLL), FALSE);
FlatSB_SetScrollProp(hWnd, WSB_PROP_CYVSCROLL, GetSystemMetrics(SM_CYVSCROLL), FALSE);
FlatSB_SetScrollProp(hWnd, WSB_PROP_CYHSCROLL, GetSystemMetrics(SM_CYHSCROLL), FALSE);
FlatSB_SetScrollProp(hWnd, WSB_PROP_CXHTHUMB, GetSystemMetrics(SM_CXHTHUMB), FALSE);
FlatSB_SetScrollProp(hWnd, WSB_PROP_CYVTHUMB, GetSystemMetrics(SM_CYVTHUMB), TRUE);
}

Повышение плоских полос прокрутки

FlatSB_SetScrollProp позволяет изменять плоские полосы прокрутки, чтобы настроить внешний вид окна. Для вертикальных полос прокрутки можно изменить ширину полосы и высоту стрелков направления. Для горизонтальных полос прокрутки можно изменить высоту полосы и ширину стрелки направления. Вы также можете изменить цвет фона как горизонтальных, так и вертикальных полос прокрутки.

FlatSB_SetScrollProp также позволяет настроить отображение плоских полос прокрутки. Изменив свойства WSB_PROP_VSTYLE и WSB_PROP_HSTYLE, можно задать тип полосы прокрутки, которую вы хотите использовать. Доступны три стиля.

Стиль Description
FSB_ENCARTA_MODE Отображается стандартная плоская полоса прокрутки. Когда мышь перемещается по кнопке направления или пальцем, эта часть полосы прокрутки будет отображаться в 3-D.
FSB_FLAT_MODE Отображается стандартная плоская полоса прокрутки. Когда мышь перемещается по кнопке направления или пальцем, эта часть полосы прокрутки будет отображаться в инвертированных цветах.
FSB_REGULAR_MODE Отображается обычная полоса прокрутки без пробела. Не будут применяться специальные визуальные эффекты.

 

Удаление неструктурированных полос прокрутки

Если вы хотите удалить плоские полосы прокрутки из окна, вызовите функцию UninitializeFlatSB , передав дескриптор в окно. Эта функция удаляет только плоские полосы прокрутки из окна во время выполнения. При уничтожении окна не требуется вызывать эту функцию.