- •Московская финансово-промышленная академия
- •Содержание
- •Глава 1. Модель программирования приложений
- •1.1. Потребительские свойства Windows
- •1.2. Процессы в Windows и потоковая многозадачность
- •1.3. Динамические библиотеки
- •1.4. Программное обеспечение для создания Win-приложений
- •Спецификация префиксов венгерской нотации
- •Глава 2. Обзор возможностей программирования
- •2.1. Общий взгляд на программирование в Windows
- •2.2. Взаимодействие Windows с программой
- •2.3. Win32 api: прикладной интерфейс для Windows
- •2.4. Компоненты окна
- •2.5. Основы приложений Windows
- •2.6. Каркас приложения Windows
- •2.7. Определение класса окна
- •Значения параметра lpszName
- •Наиболее употребляемые макросы для встроенных курсоров
- •Типы системных кистей
- •2.8. Создание окна
- •Наиболее распространенные стили
- •Параметры способа отображения nHow
- •2.9. Цикл обработки сообщений
- •2.10. Оконная функция
- •Типы префиксов
- •Глава 3. Обработка сообщений Windows
- •3.1. Что такое сообщения?
- •3.2. Обработка нажатая клавиш
- •Битовая карта lParam
- •3.3. Обработка сообщений wm_paint
- •3.4. Обработка сообщений «мыши»
- •3.5. Генерация сообщения wm_paint
- •3.6. Генерация сообщений таймера
- •Глава 4. Ресурсы и меню
- •4.1. Окна сообщений MessageBox
- •Значения функции MessageBox
- •Значения wMbType
- •4.2. Представляем меню
- •4.3. Использование ресурсов
- •Параметры menu
- •Параметры элементов меню
- •4.4. Включение меню в программу. Обработка команд
- •4.5. Включение акселераторов сменю
- •4.6. Загрузка таблицы акселераторов
- •Глава 5. Создание диалогов
- •5.1. Взаимодействие Win-диалогов с пользователем
- •5.2. Модальные диалоги: обработка сообщений
- •5.3. Активизация и создание простейшего диалога
- •5.4. Определение ресурсов диалога
- •Стили диалога
- •5.5. Оконная функция диалога
- •5.6. Основы работы со списками
- •Типы сообщений
- •5.7. Инициализация списка и выбор элементов
- •5.8. Окно ввода
- •5.9. Использование немодального диалога
- •Глава 6. Графические образы, иконки и курсоры
- •6.1. Иконка и курсор
- •6.2. Определение малой иконки
- •6.3. Работа с растровыми изображениями
- •Значения параметра dwRaster
- •6.4. Работа с несколькими растровыми изображениями
- •Глава 7. Более подробно об элементах управления
- •7.1. Работа с контрольными переключателями
- •7.2. Статические элементы
- •7.3. Работа с селекторными кнопками
- •7.4. Линейки прокрутки
5.6. Основы работы со списками
Продолжая исследование свойств диалога, добавим в диалог из предыдущего примера еще один элемент управления. Одним из часто используемых элементов управления является список (list box). Оператор задания списка LISTBOX имеет вид:
LISTBOX ID, X, Y, Width, Height[, стиль]
Здесь ID является идентификатором списка, координаты левого верхнего угла задаются значениями X и Y, а размеры – значениями Width и Height. Стиль определяет тип списка (используемые здесь значения приведены в табл. 5.1).
Изменим определение диалога в файле Mydialog.rc, чтобы добавить список. Во-первых, добавим описание списка:
LISTBOX ID_LB1, 2, 10, 47, 28, LBS_NOTIFY | WS_CHILD |
WS_VISIBLE | WS_BORDER | WS_VSCROLL|WS_TABSTOP
Далее добавим следующую кнопку:
PUSHBUTTON "Выбери фрукт", IDD_SELFRUIT, 2, 45, 50,
14, WS_GHILD | WS_VISIBLE | WS_TABSTOP
Наконец, изменим положение кнопок Красный и Зеленый так, чтобы начало кнопки Красный располагалось в точке 57, 45, а кнопки Зеленый – в точке 95, 45. После внесения изменений описание диалога должно выглядеть так:
MYDB DIALOG 18, 18, 142, 92
CAPTION "Первый диалог"
STYLE DS_MODALFRAME|WS POPUP|WS_CAPTION|WS_SYSMENU
{
DEFPUSHBUTTON "Красный", IDD_RED, 57,45,36,14,
WS_CHILD|WS_VISIBLE|WSJTABSTOP
PUSHBUTTON "Зеленый", IDD_GREEN, 95,45,36,14,
WS_CHILD|WS_VISIBLE|WS_TABSTOP
PUSHBUTTON "Сброс", IDCANCEL, 52,65,37,14,
WS_CHILD|WS_VISIBLE|WS_TABSTOP
PUSHBUTTON "Выбери фрукт", IDD_SELFRUIT, 2,45,50,14,
WS_CHILD|WS_VISIBLE|WS_TABSTOP
LISTBOX ID_LB1, 2,10,47,28, LBS_NOTIFY|WS_CHILD|
WS_VISIBLE|WS_BORDER|WS_VSCROLL|WS_TABSTOP
}
Необходимо также добавить макроимена в файл Mydialog.h:
#define IDD_SELFRUIT 105
#define ID_LB1 106
Здесь ID_LB1 – идентифицирует список, а IDD_SELFRUIT – кнопку Выбери фрукт, которые введены в диалог.
При работе со списками применяются две основные операции. Вначале (при первом отображении диалога) следует проинициализировать список, то есть указать элементы, которые будут отображаться в списке (по умолчанию список вначале всегда пустой). После этого следует определить, как Ваша программа должна реагировать на действия пользователя – изменение текущего выбранного элемента списка и т.п.
Списки могут генерировать различные сообщения. Мы будем использовать только одно: LBN_DBLCLK. Это сообщение генерируется в результате двойного щелчка мышью на одном из элементов списка и содержится в HIWORD(wParam), когда список передает в диалоговую функцию сообщение WM_COMMAND. (Список при этом должен иметь стиль LBS_NOTIFY – в числе прочих.) После того, как пользователь сделал выбор элемента двойным нажатием мыши, необходимо запросить список, какой именно элемент был выбран.
В отличие от кнопки список является элементом управления, который не только генерирует сообщения, но и получает их. Существуют несколько типов сообщений, которые можно передавать списку. В нашем примере будем использоваться только два, которые приведены в таблице 5.2.
Таблица 5.1