- •Методические указания
- •Оглавление
- •Теоретический материал
- •Введение
- •Типы данных Windows. Типы указателей Windows. Использование памяти
- •Венгерская нотация. Префиксы данных
- •Общая структура Windows-приложений
- •Описание класса (стиля) окна. Структура wndclass
- •Создание (визуализация) окна
- •Сообщения. Схема обработки. Прототипы функций-обработчиков сообщений
- •Ресурсы Windows-приложений
- •Встроенные редакторы ресурсов
- •Средства организации вывода данных
- •Средства организации ввода данных
- •Вывод растровых изображений в Windows-приложениях
- •Автоматические шаблоны (каркасы) windows-приложений (тип empty, simple)
- •Создать шаблон Windows-приложения (тип Empty) и изучить его свойства
- •Модифицировать шаблон
- •Создать шаблон Windows-приложения (тип Simple) и изучить его свойства
- •Типовой шаблон (каркас) windows-приложения (тшп)
- •Изучение свойств типового шаблона
- •Изучить листинг типового шаблона
- •Воспроизвести типовой шаблон
- •Изучить свойства типового шаблона
- •Модификация типового шаблона
- •Изменить интерфейс типового шаблона
- •Добавить строку приветствия в типовой шаблон
- •Использование типового шаблона
- •Организовать вывод данных с применением функций
- •Добавить ресурс - меню
- •Организовать ввод данных с применением меню и пользовательского диалогового окна
- •Автоматический шаблон (каркас) windows-приложения (тип hello)
- •Изучение свойств шаблона (тип Hello)
- •Создать шаблон Windows-приложения (тип Hello)
- •Изучить ресурсы шаблона
- •Изучить свойства шаблона
- •Модификация шаблона (тип Hello)
- •Получить типовой шаблон приложения (тшп) из шаблона (тип Hello)
- •Организовать ввод-вывод числовых данных с применением пользовательского диалогового окна
- •Индивидуальные задания
-
Описание класса (стиля) окна. Структура wndclass
При создании приложения создается два основных компонента: - окно, как интерфейсное средство общения пользователя с приложением; - функция, обрабатывающая все события (сообщения), происходящие как в окне так и во внешней среде приложения. Окно описывается разработчиком. Данные о каждом окне хранятся в полях структуры WNDCLASS (в WinMain(…) это переменная типа WNDCLASS wcApp). Структура WNDCLASS приведена ниже, значения ее полей приведены в таблице [см. ПРИЛОЖЕНИЕ. СтруктураWNDCLASS].
-
Создание (визуализация) окна
Когда стиль (класс, вид) окна описан и зарегистрирован в Windows под соответствующим именем (здесь имя задано строкой – szWindowClass), то может быть создано произвольное число таких окон с помощью функции hWnd = CreateWindow (…). Эта функция через свои параметры конкретизирует вид создаваемого окна, а Windows возвращает его уникальный номер, т.е. дескриптор (handle) – переменную типа HWND hWnd. Параметры CreateWindow, доопределяющие стиль окна, приведены в таблице [см. ПРИЛОЖЕНИЕ. СтилиОкна]. Само окно визуализируется функцией ShowWindow (hWnd, nCmdShow), значения второго параметра приведены в таблице [см. ПРИЛОЖЕНИЕ. СостоянияОкна].
-
Сообщения. Схема обработки. Прототипы функций-обработчиков сообщений
В 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); |
Коды виртуальных клавиш см. в [ПРИЛОЖЕНИЕ. КодыВиртуальныхКлавиш].