Презентация слайды лекция 7 2с
- Размер: 1015.5 Кб
- Количество слайдов: 22
Описание презентации Презентация слайды лекция 7 2с по слайдам
Для регистрации класса окна используется функция: int Register. Class(LPWNDCLASS wc); Для создания окна вызывается функция: HWND Create. Window(. . . ); Для отображения окна приложения используется функция: BOOL Show. Window(HWND hwnd, int n. Cmd. Show);
Для выборки сообщений вызывается функция: BOOL Get. Message ( LPMSG lp. Msg, // ссылка на структуру для получения сообщения HWND hwnd, // дескриптор окна, которому адресуется сообщение UINT w. Msg. Min, // первое сообщение (код) UINT w. Msg. Max); // последнее сообщение (код)
typedef struct { HWND hwnd; // дескриптор окна адресата UINT message; // код сообщения WPARAM w. Param; // содержимое сообщения LPARAM l. Param; // содержимое сообщения DWORD time; // время отправки POINT pt; // координаты места отправки } MSG; Цикл обработки сообщений окна: while(Get. Message(. . . ) ) { Dispatch. Message(. . . ); }
Передача сообщения оконной процедуре: LRESULT Dispatch. Message(CONST MSG *lp. Msg); Оконная процедура: LRESULT CALLBACK ( HWND hwnd, UINT msg, WPARAM w. Param, LPARAM l. Param);
В ОС Window описаны несколько сот кодов сообщений. Например, 1. WM_CREATE 2. WM_SIZE 3. WM_MOVE 4. WM_COMMAND 5. WM_DESTROY
#include LRESULT CALLBACK Wnd. Proc (HWND, UINT, WPARAM, LPARAM); HINSTANCE h. Ins; char Name. Class[] = “Window. Class”; int WINAPI Win. Main(HINSTANCE h. Inst, HINSTANCE hpev, LPSTR lpsz. Cmd. Line, int n. Cmd. Show) { MSG msg; HWND hwnd; h. Ins = h. Inst; WNDCLASS wc; wc. style=wc. cb. Cls. Extra=wc. cb. Wnd. Extra=0; wc. lpfn. Wnd. Proc=Wnd. Proc; wc. h. Instance=h. Ins; wc. h. Icon=Load. Icon(NULL, IDI_APPLICATION); wc. h. Cursor=Load. Cursor(NULL, IDC_ARROW); wc. hbr. Background=(HBRUSH)(COLOR_WINDOW+1); wc. lpsz. Menu. Name=NULL; wc. lpsz. Class. Name=Name. Class;
if (!Register. Class(&wc)) return FALSE; hwnd = Create. Window(Name. Class, “My Appication”, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 300, 0, 0, h. Inst, NULL); if (!hwnd) return FALSE; Show. Window(hwnd, SW_SHOW); while(Get. Message(&msg, 0, 0, 0)) Dispatch. Message(&msg); return msg. w. Param; }
LRESULT CALLBACK Wnd. Proc (HWND hwnd, UINT msg, WPARAM w. Param, LPARAM l. Param) { switch(msg) { case WM_DESTROY: { Post. Quit. Message(0); return 0; } } return Def. Window. Proc(hwnd, msg, w. Param, l. Param); }
Элемент управления – это компонент окна приложения, который используются для управления работой этого приложения. Отличительные особенности элементов управления : 1. для них описаны классы окон; 2. все они являются дочерними окнами; 3. для всегда необходимо описывать идентификаторы; 4. для них описаны дополнительные стили и набор сообщений.
Классы для создания элементов управления 1. “button” — для реализации любых типов кнопок; 2. “edit” — для реализации поля ввода (редактирования); 3. “listbox” — для реализации списка; 4. “combobox” — для реализации комбинированного списка (поле вода со списком); 5. “scrollbar” — для реализации полосы прокрутки; 6. “static” — для реализации статического поля.
Алгоритм создания элемента управления : 1. Описание идентификатора (например, #define ID_BUTTON 200 ) ; 2. Описание дескриптора элемента (например, в теле оконной процедуры родительского окна: static HWND h. Button ) ; 3. Создание элемента (с помощью функции Create. Window() со стилем WS_CHILD. Например, h. Button= Create. Window(“button”, “OK”, WS_CHILD|WS_VISIBLE, 0, 0, 40, 20, hwnd, (HMENU)ID_BUTTON, h. Ins, NULL) )
#include #define ID_BUTTON 1 101 #define ID_BUTTON 2 102 // аналогично предыдущему примеру LRESULT CALLBACK Wnd. Proc (HWND hwnd, UINT msg, WPARAM w. Param, LPARAM l. Param) { static HWND h. But 1, h. But 2; switch(msg) { case WM_CREATE: { Create. Window(“button”, “K 1”, WS_CHILD|WS_VISIBLE, 50, 40, 20, hwnd, (HMENU)ID_BUTTON 1, h. Ins, NULL); Create. Window(“button”, “K 2”, WS_CHILD|WS_VISIBLE, 130, 50, 40, 20, hwnd, (HMENU)ID_BUTTON 2, h. Ins, NULL); return 0; }
case WM_COMMAND: { switch (LOWORD(w. Param)) { case ID_BUTTON 1: { Message. Box(hwnd, “Press K 1”, “Mes”, MB_OK); return 0; } case ID_BUTTON 2: { Message. Box(hwnd, “Press K 2”, “Mes”, MB_OK); return 0; } } return 0; }
case WM_DESTROY: { Post. Quit. Message(0); return 0; } } return Def. Window. Proc(hwnd, msg, w. Param, l. Param); }
18Работа с меню
Меню используются для изменения режимов работы приложения. Состоит меню из пунктов, команд и сепараторов.
Виды меню : — Системное; — Главное; — Контекстное (всплывающее).
Элемент меню может быть представлен: — строкой символов; — графическим объектом (растровое изображение). Пункт меню, как и контекстное меню, создается в виде временного меню.
Существует два способа создания меню: Динамический (в период выполнения приложения: либо в главной функции, либо в оконной процедуре обработки сообщений); Статический (до запуска приложения на выполнение: использование файла ресурсов).