Плоские полосы прокрутки
Microsoft Internet Explorer 4.0 представила новую визуальную технологию под названием плоские полосы прокрутки. Функционально плоские полосы прокрутки ведут себя так же, как стандартные полосы прокрутки. Разница заключается в том, что их внешний вид можно настроить в большей степени, чем стандартные полосы прокрутки.
На следующем рисунке показано окно, содержащее плоскую полосу прокрутки.
Примечание
Плоские полосы прокрутки поддерживаются 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, можно задать тип полосы прокрутки, которую вы хотите использовать. Доступны три стиля.
Стиль | Описание |
---|---|
FSB_ENCARTA_MODE | Отображается стандартная плоская полоса прокрутки. Когда указатель мыши перемещается над кнопкой направления или большим пальцем, эта часть полосы прокрутки будет отображаться в трехмерном формате. |
FSB_FLAT_MODE | Отображается стандартная плоская полоса прокрутки. Когда указатель мыши перемещается над кнопкой направления или большим пальцем, эта часть полосы прокрутки будет отображаться в инвертированных цветах. |
FSB_REGULAR_MODE | Отображается обычная полоса прокрутки с нефластикой. Специальные визуальные эффекты не будут применяться. |
Удаление плоских полос прокрутки
Если вы хотите удалить плоские полосы прокрутки из окна, вызовите функцию UninitializeFlatSB , передав дескриптор в окно. Эта функция удаляет только плоские полосы прокрутки из окна во время выполнения. Не нужно вызывать эту функцию при уничтожении окна.