Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций Часть II.doc
Скачиваний:
14
Добавлен:
20.11.2018
Размер:
1.48 Mб
Скачать

Часть II. Проектирование пользовательских интерфейсов средствами win32 api п 1. Основы приложений для Windows. П 1.1 Типы данных Windows.

Программы для Windows не столь широко используют стандартные типы данных С++, такие как int или char. Вместо этого все используемые Windows типы данных определены с помощью typedef в файле windows.h или в соответствующих файлах. Этот файл должен быть включен во все программы Windows.

Рассмотрим некоторые наиболее употребительные типы:

HANDLE - 32-битное целое, используемое в качестве дескриптора.

Дескриптор – это величина, которая используется в качестве идентификатора какого-то ресурса. Все типы дескрипторов начинаются с буквы Н.

Например:

HWND -32-битное целое, используемое в качестве дескриптора окна.

HPEN -32-битное целое, используемое в качестве дескриптора пера.

HBRUSH -32-битное целое, используемое в качестве дескриптора кисти.

WORD -16-битное беззаковое короткое целое.

typedef usigned int UINT -32-битное беззнаковое целое.

LONG - является другим именем long.

BOOL -целый тип. Используется для того, чтобы различать значения истино и ложно.

typedef UINT WPARAM

typedef LONG LPARAM

LPSTR -указатель на строку

LPCSTR -константный указатель на строку.

Кроме этих основных типов Windows определяет несколько структур. Например:

MSG -содержит сообщения Windows.

WNDCLASS -определяет класс окна.

П. 1.2 Главная функция приложения WinMain().

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

Пример описания функции WinMain:

int WINAPI WinMain( HINSTANCE hInstance,

HINSTANCE hPrevlnstance, LPSTR IpszCmdLine, int nCmdShow)

{

. . .

}

Имя, тип возврата и список формальных параметров функции опре­делены требованиями Windows API. Модификатор WINAPI указывает на то, что функция при получении аргументов сама должна откорректиро­вать порядок расположения аргументов в стеке.

Параметр hinstance от операционной системы получает дескриптор текущего экземпляра приложения. Параметр hPrevInstance в 16-разряд­ных приложениях указывает на активный предыдущий экземпляр при­ложения или NULL. В приложениях Win32 он всегда равен NULL и по нему невозможно узнать о существовании других активных экземпляров этого приложения. Параметр lpszCmdLine указывает на строку с аргу­ментами командной строки запуска приложения. При обычном запуске этот параметр равен NULL. Параметр nCmdShow передает приложению способ начального отображения окна.

П. 1.3 Оконная функция.

Функция окна описывает реакцию окна на поступающие сообщения. Она от обычных функций отличается следующим:

• имеет стандартные тип возврата и список формальных парамет­ров;

• вызывается только операционной системой при поступлении сообще­ния окну;

• сообщения, которые не обрабатываются функцией окна, возвра­щаются операционной системе.

Имя функции окна - это обычное имя, определяемое разработчиком.

Рассмотрим пример описания функции окна.

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg,

WPARAM wParam, LPARAM lParam)

{

switch (msg) //Обработка сообщения

{ case WM_CREATE: { ...; return 0;}

case WM_MOVE: { . . .; return 0;}

case WM_SIZE: { . . .; return 0; }

. . .

caseWM.DESTROY:

{ ...; PostQuitMessage(O); return 0;}

} return DefWindowProc(hwnd, msg, wParam, IParam);

}

Заголовок функции окна определен соглашениями Windows и имеет вид:

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg,

WPARAM wParam, LPARAM IParam)

Тип возврата LRESULT равноценен типу signed long. Модификатор CALLBACK указывает на соглашения о том, что эта функция вызывает­ся операционной системой (такие функции называют функциями об­ратного вызова).

Параметр hwnd - дескриптор окна-адресата, а msg, wParam и lParam описывают полученное сообщение. Параметр msg принимает код сообщения. Содержимое переменных wParam и lParam определяется полученным сообщением. Обычно они содержат такие вещи как координаты мыши, значение клавиши, размер символа и др. Иногда две порции информации кодируется в двойное слово, из которых состоит каждое из параметров wParam и lParam. Для того, чтобы обеспечить легкий доступ к каждой половинке wParam и lParam Windows определяет два макроса с именами LOWORD и HIWORD. Они возвращают младшее и старшее слово длинного целого соответственно.