Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции -Процедурное программирование в Windows.doc
Скачиваний:
13
Добавлен:
13.09.2019
Размер:
742.91 Кб
Скачать

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

Для анализа командной строки приложения можно использовать параметр 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().