Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум «Основы разработки приложений Windows» книга 1.DOC
Скачиваний:
107
Добавлен:
10.05.2014
Размер:
721.41 Кб
Скачать

Список в диалоговом окне

Список (элемент управления класса 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, т. е. в список посылается сообщениеLBADD­STRING о добавлении строки с указанием имени добавляемой строкиstr. Как видно из текста программы, параметрwParam для сообщенияLB_ADDSTRING должен быть равен 0.

С помощью функции SendDlgItemMessage() в список мож­но посылать и другие сообщения. Так, сообщениеLBSETCURSEL позволяет выделить цветом требуемую строку списка; это сообщение можно использовать для начальной установки состояния списка. При щелчке мышью по той или иной строке списка она выделяется цветом; для получения номера этой выделенной строки предусмотрено сообщениеLBGETCURSEL.С помощью сообщенияLBDELETESTRING заданная строка удаляется из списка (чтобы очистить весь список, это сообщение следует поместить в цикл). СообщениеLBGETCOUNT возвращает число строк в списке, а сообщениеLBFINDSTRING позволяет найти в списке строку с указанным сочетанием символов. Всего для обслуживания списка предусмотрено около четырех десятков различных сообщений.