русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Сообщение WM_DESTROY


Дата добавления: 2013-12-23; просмотров: 1461; Нарушение авторских прав


.

.

.

Функции окна приложения

Командная строка приложения

Завершение работы приложения

Приложение завершает свою работу тогда, когда функция WinMain() передает управление Windows. Передать управление Windows можно в любом месте WinMain(), в том числе и до входа в цикл обработки очереди сообщений (именно так и происходит в случае возникновения ошибки на одном из подготовительных этапов, например, при создании окна приложения или регистрации класса окна). Перед окончательным завершением можно выдать сообщение пользователю.

Однако после входа в цикл обработки очереди сообщений единственным способом завершить приложение является посылка в очередь приложения сообщения WM_QUIT. Это делается в функции главного окна вызовом специальной функции PostQuitMessage(). Когда функция GetMessage() извлекает из очереди приложения это сообщение, она возвращает NULL, что приводит к завершению работы приложения. По умолчанию сообщение WM_QUIT посылается только функцией главного окна.

Хотя при завершении приложения в функциях PostQuitMessage() и WinMain() указывается возвращаемое значение, в настоящее время Windows его не использует (возвращаемое значение копируется в параметр wParam сообщения WM_QUIT):

return msg. wParam; // возвращаемое значение копируется из сообщения // WM_QUIT

 

При завершении приложения следует аккуратно освобождать занятые ресурсы.

Для анализа командной строки приложения можно использовать параметр lpszCmdLine. В этой переменной содержится указатель на начало строки, содержащей командную строку точно в том виде, в каком она была введена пользователем. Отметим, что в отличие от MS-DOS, параметры командной строки не помещаются в отдельные переменные. Если вы хотите анализировать опции или параметры командной строки, необходимо извлекать их из строки символов в ручную.



 

 

Каждое окно поддерживается и обрабатывается функцией окна приложения.

Функции окна приложения WndProc() нет аналогов в обычной программе для MS-DOS. Эта функция не вызывается явно из самого приложения. Управление ей передает Windows. Делается это в тех случаях, когда над окном приложения нужно выполнить какие-либо действия.

Все события в системе преобразуются в сообщения и помещаются в системную очередь, после чего направляются Windows в очереди приложений.

Цикл обработки очереди сообщений извлекает их из очереди приложения и направляет в функцию окна.

Функция окна приложения обрабатывает сообщения, передаваемые из Windows. Функция окна приложения может быть простой, обрабатывающей только одно или два сообщения, или очень сложной, обрабатывающей многие типы сообщений для различных типов окон. Простейшая функция окна выглядит следующим образом:

 

LRESULT CALLBACK WndProc (HWND hwnd, UINT message,

WPARAM wParam, LPARAM lParam)

{

return ( DefWindowProc (hWnd, message, wParam, lParam) );

}

 

В этом примере функция окна обрабатывает сообщения при помощи специальной функции DefWindowProc(), которая производит стандартную обработку сообщений. Ее указание в функции окна обязательно.

Типичный вид функции окна приводится ниже:

 

 

LRESULT CALLBACK WndProc (

HWND hWnd, // Дескриптор окна

UINT message, // Cообщения

WPARAM wParam, //Дополнительная информация LPARAM lParam;) // Дополнительная информация

{

switch (message)

{

default:

return (DefWindowProc, (hWnd, message, wParam, lParam))

}

return NULL;

}

Сообщение передается функции окна в виде параметров.

Первый параметр hWnd - это дескриптор окна, получающего сообщение ( дескриптор окна получает свое значение при создании окна функцией CreateWindow() ).

Второй параметр message определяет само сообщение, поступившее функции окна. В файле windows.h все идентификаторы, начинающиеся с символов WM_, определяют сообщения.

Третий и четвертый параметры wParam, lParam содержат дополнительную информацию, которая зависит от сообщения.

Функция окна имеет одно очень важное свойство: она вызывается непосредственно Windows и не может вызываться приложением напрямую. Для Windows функция окна должна быть экспортирована в среду Windows (как бы зарегистрированы в списке библиотечных функций). Для этого следует в файле определения модуля (.def) объявить экспортируемую функцию при помощи оператора EXPORTS, или с помощью ключевого слова _export в заголовке функции.

Экспортированы должны быть все функции, которые вызываются непосредственно Windows и не могут быть вызваны явно из приложения. В число таких функций входят все функции окон приложения.

Для WIN32 используется ключевое слово WINAPI, которое обеспечивает совместимость приложений, разработанных для Windows 3.1 и Windows 95 и Windows NT.

Функция окна получает сообщения от Windows. Эти сообщения могут быть направлены как из функции WinMain() функцией DispatchMessage(), так и непосредственно из Windows. Функция окна должна проанализировать сообщение и либо выполнить какое-то действие, либо передать сообщение обратно в Windows для стандартной обработки функцией DefWindowProc().

Само передаваемое сообщение содержится в параметре message. Этот параметр используется в операторе переключения switch для передачи управления по нужной ветви обработки сообщений. Параметры lParam и wParam содержат дополнительную информацию о сообщении. Если сообщение не может быть обработано функцией окна, обязательно нужно передать управление функции DefWindowProc().

 

Это сообщение Windows посылает функции окна сразу же после закрытия окна. При получении его функция окна должна завершить свою работу и, если это функция главного окна приложения, обязательно послать в очередь приложения сообщение WM_QUIT.

Функция окна должна обработать сообщение WM_DESTROY следующим образом:

 

case WM_DESTROY: PostQuitMessage(NUUL);

break;

 

Функция PostQuitMessage() помещает сообщение WM_QUIT в очередь приложения. Когда функция GetMessage() извлечет это сообщение из очереди приложения, произойдет выход из цикла обработки сообщений и приложение совершит свою работу.

Функция окна получает сообщения из цикла обработки сообщений и от Windows. Из цикла обработки сообщений поступают сообщения ввода: перемещение и нажатие клавиш мыши (сообщения WM_MOUSEMOVE ,WM_LBUTTONDOWN и др.), нажатие и отпускание клавиш клавиатуры (WM_KEYDOWN и WM_ KEYUP) и, если установлен генератор событий таймера, сообщения от таймера (WM_TIMER).

Windows посылает функции окна сообщения поддержки окна напрямую, минуя очередь приложения и цикл обработки сообщений. Эти сообщения обычно вызваны событиями, требующими немедленной реакции по изменению вида окна, например, перерисовки изображения при изменении размеров окна пользователем или из-за взаимодействия с другими окнами. Эти сообщения могут служить также средством обмена информацией между Windows и приложением, сообщающим об изменении в среде Windows или о том, что Windows сделал с окном приложения. Типичными системными сообщениями окна являются, например, сообщения WM_CREATE, WM_DESTROY и WM_PAINT.

Если функция окна не обрабатывает сообщение, то необходимо передать управление функции DefWindowProc() и вернуть возвращенное ей значение.



<== предыдущая лекция | следующая лекция ==>
Передача управления | Вспомогательные окна.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.