Панели состояния (элементы управления Windows)
Строка состояния — это горизонтальное окно в нижней части родительского окна, в котором приложение может отображать различные типы сведений о состоянии. Строка состояния может быть разделена на части для отображения нескольких типов сведений. На следующем снимке экрана показана строка состояния в приложении Microsoft Windows Paint. В этом случае строка состояния содержит текст "Для справки, щелкните разделы справки в меню справки". Строка состояния — это область в нижней части окна, содержащая текст справки и сведения о координатах.
Этот раздел содержит следующие темы.
- Типы и стили
- Размер и высота
- Панели состояния нескольких частей
- Операции текста строки состояния
- Строки состояния, нарисованные владельцем
- Панели состояния простого режима
- Обработка сообщений строки состояния по умолчанию
Типы и стили
Положение строки состояния по умолчанию находится в нижней части родительского окна, но можно указать стиль CCS_TOP , чтобы он отображалась в верхней части клиентской области родительского окна.
Вы можете указать стиль SBARS_SIZEGRIP , чтобы включить сцепление размера в правом конце строки состояния.
Примечание.
Объединение стилей CCS_TOP и SBARS_SIZEGRIP не рекомендуется, так как результирующий сцепление размера не работает.
Размер и высота
Процедура окна для строки состояния автоматически задает начальный размер и положение окна, игнорируя значения, указанные в функции CreateWindowEx. Ширина совпадает с шириной клиентской области родительского окна. Высота зависит от метрик шрифта, выбранного в настоящее время в контексте устройства строки состояния и ширине границ окна.
Процедура окна автоматически настраивает размер строки состояния при получении сообщения WM_SIZE. Как правило, при изменении размера родительского окна родитель отправляет WM_SIZE сообщение в строку состояния.
Приложение может задать минимальную высоту области рисования строки состояния, отправив окно SB_SETMINHEIGHT сообщение, указывая минимальную высоту в пикселях. Область рисования не включает границы окна. Минимальная высота полезна для рисования в строке состояния, нарисованной владельцем. Дополнительные сведения см. в разделах "Нарисованные владельцем" строки состояния далее в этой главе.
Вы извлекаете ширину границ строки состояния, отправив окно сообщение SB_GEТБ ORDERS. Сообщение содержит адрес массива с тремя элементами, который получает ширину.
Панели состояния нескольких частей
Строка состояния может содержать множество различных частей, каждая из которых отображает другую строку текста. Строка состояния делится на части, отправляя окно SB_SETPARTS сообщение, указывая количество частей для создания и адрес целочисленного массива. Массив содержит один элемент для каждой части, и каждый элемент задает клиентская координата правой границы части.
Строка состояния может содержать не более 256 частей, хотя приложения обычно используют гораздо меньше, чем это. Вы извлекаете количество частей в строке состояния, а также координату правого края каждой части, отправив окно SB_GETPARTS сообщение.
Операции текста строки состояния
Вы задаете текст любой части строки состояния, отправляя сообщение SB_SETTEXT , указывая отсчитываемый от нуля индекс части, адрес строки для рисования в части и метод рисования строки. Метод рисования определяет, имеет ли текст границу и, если это делает, стиль границы. Он также определяет, отвечает ли родительское окно за рисование текста. Дополнительные сведения см. в разделе "Нарисованные владельцем" строки состояния ниже.
По умолчанию текст выравнивается по левому краю в указанной части строки состояния. Вы можете внедрить символы вкладок (\ t) в текст в центр или выровнять его по правому краю. Текст справа от одного символа табуляции по центру, а текст справа от второго символа табуляции выравнивается по правому краю.
Чтобы получить текст из строки состояния, используйте SB_GETTEXTLENGTH и SB_GETTEXT сообщения.
Если приложение использует строку состояния, которая имеет только одну часть, можно использовать WM_SETTEXT, WM_GETTEXT и WM_GETTEXTLENGTH сообщения для выполнения текстовых операций. Эти сообщения имеют дело только с частью, которая имеет индекс нуля, что позволяет обрабатывать строку состояния так же, как статический текстовый элемент управления.
Чтобы отобразить строку состояния без создания строки состояния, используйте функцию DrawStatusText . Функция использует те же методы для рисования состояния, что и процедура окна для строки состояния, но она не автоматически задает размер и положение сведений о состоянии. При вызове функции необходимо указать размер и позицию сведений о состоянии, а также контекст устройства окна, в котором он будет вырисовывать.
Строки состояния, нарисованные владельцем
Можно определить отдельные части строки состояния, которые будут нарисованы владельцем. С помощью этого метода вы сможете управлять больше, чем в противном случае может быть превышен внешний вид части окна. Например, можно отобразить растровое изображение, а не текст или нарисовать текст с помощью другого шрифта.
Чтобы определить часть окна как рисуемую владельцем, отправьте сообщение SB_SETTEXT в строку состояния, указав часть и метод рисования SBT_OWNERDRAW. При указании SBT_OWNERDRAW параметр lParam является 32-разрядным значением, определяемым приложением при рисовании части. Например, можно указать дескриптор шрифта, дескриптор растрового изображения, адрес строки и т. д.
Если строке состояния нужно нарисовать часть, нарисованную владельцем, она отправляет сообщение WM_DRAWITEM в родительское окно. Параметр wParam сообщения — это дочерний идентификатор окна строки состояния, а параметр lParam — адрес структуры DRAWITEMSTRUCT . Родительское окно использует сведения в структуре для рисования части. Для нарисованной владельцем части строки состояния DRAWITEMSTRUCT содержит следующие сведения.
Элемент | Description |
---|---|
CtlType | Неопределенный; не используйте. |
CtlID | Идентификатор дочернего окна строки состояния. |
Itemid | Отсчитываемый от нуля индекс части. |
itemAction | Неопределенный; не используйте. |
ItemState | Неопределенный; не используйте. |
hwndItem | Дескриптор в строке состояния. |
Hdc | Обработка контекста устройства в строке состояния. |
rcItem | Координаты части окна, нарисованной. Координаты относятся к левому верхнему углу строки состояния. |
Itemdata | Определяемое приложением 32-разрядное значение, указанное в параметре lParam сообщения SB_SETTEXT. |
Панели состояния простого режима
Вы помещаете строку состояния в "простой режим", отправляя его SB_SIMPLE сообщение. В строке состояния простого режима отображается только одна часть. Если задан текст окна, окно является недействительным, но оно не будет перезабрано до следующей WM_PAINT. Ожидание сообщения уменьшает мерцание экрана, минимизируя количество перезавернутых окон. Простая строка состояния режима полезна для отображения текста справки для элементов меню, пока пользователь прокручивает меню.
Строка, отображаемая строкой состояния в простом режиме, сохраняется отдельно от строк, отображаемых в режиме nonsimple. Это означает, что окно можно поместить в простой режим, задать его текст и вернуться в режим nonsimple без изменения текста в режиме nonsimple.
При настройке текста строки состояния простого режима можно указать любой метод рисования, кроме SBT_OWNERDRAW. Строка состояния простого режима не поддерживает рисование владельца.
Обработка сообщений строки состояния по умолчанию
В этом разделе описываются сообщения, обрабатываемые процедурой окна для предопределенного класса STATUSCLASSNAME .
Message | Обработка по умолчанию |
---|---|
WM_CREATE | Инициализирует строку состояния. |
WM_DESTROY | Освобождает ресурсы, выделенные для строки состояния. |
WM_GETFONT | Возвращает дескриптор текущего шрифта, с помощью которого строка состояния рисует текст. |
WM_GETTEXT | Копирует текст из первой части строки состояния в буфер. Он возвращает 32-разрядное значение, указывающее длину текста в символах и метод, используемый для рисования текста. |
WM_GETTEXTLENGTH | Возвращает 32-разрядное значение, указывающее длину текста в первой части строки состояния и метод, используемый для рисования текста. |
WM_NCHITTEST | Возвращает значение H ТБ OTTOMRIGHT, если курсор мыши находится в сцеплении размера, что приводит к отображению курсора размера системы. Если курсор мыши не находится в сцеплении размера, строка состояния передает это сообщение функции DefWindowProc. |
WM_PAINT | Закрашивает недопустимый регион строки состояния. Если параметр wParam не имеет значения NULL, элемент управления предполагает, что значение является HDC и краской с помощью этого контекста устройства. |
WM_SETFONT | Выбирает дескриптор шрифта в контексте устройства для строки состояния. |
WM_SETTEXT | Копирует указанный текст в первую часть строки состояния, используя операцию рисования по умолчанию (указанную как ноль). При успешном выполнении или false возвращает значение TRUE. |
WM_SIZE | Изменяет размер строки состояния на основе текущей ширины клиентской области родительского окна и высоты текущего шрифта строки состояния. |