
- •Основные компоненты 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 класс окон (dialog window class), на базе этого класса создаются временные (pop-up) окна (иногда перекрывающиеся (overlapped) окна), на их поверхности располагаются дочерние окна - органы управления. Диалоговые панели значительно упрощают использование органов управления, так как функция окна, соответствующая классу диалоговых панелей и расположенная внутри Windows, обеспечивает как взаимодействие органов управления между собой, так и их взаимодействие с приложением. В частности, эта функция обеспечивает передачу фокуса ввода от одного органа управления к другому при помощи клавиши <Tab> и клавиш перемещения курсора <Up> и <Down>, выполняет обработку сообщений от клавиш <Enter> и <Esc>.
Для создания диалоговой панели вы должны предпринять следующие действия:
- создать шаблон диалога;
- определить функцию диалога;
- вызвать одну из функций создания диалога.
Диалоговые панели бывают трех типов: модальные, системные модальные и немодальные.
Модальная: главное окно приложения и его дочерние окна блокируются, перестают получать сообщения от мыши и клавиатуры. Но есть возможность работать с другими приложениями. Чтобы и это запретить – системные модальные диалоговые панели.
Немодальная диалоговая панель не блокирует работу основного окна приложения и его дочерних окон. Вы можете работать как с диалоговой панелью, так и с окном приложения.
Создание модальных диалоговых панелей:
1. Шаблон диалога должен содержать стиль - DS_MODALFRAME для модальной диалоговой панели, DS_SYSMODAL – системной модальной диалоговой панели
2. Должна быть вызвана одна из следующих функций:
а) int WINAPI DialogBox (HINSTANCE hInstance, LPCSTR lpszTemplate, HWND hwndOwner, DLGPROC dlgprc);
hInstance – идентификатор текущей копии приложениия,
lpszTemplate – указатель на строку имени шаблона, указанном в операторе DIALOG,
hwndOwner – идентификатор окна, создавшего диалоговую панель, dlgprc – адрес функции диалога.
б) DialogBoxParam имеет дополнительный пятый параметр LPARAM lParamInit - значение этого параметра передается через параметр lParam сообщения WM_INITDIALOG и может быть проанализировано на этапе создания диалоговой панели.
в) DialogBoxIndirect – для шаблона, сформированного в области памяти, аналогична функции DialogBox, но второй параметр – HGLOBAL hglbDlgTemplate – идентификатор глобального блока памяти, где подготовлен шаблон.
г) DialogBoxIndirectParam - аналогично функции DialogBoxIndirect + 5 параметр, как у DialogBoxParam
Функции DialogBox, DialogBoxParam, DialogBoxIndirect, и DialogBoxIndirectParam возвращают значение, передаваемое при завершении работы диалоговой панели с помощью функции EndDialog.
3. Для завершения работы используется – функция EndDialog(hwndDlg, nResult).
hwndDlg – идентификатор диалоговой панели, nResult – возвращает код завершения
Немодальные панели. Отличие циклов сообщений.
Диалоговые панели бывают трех типов: модальные, системные модальные и немодальные.
Немодальная диалоговая панель не блокирует работу основного окна приложения и его дочерних окон. Можно работать как с диалоговой панелью, так и с окном приложения.
Немодальные диалоговые панели очень удобны для объединения различных инструментальных средств, предназначенных для работы с объектом, расположенным в главном окне или в дочернем окне, созданным главным окном приложения.
Создание немодальных диалоговых панелей:
Должна быть использована одна из следующих функций:
а) int WINAPI CreateDialog(HINSTANCE hInstance,LPCSTR lpszTemplate, HWND hwndOwner, DLGPROC dlgprc);
hInstance – идентификатор текущей копии приложениия,
lpszTemplate – указатель на строку имени шаблона, указанном в операторе DIALOG,
hwndOwner – идентификатор окна, создавшего диалоговую панель, dlgprc – адрес функции диалога.
б) CreateDialogParam имеет дополнительный пятый параметр LPARAM lParamInit - значение этого параметра передается через параметр lParam сообщения WM_INITDIALOG и может быть проанализировано на этапе создания диалоговой панели.
в) CreateDialogIndirect – для шаблона, сформированного в области памяти, аналогична функции CreateDialog, но второй параметр – HGLOBAL hglbDlgTemplate – идентификатор глобального блока памяти, где подготовлен шаблон.
г) CreateDialogIndirectParam - аналогична DialogBoxIndirect + 5 параметр, как у CreateDialogParam
Функции CreateDialog, CreateDialogParam, CreateDialogIndirect, и CreateDialogIndirectParam возвращают значение, передаваемое при завершении работы диалоговой панели с помощью функции EndDialog.
Для отображения немодальной диалоговой панели сразу после создания стиль панели, описанный в шаблоне, должен включать в себя константу WS_VISIBLE. Для завершения работы - функция DestroyWindow, в качестве параметра идентификатор окна панели. Стиль DS_MODALFRAME указывать не надо.
Отличие циклов сообщений.
При создании модальной диалоговой панели в приложении создается второй цикл обработки сообщений, который действует до завершения работы модальной диалоговой панели (в коде обычный цикл обработки). Если же создается немодальная диалоговая панель, сообщения от органов управления, предназначенные для диалоговой панели, проходят через общую очередь сообщений приложения.
Для разделения этих сообщений цикл обработки должен вызывать функцию IsDialogMessage, в данном случае цикл будет выглядеть следующим образом
hwndDlg = (HWND)0;
while(GetMessage(&msg, 0, 0, 0))
{
if(hwndDlg == 0 || !IsDialogMessage(hwndDlg, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg); }}
Функция IsDialogMessage определяет, предназначено ли сообщение, определяемое параметром lpmsg, для немодальной диалоговой панели с идентификатором окна, равным hwndDlg. Если да, то функция сама выполняет обработку такого сообщения и возвращает значение TRUE. В противном случае возвращается значение FALSE.
Когда немодальная диалоговая панель будет создана, идентификатор ее окна будет записан в переменную hwndDlg. После этого в работу включится функция IsDialogMessage. Она будет "вылавливать" в очереди приложения сообщения, предназначенные для диалоговой панели hwndDlg и выполнять их обработку. Все остальные сообщения будут обработаны обычным образом функциями TranslateMessage и DispatchMessage.
Условие будет выполняться, когда сообщения предназначены для главного окна.