
- •Порядок обработки сообщений, цикл обработки сообщений
- •Атрибуты контекста.
- •Порядок обработки сообщений, цикл обработки сообщений
- •Аппаратные сообщения
- •Символьные сообщения
- •Дочерние окна
- •Класс полос прокрутки
- •Класс редактирования
- •25 Класс окна списка
- •Способы хранения данных программы
- •Общие сведения о файле ресурсов
- •Меню и сообщения
- •Многозадачность и многопоточность
- •Вытесняющая многозадачность
- •Использование функции Sleep
- •36 Критические разделы
- •37 Использование событий
- •38 Многооконный интерфейс. Элементы mdi. Windows и mdi
- •39 Динамически подключаемые библиотеки. Типы связывания
Символьные сообщения
Функция TranslateMessage является своеобразным диспетчером сообщений. Если очередное сообщение, выбранное функцией GetMessage из очереди сообщений, является символьным, то TranslateMessage ставит в очередь сообщений к приложению еще одно сообщение – символьное. При этом, аппаратное сообщение продолжает свой путь в цикле обработки сообщений и попадает в оконную процедуру окна приложения через функцию DispatchMessage .
Сообщения WM _ CHAR являются следствием сообщений WM _ KEYDOWN . В большинстве приложений предпочтительным является использование именно символьных сообщений. Параметр lParam , в случае сообщения WM _ CHAR , является таким же, как и соответствующий параметр в аппаратном сообщении, а wParam – определяет код символа ASCII .
Символьные сообщения приходят в программу не только, когда пользователь нажимает клавиши с буквами
Дочерние окна
Однако, согласно объектно-ориентированному подходу к программированию, более красивый и удобный путь – выделить характеристики и функции поведения этого объекта в некоторую логическую структуру, которая сама будет обрабатывать предназначенные ей сообщения, будет сама себя рисовать и т.п. Существует возможность создания таких объектов, а также имеется некоторое число предопределенных в Windows объектов. Они получили название "Дочерние окна управления".
Такое название они получили потому, что неразрывно связаны с теми окнами, на которых они находятся и их поведение во многом определяется поведением главного или родительского окна. Положение дочернего окно четко определено в пределах родительского (его можно менять, но не выходя за рамки родительского окна), перемещение родительского окна происходит вместе с расположенным в нем дочерним. Оконная процедура родительского окна посылает сообщения дочерним окнам, а дочерние окна посылают сообщения обратно оконной процедуре.
Класс кнопок
Всем кнопкам, которые пользователь видит на экране, соответствует один предопределенный класс окна " button ". Windows поддерживает 10 стандартных стилией кнопок. Любую из них можно создать при помощи вызова функции CreateWindow с определением следующих параметров:
Имя класса " button "
Текст окна " Моя кнопка"
Стиль окна WS_CHILD|WS_VISIBLE|BS_<style>
Положение по х 50
Положение по х 50
Ширина 60
Высота 30
Родительское окно hwnd
Идентификатор дочернего окна ( HMENU ) i
Описатель программы hInstance
Дополнительный параметр NULL
Нажимаемая кнопка
является самой широко используемой. Она представляет собой прямоугольник, внутри которого задан текст. При нажатии на кнопку (клик мыши на поверхности кнопки), она перерисовывается в виде нажатого состояния, а при отпускании мыши – переходит в первоначальное состояние
Флажки
Флажки представляют собой маленькие квадратные окна с текстом; текст обычно размещается справа от флажка. Флажки, как правило, действуют как двухпозиционные переключатели: один щелчок вызывает появление контрольной метки (птички); другой щелчок приводит к исчезновению контрольной метки. Часть флажки объединяют в группы, чтобы сконцентрироваться на опциях какого-то одного объекта. В последнем случае состояния одних из кнопок могут зависеть от состояний других. Существует еще два типа флажков на три состояния - BS _3 STATE , BS _ AUTO 3 STATE . Их поведение аналогично описанным флажкам, но они могут иметь третье состояние – квадрат метки закрашивается серым цветом и к возможным состояниям 0 и 1 добавляется состояние 2.
Переключатели
Переключатели похожи на флажки, но форма метки у них не квадратная, а круглая. Жирная точка внутри кружка показывает, что переключатель помечен. Переключатель имеет стиль окна BS _ RADIOBUTTON , BS _ AUTORADIOBUTTON , но последний используется только в окнах диалога. В окнах диалога группы переключателей, как правило, используются для идентификации нескольких взаимоисключающих опций. В отличие от флажков, его состояние не изменится. Взаимодействия переключателей с родительским окном аналогично флажкам.
Кнопки, определяемые пользователем
Данный стиль кнопки применяется тогда, когда есть необходимость (или желание) управлять внешним обликом кнопки, а логику обработки клавиатуры и мыши можно оставить самой кнопке. Сообщения родительскому окну такие же, как и у всех кнопок, однако, при необходимости перерисовки кнопки, она посылает родительскому окну сообщение WM _ DRAWITEM c указателем на структуру типа DRAWITEMSTRUCT , используемую при рисовании кнопки, в параметре lParam .
Класс статических дочерних окон
Статическое окно имеет предопределенный класс с именем " static ". Данное окно не получает сообщений от мыши и клавиатуры: оно как бы прозрачно для сообщений и сообщения, адресованные статическому окну переправляются родительскому окну (расположенному под ним). Существует 12 стилей статического окна.
Три из них – ( SS _ LEFT , SS _ RIGHT , SS _ CENTER ) позволяют выводить текст, заданный в поле текста окна соответственно с выравниванием влево, вправо, по центру. Фактически, окно выводит заданный текст с помощью функции DrawText . Текст окна может быть изменен при помощи функции SetWindowText .