
- •Основные компоненты windows – программы (.Cpp, .H, .Res, .Rc, .Def), компиляция.
- •Файл определения модуля.
- •Структура windows – программы.
- •Структура программы в Windows:
- •Сообщения. Источники сообщений
- •Формирование сообщений, примеры. Очереди.
- •Сообщения. Цикл сообщений, основные компоненты.
- •Сообщения. Структура сообщений на примере wm_command
- •Структура msg. Обработка сообщений.
- •Средства обработки сообщений в приложении и windows.
- •Окна, классы и типы окон.
- •Регистрация класса окна, основные элементы класса.
- •Int cbClsExtra; // 3. Доп. Память для окон, созд-мых на базе данного класса
- •Int cbWndExtra; // 4. Доп. Память для создания окна (3, 4 – в байтах)
- •Линейки прокрутки, переключатели, окна пометки, окна списка.
- •1. Кнопки, переключатели (переключатели – кнопки с 3-мя состояниями (вкл, выкл и неактивен)
- •2. Полосы прокрутки.
- •3. Окна списка
- •Комбинированные списки, окна редактирования и статические текстовые объекты.
- •1. Комбинированные списки
- •2. Окна редактирования
- •3. Статический орган управления (статический текстовый объект)
- •Способы создания меню
- •Создание меню в файле ресурсов
- •С помощью функций в теле программы
- •Создание меню редактором ресурсов
- •Определение диалоговой панели, взаимодействие пользователя с панелью.
- •1. Создание шаблона.
- •2. Создание функции диалога.
- •3. Вызов одной из функций создания диалога
- •Диалоговые панели, модальные панели.
- •Немодальные панели. Отличие циклов сообщений.
- •Ресурсы. Файл ресурсов, текстовый, бинарный. Создание.
- •Файл определения модуля. Назначение, основные директивы (относящиеся к коду и данным).
- •Графический приборный интерфейс gdi. Состав, назначение.
- •Контекст, содержание контекста.
- •Общий контекст, родительский, личный, для класса окна, физический.
- •1. Общий контекст отображения.
- •2. Контекст отображения для класса окна
- •3. Личный контекст отображения
- •4. Родительский контекст отображения
- •5. Контекст физического устройства
- •Последовательность действий приложения при формировании рисунка
- •Преобразование логических координат в физические и наоборот, единицы измерений, масштабирование.
- •Назначение и состав структуры paintstruct. Сообщение wm_paint.
- •Int right; х-коор-та нижнего правого угла
- •Int bottom; y-коор-та
- •Дополнительные темы.
- •Аппаратная независимость
- •Основные компоненты windows – программы (.Cpp, .H, .Res, .Rc, .Def), компиляция
Регистрация класса окна, основные элементы класса.
Для создания окна необходимо зарегистрировать класс окна. Есть классы окон, зарегистрированные при инициализации Windows. Приложение может создавать окна либо на базе собственных классов (созданных и зарегистрированных приложением), либо на базе готовых классов, созданных и зарегистрированных самой операционной системой Windows.
Для регистрации класса окна в приложении необходимо предварительно произвести описание класса окна. Это достигается путем заполнения полей специальной структуры WNDCLASS, определенной в файле windows.h.
typedef struct tagWNDCLASS
{
UINT style; // 1. Стиль класса, задается в виде констант с префиксом CS_
// wc.style=0 – стиль по умолчанию
// определяет реакцию окна на изменение его размера, на двойной щелчок мыши и др.
WNDPROC lpfnWndProc; // 2. Адрес функции окна, выполняющей обработку всех сообщений
// поступающих во все окна, созданные на базе данного класса
Int cbClsExtra; // 3. Доп. Память для окон, созд-мых на базе данного класса
Int cbWndExtra; // 4. Доп. Память для создания окна (3, 4 – в байтах)
HINSTANCE hInstance; // 5. Идентификатор приложения
// Следует использовать значение, получаемое функцией WinMain
// wc.hInstance=hInstance;
HICON hIcon; // 6. Идентификатор пиктограммы
HCURSOR hCursor; // 7. Вид курсора мыши
HBRUSH hbrBackground;// 8. Заливка (прост.случай- цифры от 0 до 7)
LPCSTR lpszMenuName; // 9. Имя меню, если оно есть
LPCSTR lpszClassName;// 10. Указатель на строку, содержащую имя класса окна
} WNDCLASS;
Для загрузки пиктограммы используется функция HICON WINAPI LoadIcon(HINSTANCE hinst, LPCSTR pszicon); второй параметр – имя загружаемой пиктограммы. Для курсора – LoadCursor.
Перед регистрацией необходимо заполнить все поля в этой структуре, после чего вызывается функция регистрации класса окна RegisterClass – возвращает ненулевое значение, если регитсрация произошла успешно.
if (!RegisterClass(&wndclass)) exit(FALSE);
______________________________________________________________________________________
Создание главного окна приложения осуществляется посредством вызова функции CreateWindow:
hwnd = CreateWindow(
szClassName, // имя класса окна
szWindowTitle, // заголовок окна
WS_OVERLAPPEDWINDOW, // стиль окна: перекрывающееся окно – главное окно приложения
CW_USEDEFAULT, // задаем размеры и расположение
CW_USEDEFAULT, // окна, принятые по умолчанию
CW_USEDEFAULT,
CW_USEDEFAULT,
0, // идентификатор родительского окна
0, // идентификатор меню или дочернего окна
hInstance, // идентификатор приложения
NULL);//указатель на дополнительные параметры - передается в функцию окна вместе с сообщением WM_CREATE при создании окна
// Если создать окно не удалось, завершаем приложение
if (!hwnd) exit(FALSE);
_______________________________________________________________________________
Для отображения окна используем ShowWindow(hwnd, nCmdShow), отображающей окно с идентификатором hwnd в виде (нормальном, пиктограммой и др.), зависящем от второго параметра (он здесь имеет БОЛЬШИЙ приоритет, чем при регистрации).
Далее вызывается функция UpdateWindow(hwnd), посылающая функции окна с идентификатором hwnd сообщение WM_PAINT. Получив это сообщение, функция окна должна перерисовать все окно или его часть.