- •Часть 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. Панель для выбора шрифта
2.4.3. Сообщения от редактора текста
Функция окна редактора текста посылает функции родительского окна сообщение WM_COMMAND. При этом младшее слово параметра wParam содержит идентификатор, а параметр IParam - дескриптор окна редактора текста. Старшее слово параметра wParam содержит код извещения о совершенном действии. В следующей таблице перечислены коды извещений:
Код |
Пояснение |
EN CHANGE |
Текст в окне редактирования изменился |
EN ERRSPACE |
Недостаточно памяти для выполнения действия |
ENHSCROLL |
Нажата горизонтальная полоса просмотра редактора, но свертка текста еще не произошла |
EN KILLFOCUS |
Текстовый редактор потерял фокус ввода |
EN MAXTEXT |
Превышен заданный для редактора размер текста |
EN SETFOCUS |
Текстовый редактор получил фокус ввода |
EN UPDATE |
Последняя операция редактирования выполнена, но еще не отразилась на содержимом редактора. За этим извещением после отображения изменений придет извещение с кодом EN CHANGE |
EN VSCROLL |
Нажата вертикальная полоса просмотра редактора, но свертка текста еще не произошла- |
Приложения обрабатывают, по крайней мере, извещение с кодом EN_ERRSPACE.
П 2.5. Списки строк
2.5.1. Создание списка
Списки строк создают на базе класса "listbox". Строки в списке нумерует операционная система, и номер первой строки равен 0. Списки могут быть одноколоночные и многоколоночные; с вертикальной (для одноколоночных списков) и горизонтальной (для многоколоночных списков) полосой просмотра. При создании списка первым аргументом функции CreateWindow является указатель на строку "listbox", а третий аргумент задают с помощью табл. 2.6. Например:
#define ID.LIST 111
hListBox = CreateWidow(“listbox"; NULL, WS CHILD|WS_VlSIBLE|LBS_STANDARDl
LBS_WANTKEYBOARDINPUT, 30,30,200,100, hwnd, (HMENU)ID_LIST,hInst, NULL);
Второй аргумент функции должен быть указан как NULL. Дополнительно к стилям окна WS_CHILD и WS_VISIBLE указывают стили списка, имена которых имеют префикс LBS_.
2.5.2. Сообщения от списка
Список со стилем LBS_NOTIFY посылает в функцию родительского окна сообщение WM^COMMAND. При этом младшее слово параметра wParam равно идентификатору списка. Параметр IParam содержит дескриптор списка. Старшее слово параметра wParam содержит один из следующих кодов извещения:
Код извещения |
Описание |
LBN_DBLCLK |
Двойной щелчок левой клавишей мыши по строке списка |
LBN_ERRSPACE |
Ошибка при попытке заказать дополнительную память |
LBN_KILLFOCUS |
Список потерял фокус ввода |
LBN_SELCANCEL |
Пользователь отменил выбор в списке |
LBN_SELCHANGE |
Изменился номер выбранной строки |
LBN_SETFOCUS |
Список получил фокус ввода |
2.5.3. Сообщения для списка
Приложение может посылать списку сообщения, вызывая функцию SendMessage. Символические имена этих сообщений имеют префикс LB_. Коды некоторых сообщений перечислены в следующей таблице:
Код сообщения и значения wParam и IParam
|
Пояснение
|
LB ADDSTRING, 0, (LPARAM)lpszStr
|
Добавить в список строку IpszStr. Возвращает номер строки в списке
|
LB_DELETESTRING,. (WPARAM)nIndex и OL
|
Удалить строку с номером nindex из списка. Возвращает количество оставшихся в списке строк
|
LBDIR, (WPARAM)(UINT)uAttr и (LPARAM)lpszFileSpec
|
Заполнить список именами дисков, каталогов и файлов атрибутов uAttr по шаблону IpszFileSpec из текущего каталога. Возвращает номер последнего добавленного в список имени файла
|
LB_FINDSTRING, (WPARAM)nStart и (LPARAM)lpszStr
|
Начиная от строки с номером nStart, искать строку с префиксом IpszStr. Возвращает номер найденной строки или код ошибки
|
LB_FINDSTRINGEXACT, (WPARAM)nStart и (LPARAM)lpszStr
|
Начиная от строки с номером nStart, искать строку IpszStr. Возвращает номер найденной строки или код ошибки
|
LB_GETCARETINDEX, 0 и OL
|
Определение номера строки, имеющей фокус ввода. Возвращает номер этой строки или код ошибки
|
LB_ GETCOUNT, 0 и ol
|
Определение количества строк в списке. Возвращает количество строк в списке или код ошибки
|
LB_ GETCURSEL, 0 и OL
|
Определение номера выделенной строки. Возвращает номер выделенной строки или код ошибки
|
LB_GETSEL, |(WPARAM)nIndex и OL
|
Определить, выбрана ли строка с номером nindex. Возвращает положительное число, если строка выбрана, и 0, если не выбрана или код ошибки
|
LB_GETSELCOUNT, 0 и OL.
|
Определить количество выбранных строк. Возвращает количество выбранных строк или код ошибки
|
LB_GETSELITEMS, (WPARAM)cI и (LPARAM)(int FAR *)lpI
|
Заполнить буфер 1рI размера сI номерами выбранных строк. Возвращает количество записанных в буфер номеров или код ошибки
|
LB_GETTEXT, (WPARAM)nIridex и (LPARAM)(hrt FAR *)1рВ
|
Копировать текст строки с номером nindex в буфер 1рВ, Возвращает длину строки или код ошибки
|
LBGETTEXTLEN, (WPARAM)nIndex и OL
|
Определить длину строки с номером nindex. Возвращает длину строки или код ошибки
|
LB_GETTPOINDEX, 0 и 0L
|
Определить номер первой отображаемой строки. Возвращает номер строки или код ошибки
|
LB_INSERTSTRING, (WPARAM)nIndex и (LPARAM)(int FAR *)lpB
|
Вставить элемент 1рВ в список под номером nindex. Возвращает номер, под которым вставлена строка, или код ошибки
|
LB RESETCONTENT, 0 и 0L
|
Удалить все строки из списка. Возвращаемое значение: не используется
|
LB_SELECTSTRING, (WPARAM)nIndexStart и (LPARAM)(int FAR *)lpB
|
Начиная с позиции nIndexStart, найти и выделить строку с префиксом 1рВ. Возвращает номер найденной строки или код ошибки
|
LB_SELITEMRANGE (WPARAM)(BOOL)fSelect; MAKELPARAM(wF, wL)
|
Выделить (fSelect^TRUE) или отменить выделение (fSelect= FALSE) строк с номерами от wF до wL. Возвращает код ошибки
|
LB_SETCARETINDEX, (WPARAM)nIndex и MAKELPARAM(fS, 0)
|
Передать фокус ввода строке с номером nindex. Если fS=TRUE,свертка выполняется до тех пор, пока указанная строка не будет видна хотя бы частично, если FALSE - до тех пор, пока строка не будет видна полностью. Возвращает код ошибки
|
LB_SETCURSEL, (WPARAM)nIndex и OL
|
Отменить предыдущий выбор и выбрать строку с номером nindex. Если nindex равно -1 отменяется выделение всех строк, возвращается значение LBERR, что в данном случае не говорит об ошибке. Иначе (nindex не равно -1) возвращает код ошибки
|
LB_SETTOPINDEX, (WPARAM)nIndex и OL
|
Свертка списка до тех пор, пока строка с номером nindex не станет видимой. Возвращает код ошибки
|