АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Основы программирования Win32 API.Функция GetMessage(). Функция TranslateMessage(). Функция DispatchMessage(). Функция окна

Читайте также:
  1. I Функция
  2. I. Методические основы
  3. I. Основы применения программы Excel
  4. I. Основы экономики и организации торговли
  5. II. ОСНОВЫ МОЛЕКУЛЯРНОЙ ФИЗИКИ И ТЕРМОДИНАМИКИ
  6. II.1. Основы государственности
  7. III. Методологические основы истории
  8. XIII. ПРАВОВЫЕ ОСНОВЫ ЭКОЛОГИЧЕСКОГО АУДИТА
  9. Административно-правовые основы деятельности центров ГСЭН
  10. Адресная функция
  11. Акмеологические основы самосовершенствования личности
  12. Анализ ФСП основывается главным образом на относительных показателях, так как абсолютные показатели баланса в условиях инфляции сложно привести в сопоставимый вид.

В операционной системе 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++. Проектирование меню. Ввод данных при помощи окон диалога. Элементы языка описания ресурсов.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)