
- •Оглавление
- •1 Простейшее Win32 приложение
- •2 Функция WinMain
- •3 Оконный класс
- •4 Стили класса, стили окна
- •5 Создание экземпляра оконного класса
- •6 Динамические изменения свойств оконного класса
- •7 Обработка сообщений
- •8 Программирование клавиатуры
- •9 Коды oem, ansii, asci, виртуальные коды клавиш
- •10 Символьные сообщения
- •11 Обработка сообщений от мыши
- •12 Программирование таймера
- •13 Диалоговые окна
- •14 Структура шаблона диалога
- •14(А) Ресурсы диалога
- •15 Функции создания диалога
- •16 Взаимодействие между элементами управления
- •17 Сообщения, SendMessage, SendDlgItemMessage
- •18 Обработка сообщений от элементов диалога
- •19 Элемент «Слайдер» (Румянцев - Азбука программирования в Win32 api, c.148)
- •20 Элемент ProgressBar (Румянцев - Азбука программирования в Win32 api, c.156)
- •21 Bios (общие сведения)
- •22 Файлы (общие сведения)
- •23 Создание файла (Win32 api)
- •24 Операции с файлом (Win32 api)
- •25 Организация файлов
- •26 Файловые системы (общие сведения)
- •Создание файла.
- •Удаление файла.
- •28 Структура логического диска под fat12 (wfat)
- •29 Каталоги в fat12
- •30 Алгоритм определения расположения файлов на диске
- •31 Ф.С. Fat32 (отличительные особенности)
- •32 Изменение элементов системных объектов при выполнении copy
- •33 Ntfs (общие сведения)
- •34 Запись файла в mft
- •35 Метафайлы
- •36 Атрибуты записи файла
- •37 Изменение системных данных при выполнении copy
- •38 Изменение системных данных при выполнении del
- •39 Изменение системных данных при выполнении move
- •40 Процессы. Потоки. Общие сведения
- •41 Модель процесса
- •42 Контекст процесса
- •43 Дескриптор процесса
- •44 Создание процесса (общие сведения)
- •45 Окончание процесса (общие сведения)
- •46 Состояния процесса
- •47 Уровни планирования процессов
- •48 Диспетчеризация процессов
- •49 Класс приоритета процесса
- •50 Создание процесса (Win32 api)
- •51 Win32 Api. Управление процессами
- •52 Win32 Api. Окончание процесса
- •53 Среда процесса
- •54 Командная строка процесса
- •55 Наследование дочерними процессами ресурсов родителя
- •56 Список процессов
- •57 Время выполнения процесса
17 Сообщения, SendMessage, SendDlgItemMessage
В отличие от приложений для MS-DOS, приложения для Windows управляются событиями. В таких приложениях нет возможности вызывать функцию для получения ввода. Вместо этого эти приложения дожидаются, чтобы система самостоятельно передавала им входящую информацию.
Вводимые данные направляются системой для каждого окна отдельно. В этих целях каждое окно связано с функцией называемой ОКОННОЙ ПРОЦЕДУРОЙ. Если для какого-либо из окон есть какая-то входящая информация, то система запускает (вызывает) соответствующую оконную процедуру, передавая ей введенную информацию. Оконная процедура должна обработать полученную информацию и вернуть управление обратно системе.
Оконные сообщения
Система отправляет входящие данные оконной процедуре в виде СООБЩЕНИЙ. Эти сообщения могут генерироваться, как и системой, так и самими приложениями. Система генерирует сообщение при каждом событии ввода, например при наборе текста пользователем на клавиатуре, перемещении мыши или щелчке клавишей мыши по элементу управления (например, полосе прокрутки). Так же система генерирует сообщения как реакцию на происходящие в ней изменения, касающиеся приложения, таких как смена системного шрифта или изменения размеров одного из окон приложения. Приложение может генерировать сообщения для своих окон или для передачи данных окнам других приложений.
Система передает сообщение оконной процедуре в виде набора из четырех параметров: описатель окна, идентификатор сообщения и двух значений называемых ПАРАМЕТРАМИ СООБЩЕНИЯ. Описатель окна используется для определения, какому из окон приложения предназначается сообщение, и система по нему определяет нужную оконную процедуру.
Идентификатор сообщения это символическая константа, которая определяет назначение сообщения. Оконная процедура использует его для определения того, как обработать поступившее сообщение. Например, идентификатор сообщения WM_PAINT, говорит оконной процедуре, что клиентская область ее окна была изменена и требует перерисовки.
Параметры сообщения содержат данные или указатели на данные, которые могут понадобиться оконной процедуре для обработки поступившего сообщения. Эти значения и их смысл зависят от конкретного сообщения. Если в сообщении не используются параметры, то они обычно устанавливаются в NULL. Оконная процедура должна проверять идентификатор сообщения, для того чтобы определить, что ей делать с параметрами сообщения.
Системные сообщения
Система высылает системные сообщения для установки связи с приложением. Эти сообщения используются для контроля над приложением, предоставления ему входящих данных и другой информации. Приложение, в свою очередь, тоже может генерировать системные сообщения. В основном приложения используют эти сообщения для управления окнами, созданных на основе предопределенных классов.
Каждое системное сообщение имеет уникальный идентификатор и соответствующую ему символическую константу, которые определяют назначение сообщения. Например, символическая константа WM_PAINT является просьбой на перерисовку содержимого окна.
Префикс символической константы указывает на категорию, к которой принадлежит сообщение. Например:
BM_ элемент управления кнопка
CB_ элемент управления комбинированный список
EM_ элемент управления поле редактирования текста
LB_ элемент управления список
SBM_ элемент управления полоса прокрутки
WM_ оконные сообщения
и т. д.
Основные оконные сообщения покрывают собой широкий диапазон необходимой для работы приложения информации и различных запросов, включая ввод с мыши и клавиатуры, ввод из меню и диалогового окна, управление окном и динамическим обменом данных (DDE).
SendMessage() используется для отправки сообщения указанному окну используя дескриптор окна. SendDlgItemMessage() используется для отправки сообщения дочернему окну данного окна используя идентификатор (ID) ресурса окна. SendDlgItemMessage() наиболее часто используется в функциями диалогового окна, которые имеют дескриптор диалога, а не элемента управления дочернего окна.
Вызов SendDlgItemMessage()
SendDlgItemMessage (hwnd, id, msg, wParam, lParam)
эквивалентен следующему вызову SendMessage():
hwnd2 = GetDlgItem (hwnd, id);
SendMessage (hwnd2, msg, wParam, lParam);
Функция SendMessage
Функция SendMessage отправляет заданное сообщение окну или окнам. Функция вызывает оконную процедуру для заданного окна и не возвращает значение до тех пор, пока оконная процедура не обработает сообщение.
Синтаксис
LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); |
Параметры
hWnd
[in] Дескриптор окна, оконная процедура которого примет сообщение. Если этот параметр - HWND_BROADCAST, сообщение отправляется всем окнам верхнего уровня в системе, включая заблокированные или невидимые, не имеющие владельца, перекрывающие и выскакивающие окна; но сообщение не отправляется дочерним окнам.
Msg
[in] Определяет сообщение, которое будет отправлено.
wParam
[in] Определяет дополнительную конкретизирующую сообщение информацию.
lParam
[in] Определяет дополнительную конкретизирующую сообщение информацию.
Возвращаемые значения
Величина возвращаемого значения определяет результат обработки сообщения; он зависит от отправленного сообщения.
Функция SendDlgItemMessage
Функция SendDlgItemMessage отправляет сообщение указанному органу управления в диалоговом окне.
Синтаксис
LRESULT SendDlgItemMessage( HWND hDlg, int nIDDlgItem, UINT Msg, WPARAM wParam, LPARAM lParam ); |
Параметры
hDlg
[in] Дескриптор диалогового окна, которое содержит орган управления.
nIDDlgItem
[in] Устанавливает идентификатор органа управления, который получает сообщение.
Msg
[in] Задает отправляемое сообщение.
wParam
[in] Устанавливает дополнительную специальную для сообщения информацию.
lParam
[in] Устанавливает дополнительную специальную для сообщения информацию.
Возвращаемое значение
Возвращаемое значение определяет результат обработки сообщения и зависит от отправленного сообщения.
Замечания
Функция SendDlgItemMessage не возвращает значения до тех пор, пока сообщение не будет обработано.
Использование SendDlgItemMessage идентично извлечению дескриптора заданного органа управления и вызова функции SendMessage.