- •Часть II. Проектирование пользовательских интерфейсов средствами win32 api п 1. Основы приложений для Windows. П 1.1 Типы данных Windows.
- •П. 1.2 Главная функция приложения WinMain().
- •П. 1.3 Оконная функция.
- •П. 1.4 Сообщения от окна
- •П. 1.5 Сообщения от мыши
- •1.5.1 Сообщения мыши, связанные с рабочей областью окна
- •1.5.3 Двойные щелчки мыши
- •1.5.4 Сообщения мыши, связанные с нерабочей областью окна
- •1.5.5 Захват мыши
- •П. 1.6 Сообщения от клавиатуры
- •1.6.1 Синхронизация событий клавиатуры
- •1.6.2 Игнорирование событий клавиатуры
- •1.6.3 Понятие фокуса ввода
- •1.6.4 Категории клавиатурных сообщений
- •1.6.5 Аппаратные сообщения
- •1.6.6 Символьные сообщения
- •П. 1.7 Таймеры Windows и служба времени.
- •П. 1.8 Классы окон
- •1.8.1. Описание используемых классом окон ресурсов
- •1.8.2. Регистрация класса окон
- •1.8.3. Создание окон
- •1.8.4. Стили окна
- •П. 1.9 Цикл обработки сообщений
- •П. 1.10 Структура текста приложения
- •П. 1.11 Вспомогательные функции создания окон
- •1.11.1 Функции отображения и перерисовки окон
- •1.11.2 Функции поиска и определения состояния окон
- •1.11.3 Функции перемещения окон
- •1.11.4 Сообщения приложения для пользователя
- •П. 1.12 Примеры создания окон
- •П 2. Органы управления
- •П 2.1. Кнопки
- •2.1.1. Создание кнопок
- •2.1.2. Кнопки и сообщения
- •2.1.3. Флажки и переключатели
- •П 2.2. Статический орган управления
- •П 2.3. Полоса прокрутки
- •2.3.1. Общие сведения
- •2.3.2. Создание полосы прокрутки
- •2.3.3. Простейшие полосы прокрутки
- •2.3.4. Сообщения от полосы прокрутки
- •2.3.5. Управление полосой прокрутки
- •П 2.4 Редактор текста
- •2.4.1. Создание редактора
- •2.4.2. Сообщения для редактора текста
- •2.4.3. Сообщения от редактора текста
- •П 2.5. Списки строк
- •2.5.1. Создание списка
- •2.5.2. Сообщения от списка
- •2.5.3. Сообщения для списка
- •П. 2.6. Комбинированный список
- •2.6.1. Создание комбинированного списка
- •2.6.2. Коды извещения
- •2.6.3. Сообщения для комбинированного списка
- •П 3. Вывод в окно
- •П. 3.1. Виды контекста отображения
- •П 3.2. Сообщение wm_paint
- •П 3.3. Установка атрибутов контекста отображения для текста
- •П 3.4. Вывод текста
- •3.4.1. Настройка параметров шрифта
- •3.4.2. Выбор шрифта в контекст отображения
- •3.4.3. Функции вывода текста
- •3.4.4. Определение метрик шрифта
- •П 3.5. Рисование геометрических фигур
- •3.5.1 Установка атрибутов контекста отображения для рисования.
- •3.5.1. Функции рисования точки
- •3.5.2. Функции рисования линий
- •3.5.3. Функции рисования замкнутых фигур
- •3.5.4 Функции создания и рисования регионов
- •П. 4 Ресурсы приложения и их использование. П. 4.1 Файл ресурсов.
- •П 4.2 Главное меню
- •П. 4.2.1 Элементы меню
- •П. 4.2.2 Создание меню
- •П. 4.2.3 Сообщения от меню
- •П. 4.3. Плавающее меню
- •П. 4.4. Акселераторы
- •П. 4.5. Панель инструментов
- •4.5.1. Создание панели инструментов
- •4.5.2. Управление состоянием кнопок панели
- •4.5.3. Вывод подсказок в панели инструментов
- •П. 4.6. Строка состояния
- •4.6.1. Создание строки состояния
- •4.6.2. Сообщения о меню в строке состояний
- •П 5. Диалоговые панели п. 5.1. Характеристики диалоговых панелей
- •5.1.1. Единицы диалоговой панели '
- •5.1.2. Стили диалоговой панели
- •5.1.3. Функция окна диалоговой панели
- •П. 5.2. Создание диалоговой панели
- •5.2.1 Создание окна модальной диалоговой панели
- •5.2.2 Создание окна немодальной диалоговой панели
- •П. 5.3 Разработка и компоновка диалоговых панелей.
- •П. 5.4 Сообщения и диалоговые панели
- •П. 5.5. Стандартные диалоговые панели
- •5.5.1. Панели для открытия или сохранения файлов
- •5.5.2. Панель для выбора цветов
- •5.5.3. Панель для выбора шрифта
П. 4.6. Строка состояния
Строку состояния используют для отображения текстов о текущем состоянии приложения. Функции для работы со строкой состояния, как и функции для работы с панелью инструментов, объявлены в файле commctrl.h и описаны в файле comctl32.dll.
4.6.1. Создание строки состояния
Для создания окна строки состояния вызывают специальную функцию CreateStatusWindow:
HWND CreateStatusWindow( LONG style, LPCTSTR lpszText,
HWND hwndParent, UINT wlD);
Она в нижней части окна hwndParent создает окно строки состояния и возвращает его дескриптор.
Параметры:
1. style - стиль окна строки состояния. Обязательно содержит комбинацию стилей WS_CHILD | WS_VISIBLE.
2. lpszText - указатель на текст, изначально отображаемый в строке состояния, может быть равен NULL.
3. hwndParent - дескриптор родительского окна.
4. wID - идентификатор окна строки состояния. Процедура окна использует wID для идентификации сообщений от строки состояния.
Задача. Создать строку состояния из трех секций. При нажатии левой и правой клавиш мыши в секциях отображать различный текст.
Листинг Приложение со строкой состояния.
#include <windows.h>
#incdude <commctrl.h>
#pragma comment (lib,"comctl32.!ib")
#define ID_STATUS 200
BOOL RegClass(WNDPROC, LPCTSTR, UlNT);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE hlnstance;
char szClass[] ="StatusClass";
int WINAPI WinMain(HINSTANCE hlnstance,
HINSTANCE hPrevlnstance, LPSTR lpszCmdLine, int nCmdShow)
{ }
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg,
WPARAM wParam, LPARAM IParam)
{ static HWNDhStatus;
static int pParts[3];
static short cx;
switch (msg) {
case WM_SIZE:
{ MoveWindow(hStatus, 0,0,0,0, TRUE);
cx=LOWORD(IParam);
pParts[0]=cx-200;
pParts(1]=cx-100;
pParts{2]=cx;
SendMessage(hStatus, SB_SETPARTS, 3,0-PARAM)pParts);
return 0; }
case WM_CREATE.
{ hStatus=CreateStatusWindow( WS_CHlLD | WS_VISIBLE, "Готово",
hwnd, ID_STATUS); retum 0,
}
case WM_LBUTTONDOWN:
{ SendMessage(hStatus,SB_SETTEXT,0,
(LONG)'Первая секция строки состояния”;
SendMessage(hStatus,SB SETTEXT,1,
(LONG)"Cooбщение 2";
SendWtessageOiStatus,SB_SETTEXTA
(LONG)"Сообщение З");
return 0;
}
case WM_RBUTTONOOWN:
{ SendMessage(hStatus, SB_SETTEXT,0, (LONG)"Сообщение 1");
SendMessage(hStatus,SB_SETTEXT,1,(LONG);
return O;
}
case WM DESTROY: {PostQuitMessage(0); return 0;}
}
retum DefWindowProc0wnd, msg, wParam, IParam);
}
Проанализируем это приложение.
1. Функция окна приложения содержит описания дескриптора для окна строки статуса hStatus и массива pParts:
static HWND hStatus;
static lnt pParts[3};
Массив pParts нужен для разбиения окна строки состояния на 3 секции (имя массива и количество секций могут быть другими).
2. На этапе создания окна приложения создают и окно строки состояния:
hStatus=CreateStatusWindow(WS_CHILD|WS VISIBLE, "Готово", hwnd, ID_STATUS);
Здесь второй аргумент "Готово" будет по умолчанию отображен в первой секции. Этот аргумент может быть указан как NULL. Тогда строка состояния изначально не содержит никакого текста.
3. При любых изменениях размеров окна перемещают окно строки состояния:
MoveWindow( hStatus, 0,0,0,0, TRUE);
Как и в случае панели инструментов, все координаты перемещения могут быть равны нулю. Предопределенная функция окна строки состояния всегда размещает строку состояния в нижней части рабочей области родительского окна. Ширина строки состояния при этом равна ширине рабочей области.
Далее определены координаты правых границ секций:
cx=LOWORD(lParam);
pParts[0]=cx-200;
pParts[1]=cx-100;
pParts[2]=cx;
Например, правая граница первой секции равна cx-200.
Окну строки состояния сообщают о количестве и правых границах секций: SendMessage( hStatus, SB_SETPARTS, 3, (LPARAM)pParts);
4. После нажатия левой клавиши мыши над рабочей областью окна приложения во все секции строки состояния записывают тексты сообщений. Например:
SendMessage( hStatus, SB_SETTEXT, 0,(LONG)”Первая секция строки состояния");
Здесь третий аргумент вызова функции SendMessage равен номеру секции. Причем номер первой секции равен 0.
Аналогично обрабатывают нажатие правой клавиши мыши.