Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОСОБИЕ СозданиеWindowsПриложений.doc
Скачиваний:
20
Добавлен:
01.03.2016
Размер:
3.35 Mб
Скачать
    1. Описание класса (стиля) окна. Структура wndclass

При создании приложения создается два основных компонента: - окно, как интерфейсное средство общения пользователя с приложением; - функция, обрабатывающая все события (сообщения), происходящие как в окне так и во внешней среде приложения. Окно описывается разработчиком. Данные о каждом окне хранятся в полях структуры WNDCLASS (в WinMain(…) это переменная типа WNDCLASS wcApp). Структура WNDCLASS приведена ниже, значения ее полей приведены в таблице [см. ПРИЛОЖЕНИЕ. СтруктураWNDCLASS].

    1. Создание (визуализация) окна

Когда стиль (класс, вид) окна описан и зарегистрирован в Windows под соответствующим именем (здесь имя задано строкой – szWindowClass), то может быть создано произвольное число таких окон с помощью функции hWnd = CreateWindow (…). Эта функция через свои параметры конкретизирует вид создаваемого окна, а Windows возвращает его уникальный номер, т.е. дескриптор (handle) – переменную типа HWND hWnd. Параметры CreateWindow, доопределяющие стиль окна, приведены в таблице [см. ПРИЛОЖЕНИЕ. СтилиОкна]. Само окно визуализируется функцией ShowWindow (hWnd, nCmdShow), значения второго параметра приведены в таблице [см. ПРИЛОЖЕНИЕ. СостоянияОкна].

    1. Сообщения. Схема обработки. Прототипы функций-обработчиков сообщений

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

while (GetMessage (&lpMsg, NULL, 0, 0))

{

TranslateMessage (&lpMsg);

DispatchMessage (&lpMsg);

}.

Действие цикла обработки сообщений и схема обработки сообщений приложением иллюстрируются ниже.

Схема создания и пересылки сообщения от устройства (на примере манипулятора - мышь) к приложению иллюстрируется на рисунке ниже.

Схема прохождения программного сообщения WM_CREATE приведена на рисунке ниже.

Типы сообщений, их названия и прототипы функций для их обработки приведены в таблице.

Таблица. Прототипы функций обработки сообщений

Сообщение

Прототип функции обработки сообщения

WM_CHAR

void Cls_OnChar(HWND hwnd, UINT ch, int cRepeat);

WM_COMMAND

void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);

WM_CREATE

BOOL Cls_OnCreate(HWND hwnd, CREATESTRUCT FAR* lpCreateStruct);

WM_DESTROY

void Cls_OnDestroy(HWND hwnd);

WM_GETMINMAXINFO

void Cls_ OnGetMinMaxInfo(HWND hwnd, MINMAXINFO FAR* lpMinMaxInfo);

WM_NITDIALOG

BOOL Cls_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam);

WM_KEYDOWN

void Cls_OnKeyDown(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags);

WM_KEYUP

void Cls_OnKeyUp(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags);

WM_KILLFOCUS

void Cls_OnKillFocus(HWND hwnd, HWND hwndNewFocus);

WM_LBUTTONDOWN, WM_LBUTTONDBLCLK

void Cls_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags);

WM_LBUTTONUP

void Cls_OnLButtonUp(HWND hwnd, int x, int y, UINT keyFlags);

WM_MOUSEMOVE

void Cls_OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags);

WM_NOTIFY

BOOL Cls_OnNotify(HWND hwnd, INT idCtrl, NMHDR* pnmh);

WM_PAINT

void Cls_OnPaint(HWND hwnd);

WM_QUIT

void Cls_OnQuit(HWND hwnd, int exitCode);

WM_RBUTTONDOWN, WM_RBUTTONDBLCLK

void Cls_OnRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags);

WM_RBUTTONUP

void Cls_OnRButtonUp(HWND hwnd, int x, int y, UINT flags);

WM_SETCURSOR

BOOL Cls_OnSetCursor(HWND hwnd, HWND hwndCursor, UINT codeHitTest, UINT msg);

WM_SETFOCUS

void Cls_OnSetFocus(HWND hwnd, HWND hwndOldFocus);

WM_SHOWWINDOW

void Cls_OnShowWindow(HWND hwnd, BOOL fShow, UINT status);

WM_SIZE

void Cls_OnSize(HWND hwnd, UINT state, int cx, int

cy);

WM_SYSCHAR

void Cls_OnSysChar(HWND hwnd, UINT ch, int cRepeat);

WM_SYSCOMMAND

void Cls_OnSysCommand(HWND hwnd, UINT cmd, int x, int y);

WM_SYSKEY

void Cls_OnSysKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags);

WM_TIMER

void Cls_OnTimer(HWND hwnd, UINT id);

Коды виртуальных клавиш см. в [ПРИЛОЖЕНИЕ. КодыВиртуальныхКлавиш].