- •Лабораторный практикум «Основы разработки приложений Windows» Книга 1
- •Часть 1. Теоретические сведения4
- •Часть 2. Лабораторный практикум95
- •Часть 1 Теоретические сведения
- •1. Структура приложения Windows Простейшая программа с главным окном
- •Структура программы
- •Главная функция WinMain()
- •Регистрация класса окна
- •Создание и показ окна
- •Сообщения Windows и цикл их обработки
- •Оконная функция
- •Макрос handle_msg и структурирование программы
- •2. Интерфейс графических устройств
- •Простая программа, использующая средства gdi
- •Обработка сообщений wmpaint
- •Контекст устройства
- •Использование графических инструментов
- •3. Ресурсы: меню Простая программа с меню
- •Файл ресурсов
- •Описание меню в файле ресурсов
- •Сообщение wmcommand
- •Программное создание меню
- •Плавающее меню
- •Инструментальная панель
- •Всплывающие подсказки
- •0,"Первая строка"
- •1,"Вторая строка"
- •2,"Третья строка"
- •4. Ресурсы: диалоговые окна
- •Простая программа с меню и диалогом
- •Описание диалога в файле ресурсов
- •Обслуживание модального диалога
- •Модальный диалог как главное окно приложения
- •Немодальный диалог
- •Список в диалоговом окне
- •Окно редактирования и статический элемент управления
- •Графика в диалоговом окне
- •Перекрашивание диалогового окна и его элементов
- •Часть 2 Лабораторный практикум Работы лабораторного практикума Работа 1. Вызов функций Windows
- •Работа 2. Главное окно приложения (пример 1-1 из настоящего пособия)
- •Работа 3. Вывод в главное окно приложения текста и фигур (пример 2-1 из настоящего пособия)
- •Работа 4.Вывод в главное окно приложения текста и фигур (индивидуальное задание а)
- •Работа 5. Меню и модальный диалог (пример 4-1 из настоящего пособия)
- •Работа 6.Меню (индивидуальное задание в)
- •Работа 7.Модальный диалог в качестве главного окна приложения (индивидуальное задание с)
- •Работа 8.Вывод графика в главное окно приложения (индивидуальное заданиеD)
- •Работа 9. Немодальный диалог
- •Работа 10. Диалог с окном редактирования
- •Работа 11. Программное создание меню
- •Работа 12. Плавающее меню
- •Работа 13. График в диалоговом окне
- •Работа 14. Инструментальная панель (tool bar)
- •Работа 15. Инструментальная панель со всплывающими подсказками (tool tips)
- •Работа 16. Пользовательские пиктограммы и курсоры
- •Работа 17. Локализация программных продуктов
- •Индивидуальные задания лабораторного практикума
Список в диалоговом окне
Список (элемент управления класса LISTBOX) удобен тем, что позволяет отображать большие массивы числовой или символьной информации, а также выполнять над этими массивами такие действия, как просмотр всех элементов с помощью линейки прокрутки, добавление и удаление отдельных элементов, упорядочение, выборка элемента с заданным номером и др. Список, в частности, удобно использовать в простых приложениях без главного окна для наблюдения результатов вычислений, если эти результаты представляют собой массивы чисел или коротких строк.
Рассмотрим фрагменты программы 4-4, в которой список, включенный в диалоговое окно, заполняется числовой информацией, конкретно, массивом значений функцииe-x (рис.4.5).
Рис. 4.5. Список в диалоговом окне
/*Пример 4-4. Заполнение списка*/
/*Файл 4-4.RC*/
#include "4-4.h"
Dlg DIALOG 20, 20, 100, 108
STYLE WS_SYSMENU
CAPTION "Функции" {
CONTROL,"Экспонента", -1,"STATIC",SS_LEFT, 10,3,120,10
CONTROL "", ID_1, "LISTBOX",WS_VSCROLL | WS_BORDER,
10, 15, 84, 41
}
/*Файл 4-4.CPP*/
BOOL DlgOnInitDialog(HWND hwnd,HWND,LPARAM){
char str[20];
for (float x=0;x<5;x+=0.01){
sprintf(str,"%f %f",x,exp(-x));
SendDlgItemMessage(hwnd, ID_1, LB_ADDSTRING, 0,
(LPARAM)str);
}
return TRUE;
В файле ресурсов 4-4.RC описываются два элемента управления – статический элемент, т. е. в данном случае просто текст (слово"Экспонента"), используемый в качестве заголовка списка, и сам список (элемент классаLISTBOX), которому присвоен идентификаторID1 (определенный, разумеется, в файле4-4.H). Статическому элементу присвоен идентификатор -1, поскольку он заполняется текстом непосредственно в файле ресурсов, а программа с ним взаимодействовать не будет. Для списка указано сочетание констант стиляWS_VSCROLL и WS_BORDER,чтобы придать списку рамку и линейку вертикальной прокрутки. Список выступает в качестве главного окна приложения и создается в функцииWinMain() вызовом функцииDialogBox(). Заполняется список в функцииDlgOnInitDialog(), вызываемой при приходе в приложение сообщенияWMINITDIALOG. Заполнение списка осуществляется в цикле, в каждом шаге которого сначала с помощью функцииsprintf() формируется очередная символьная строка (аргументx функцииexp(-x) и само значение этой функции), а затем с помощью функцииSendDlgItemMessage() в элемент с идентификаторомID1, т. е. в список посылается сообщениеLBADDSTRING о добавлении строки с указанием имени добавляемой строкиstr. Как видно из текста программы, параметрwParam для сообщенияLB_ADDSTRING должен быть равен 0.
С помощью функции SendDlgItemMessage() в список можно посылать и другие сообщения. Так, сообщениеLBSETCURSEL позволяет выделить цветом требуемую строку списка; это сообщение можно использовать для начальной установки состояния списка. При щелчке мышью по той или иной строке списка она выделяется цветом; для получения номера этой выделенной строки предусмотрено сообщениеLBGETCURSEL.С помощью сообщенияLBDELETESTRING заданная строка удаляется из списка (чтобы очистить весь список, это сообщение следует поместить в цикл). СообщениеLBGETCOUNT возвращает число строк в списке, а сообщениеLBFINDSTRING позволяет найти в списке строку с указанным сочетанием символов. Всего для обслуживания списка предусмотрено около четырех десятков различных сообщений.