Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Графика -> Гончаров Д. -> "DirectX 7.0 Для программистов" -> 15

DirectX 7.0 Для программистов - Гончаров Д.

Гончаров Д., Салихо Т. DirectX 7.0 Для программистов — Спб.: Питер, 2001. — 528 c.
ISBN 5-318-00173-4
Скачать (прямая ссылка): dirext7dlyaprogrammistov2001.djvu
Предыдущая << 1 .. 9 10 11 12 13 14 < 15 > 16 17 18 19 20 21 .. 229 >> Следующая

Оконная процедура и обработка сообщений
Если функция WinMain представляет собой своего рода «мотор» программы, то оконная процедура наделяет программу настоящей функциональностью. В конце концов, большинство приложений отличаются друг от друга главным образом реакцией на сообщения, которые им посылает Windows. Оконная процедура должна иметь прототип
LRESULT CALLBACK WndProcCHWND hwnd. UINT uMsg. WPARAM wParam. LPARAM IParam);
Существенными в этом прототипе являются список передаваемых параметров и тип возвращаемого результата. Название оконной процедуры зависит лишь от фантазии разработчика. Поскольку по правилам C/C++ имя функции одновременно является ее адресом, следующее присваивание возможно (и обычно происходит) внутри функции WinMain: wndClass.lpfnWndProc - WndProc;
Благодаря этому присваиванию Windows знает оконную процедуру класса и пересылает в нее все адресуемые окну сообщения. Каждое сообщение сопровождается двумя параметрами, имеющими типы WPARAM и LPARAM и содержащими упакованные в них характеристики сообщений. В Win32 оба эти параметра имеют размер 32 бита, но распаковщики сообщений избавляют нас от необходимости работать с данными параметрами напрямую.
Базовое приложение для Windows 9X/NT
35
Оконные сообщения
Как уже было сказано, в Windows имеется огромное количество сообщений, которыми она непрерывно «бомбардирует» оконную процедуру. И только определенное количество из них (иногда 2-3) необходимо программисту для обработки в каждом конкретном случае. Хорошим источником знаний о разнообразии этих сообщений служит заголовочный файл WINUSER.H, в котором они определены. Ниже приводится список наиболее важных сообщений, которые мы будем использовать впоследствии.
Сообщения, связанные с управлением окнами
WMACTIVATE Посылается в окно в случае его активации или деактивации
WMCREATE Посылается, когда совершается попытка создать окно при помощи функций CreateWindow или CreateWindowEx. Оконная процедура получает это сообщение после того, как окно создано, но до того, как оно появится на экране. В случае если оконная процедура возвращает -1 в ответ на это сообщение, то окно не создается и функция, использованная для создания окна, возвращает NULL
WMCL0SE Посылается в окно, когда оно должно быть закрыто. Это сообщение может обрабатываться в случае, если приложению нужно выполнить определенные действия перед тем, как закрыться
WMDESTROY Посылается в удаляемое окно, когда оно уже убрано с экрана
WMM0VE Посылается в окно после того, как его положение было изменено
WMSIZE Посылается в окно тогда, когда его размер был изменен. Кроме того, посылается в окно после его создания
WMQUIT Помещается в очередь сообщений после вызова функции PostQuitMessage и является причиной завершения приложения. Функция GetMessage, выбрав из очереди это сообщение, возвращает нуль; цикл выборки сообщений прекращается, а вместе с ним завершается и работа программы
WM_PAINT Посылается в окно, если необходимо перерисовать содержимое этого окна или его участка. Являясь частью поддержки GDI, это сообщение будет рассмотрено в следующей главе
Сообщения клавиатуры
WMKEYDOWN Помещается в очередь сообщений, когда окно имеет клавиатурный фокус и была нажата какая-либо несистемная клавиша. Передает в оконную процедуру виртуальный код клавиши. Список виртуальных кодов клавиш можно посмотреть, например, в файле WINUSER.H
WMKEYUP Помещается в очередь сообщений, когда окно имеет клавиатурный фокус и несистемная клавиша была отпущена. Передает в оконную процедуру виртуальный код клавиши
WMCHAR Помещается в очередь сообщений как результат выполнения функции TranslateMessage. Здесь требуется небольшое пояснение. Когда нажимается несистемная клавиша, в очередь сообщений помещается WM KEYDOWN. После извлечения этого сообщения из очереди функцией GetMessage, оно транслируется функцией TranslateMessage, которая помещает в очередь сообщение WM CHAR. После отпускания клавиши в очередь ставится сообщение WM KEYUP
36
Урок 1 • Основы программирования на C/C++ для Windows 9X/NT
Сообщения мыши
Помещается в очередь сообщений, если указатель мыши перемещается над окном
Помещается в очередь сообщений, если нажата левая кнопка мыши и указатель находится над клиентской областью окна
Помещается в очередь сообщений, если отпущена левая кнопка мыши и указатель находится над клиентской областью окна
Помещается в очередь сообщений, если был произведен двойной щелчок левой кнопкой мыши и указатель находится над клиентской областью окна
Эти сообщения помещаются в очередь сообщений, если нажата, отпущена или произведен двойной щелчок правой и средней кнопкой мыши соответственно
WMM0USEM0VE
WMLBUTT0ND0WN
WMLBUTTONUP
WMLBUTTONDBLCLK
WMRBUTT0ND0WN WMRBUTTONUP WMRBUTTONDBLCLK WMMBUTT0ND0WN WMMBUTTONUP WMMBUTTONDBLCLK
WMSETCURSOR Посылается в окно, если указатель мыши перемещается над окном и при этом мышь не была захвачена никаким другим окном. Используется для задания _вида указателя мыши__
Другие сообщения_
WH TIMER Помещается в очередь сообщений по истечении срока, указанного при соз-
Предыдущая << 1 .. 9 10 11 12 13 14 < 15 > 16 17 18 19 20 21 .. 229 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.