|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Основы программирования Win32 API.Функция GetMessage(). Функция TranslateMessage(). Функция DispatchMessage(). Функция окнаВ операционной системе Windows реализована объектно-ориентированная идеология. Базовый объект системы – окно, поведение которого определяется методом, называемым функцией окна. Графический образ окна на экране дисплея – прямоугольная рабочая область. Независимо от своего типа любой объект Windows идентифицируется описателем или дескриптором (handle). Дескриптор – это ссылка на объект. Все взаимоотношения программного кода с объектом осуществляются только через его дескриптор. Интерфейс прикладного программирования (API – Application Programming Interface) представляет собой совокупность 32-битных функций (Win32 API), которые предназначены для создания приложений (программ), работающих под управлением Microsoft Windows. Функции объявлены в заголовочных файлах. Главный из них − файл windows.h, в котором содержатся ссылки на другие заголовочные файлы. В Win32 единицей работы компьютера является поток − ход выполнения программы в рамках процесса (в контексте процесса). Поток выполняет программный код, принадлежащий процессу. Процесс − это экземпляр выполняемой программы (но не ход ее выполнения). Он не является динамическим объектом и включает виртуальное адресное пространство, код и данные, файлы, синхронизирующие объекты, динамические библиотеки. Каждое приложение создает, по меньшей мере, один первичный поток, но может создать и много потоков. Функция GetMessage() Сообщение из очереди может быть получено с помощью вызова функции Windows 95 или Windows NT GetMessage(), которая копирует сообщение в структуру, заданную указателем lpMsg и передает ее в основную программу. Параметр NULL указывает, что функция должна выбирать из очереди все сообщения для всех окон приложения. Последние два параметра, оба равные нулю, говорят о том, что не следует применять фильтры сообщений. Эти фильтры позволяют получать только сообщения заданной категории, например, только нажатия клавиш или перемещения мыши. Параметры называются wMsgFilterMin и wMsgFilterMax и задают нижнее и верхнее значения для фильтрации сообщений. Управление может перейти к Windows в любой момент перед началом цикла обработки сообщений. Например, обычно приложение должно убедиться, что вся подготовка к входу в цикл обработки сообщений прошла успешно. Сюда может входить, например, проверка правильности регистрации классов и создания окон. Когда же приложение начало исполнять цикл обработки сообщений, лишь одно из них способно прервать цикл. Когда поступает сообщение WM_QUIT, GetMessage() возвращает FALSE. Это приводит к завершению цикла и передаче управления далее. Единственный для программы способ покинуть цикл обработки сообщений — это получить сообщение WM_QUIT.
Функция TranslateMessage() Сообщения о нажатиях клавиш могут быть преобразованы в сообщения о вводе символов функцией TranslateMessageO. Вызов ее необходим только в тех программах, которые должны обрабатывать ввод символов с клавиатуры. Это бывает полезно, поскольку дает пользователю возможность выбирать пункты меню без использования мыши. При получении сообщений WM_KETDOWN и WM_KEYUP TranslateMessage() создает сообщение о вводе символа ASCII (WM_CHAR). Если в цикле обработки сообщений есть обращение к этой функции, программа может пользоваться интерфейсом клавиатуры.
Функция DispatchMessage() Полученные сообщения направляются в соответствующую функцию окна функцией DispatchMessage(). За счет ее использования легко можно добавить в программу дополнительные окна и окна диалога. Функция окна Каждое приложение Windows должно иметь функцию обратного вызова, называемую функцией окна. Поскольку приложение Windows 95 или Windows NT никогда не обращается к функции окна непосредственно, для выполнения тех или иных действий оно должно вызывать функции Windows. Следующий фрагмент кода (за исключением строк, относящихся к конкретному приложению) описывает функцию WndProc() из программы WIN32SWP:
LRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; switch(messg) { case WM_PAINT: hdc=BeginPaint(hWnd,&ps); //начало рисования //провести линию MoveToEx(hdc,200,200,NULL); LineTo(hdc,550,320); //конец рисования ValidateRect(hWnd,NULL); EndPaint(hWnd,&ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return(DefWindowProc(hWnd,messg,wParam,lParam)); } return(0); }
Для Windows 95 и Windows NT в поле wcApp.lpfnWndProc из структуры класса окна находится указатель на функцию обратного вызова. Для всех окон, созданных на основе этого класса, в качестве функции окна будет использована WndProc(). В следующем фрагменте текста указатель на функцию передается в структуру класса:
if(!hPreInst) { wcApp.lpszClassName = szProgName; wcApp.hInstance = hInst; wcApp.lpfnWndProc = WndProc; …
Windows может посылать функции окна несколько сотен различных сообщений. Сообщения обозначаются константами, названия которых имеют префикс WM_. Например, довольно часто используются сообщения WM_CREATE, WM_SIZE и WM_PAINT. Эти константы также называют идентификаторами сообщений. Первым параметром (hWnd) функции WndProc() передается описатель окна, которому предназначено сообщение. Поскольку одна и та же функция окна может обрабатывать сообщения нескольких окон, имеющих один и тот же класс, этот параметр используется функцией для идентификации окна, которому послано сообщение. Второй параметр, messg, указывает тип сообщения. Последние два параметра, wParam и lParam, задают дополнительную информацию, необходимую для обработки сообщения. Часто их значением бывает NULL. Это означает, что их можно не рассматривать. В других случаях они могут содержать двухбайтовое значение и указатель или два значения размером в слово. Далее в функции WndProc() объявляются две переменные: hdc обозначает описатель контекста устройства, a ps указывает на структуру типа PAINTSTRUCT, необходимую для рисования в рабочей области окна. Функция обратного вызова анализирует тип сообщения и затем выполняет необходимые действия. Этот процесс обычно выполняется в операторе switch.
80. Основы программирования Win32 API.Инструментальные средства Visual C++. Проектирование меню. Ввод данных при помощи окон диалога. Элементы языка описания ресурсов. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |