Поделиться через


Панели состояния (элементы управления Windows)

Строка состояния — это горизонтальное окно в нижней части родительского окна, в котором приложение может отображать различные типы сведений о состоянии. Строка состояния может быть разделена на части для отображения нескольких типов сведений. На следующем снимке экрана показана строка состояния в приложении Microsoft Windows Paint. В этом случае строка состояния содержит текст "Для справки, щелкните разделы справки в меню справки". Строка состояния — это область в нижней части окна, содержащая текст справки и сведения о координатах.

screen shot of the paint application, with a status bar that contains hints about online help

Этот раздел содержит следующие темы.

Типы и стили

Положение строки состояния по умолчанию находится в нижней части родительского окна, но можно указать стиль 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 Изменяет размер строки состояния на основе текущей ширины клиентской области родительского окна и высоты текущего шрифта строки состояния.