
- •Основные компоненты 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), компиляция
Линейки прокрутки, переключатели, окна пометки, окна списка.
Кнопки, переключатели, полосы просмотра, редакторы текста и др. относятся к органам управления. Они создаются как дочерние окна на базе предопределенных классов.
1. Кнопки, переключатели (переключатели – кнопки с 3-мя состояниями (вкл, выкл и неактивен)
Для создания кнопки нужно создать дочернее окно на базе предопределенного класса "button". После этого родительское окно будет получать от кнопки сообщение с кодом WM_COMMAND. Этим сообщением кнопка информирует родительское окно о том, что с ней что - то сделали, например, нажали.
А) Создание кнопки:
HWND CreateWindow (LPCSTR lpszClassName, LPCSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hwndParent, HMENU hmenu, HINSTANCE hinst, void FAR* lpvParam);
1 параметр – имя класса "button".
2 параметр – надпись на кнопке – указатель на строку
3 параметр – набор битов – стиль окна, обязательно WS_CHILD
4 и 5 параметры – координаты кнопки относительно левого верхнего угла родительского окна
6 и 7 параметры – ширина и высота кнопки
8 параметр – идентификатор родительского окна; 9 параметр – идентификатор самой кнопки
10 параметр – идентификатор приложения
11 параметр – дальний указатель на область данных, для кнопки – 0.
Б) Стили:
BS_3STATE – переключатель может нах. в 3 состояниях: вкл, выкл и неактив.
BS_AUTO3STATE – внешний вид изменяется автоматически
BS_AUTORADIOBUTTON – в виде окружности, 2 состояния, изм-ся автоматически
BS_DEFPUSHBUTTON – стандартная кнопка с жирной рамкой
BS_GROUPBOX – Прямоугольная область, внутри которой могут находиться другие кнопки. Обычно используется в диалоговых панелях. Этот орган управления не воспринимает сообщения от мыши или клавиатуры.
В) Способы управления:
А) Вызов специальных функций, например MoveWindow (новое расположение и размеры), EnableWindow (разрешение или запрет поступления сообщений), ShowWindow (показать или скрыть - SW_HIDE и SW_SHOWNORMAL). SetWindowText (новый текст на кнопке)
Б) Отправка сообщения, в ответ на которые кнопка будет менять вид (2 способа – функции PostMessage и SendMessage – через очередь приложения и минуя ее).
Для перерисовки посылается сообщение BM_SETCHECK: SendMessage(hButton, BM_SETCHECK, 1, 0L);
Переключатели в поле wParam передают 0 – выкл, 1- вкл или 2 – неактив. сост-е. Параметр lParam сообщения BM_SETCHECK должен быть равен 0.
Узнать состояние – посылать сообщение BM_GETCHECK:
WORD nState;
nState = (WORD) SendMessage(hButton, BM_GETCHECK, 0, 0L);
Окна пометки: окна на базе класса “button” (кнопки) со стилем BS_CHECKBOX.
2. Полосы прокрутки.
Полосы просмотра (Scrollbar) широко используются в приложениях Windows для просмотра текста или изображения, которое не помещается в окне. «Scrollbar» - класс, на основе которого реализуется полоса просмотра. Бывает вертикальной и горизонтальной и посылает в родительское окно WM_HSCROLL и WM_VSCROLL. Перемещение дискретно (интервал задается при инициализации). Бывает 2 типа позиционирования: точное – нажатием на кнопки побокам от полосы и грубое – кликами выше или ниже ползунка на полосе прокрутки.
А) Создание
HWND hScroll = CreateWindow("scrollbar", NULL, WS_CHILD | WS_VISIBLE | SBS_HORZ, 20, 400, 100, 50, hWnd, IDC_SCROLLBAR, hInstance, NULL);
1 – класс, на базе которого создается полоса просмотра; 2 – заголовок окна, должен быть NULL
3 – флаги полосы; 4-7 – расположение, размеры; 8 – идентификатор окна; 9 – идентификатор полосы просмотра (Определяет не саму полосу, а прямоугольник для полосы).
Б) Стили ( флаги SBS только для полос просмотра):
SBS_BOTTOMALIGN – Создается горизонтальная полоса просмотра, высота которой равна высоте системной полосы просмотра. Выполняется выравнивание нижнего края полосы просмотра по нижнему краю прямоугольника, координаты и размер которого определен при вызове функции CreateWindow. Этот стиль должен использоваться вместе со стилем SBS_HORZ.
SBS_HORZ (SBS_VERT)– Создается горизонтальная (вертикальная) полоса просмотра. Размер и расположение полосы просмотра определяются при вызове функции CreateWindow
SBS_LEFTALIGN – аналогично 1, по левому краю.
SBS_SIZEBOX – орган управления с небольшим прямоугольником серого цвета (Size Box). Если вы установите курсор мыши внутрь органа управления, нажмете левую клавишу мыши и будете перемещать мышь, родительское окно будет получать сообщения, аналогичные сообщениям от рамки, предназначенной для изменения размера окна.
В) Коды полос:
SB_LEFT (SB_RIGHT), SB_TOP(SB_BOTTOM) – влево(вправо) для горизонтальных, вверх(вниз) - для вертикальных
SB_ENDSCROLL – отпускаете мышь при работе с полосой
Г) Сообщения от полос:
WM_HSCROLL и WM_VSCROLL содержат в wParam коды:
SB_LEFT, SB_RIGHT – сдвиг до упора влево и врпаво
SB_LINEUP, SB_LINELEFT,SB_LINERIGHT,SB_LINEDOWN – сдвиг на одну позицию.
SB_PAGELEFT, SB_PAGEUP (и так далее) – сдвиг на одну страницу
SB_ENDSCROOL – окончание работы мышью
Д) Необходима инициализация:
Указываем диапазон изменений значений ползунка:
void WINAPI SetScrollRange(HWND hwnd, int fnBar, int nMin, int nMax, BOOL fRedraw);
2 параметр – тип полосы просмотра: SB_CTL – как орган упр. или SB_HORZ и SB_VERT.
1 параметр – если SB_CTL – ID органа управления, иначе ID Окна, в котором создается полоса.
3 и 4 параметры – дальние указатели на целые диапазона (Диапоазон не больше 32767)
5 – нужна ли перерисовка.
Е) Управление:
int WINAPI SetScrollPos(HWND hwnd, int fuBar, int nPos, BOOL fRepaint);
3 параметр – положение ползунка. ShowScrollBar – показать или скрыть полосу прокрутки