Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ch-11.doc
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
1.26 Mб
Скачать

Программа для Windows, содержащая всего один вызов функции

К настоящему времени нами были созданы две программы, в которых имеется возможность просматривать выбираемые цвета: программа COLORS1 в главе 8 и программа COLORS2 в этой главе. Теперь настал черед программы COLORS3, в которой функция Windows вызывается только один раз. Исходный код программы COLORS3 представлен на рис. 11.13.

Единственной функцией Windows, которая вызывается в программе COLORS3, является функция ChooseColor — это еще одна функция библиотеки диалоговых окон общего пользования. Окно диалога, которое она выводит на экран, показано на рис. 11.14. Процесс подбора цветов похож на тот, который был в программах COLORS1 и COLORS2, но он несколько более интерактивный.

COLORS3.MAK

#-----------------------

# COLORS3.MAK make file

#-----------------------

colors3.exe : colors3.obj

$(LINKER) $(GUIFLAGS) -OUT:colors3.exe colors3.obj $(GUILIBS)

colors3.obj : colors3.c

$(CC) $(CFLAGS) colors3.c

COLORS3.C

/*----------------------------------------------

COLORS3.C -- Version using Common Dialog Box

(c) Charles Petzold, 1996

----------------------------------------------*/

#include <windows.h>

#include <commdlg.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

static CHOOSECOLOR cc ;

static COLORREF crCustColors[16] ;

cc.lStructSize = sizeof (CHOOSECOLOR) ;

cc.hwndOwner = NULL ;

cc.hInstance = NULL ;

cc.rgbResult = RGB (0x80, 0x80, 0x80) ;

cc.lpCustColors = crCustColors ;

cc.Flags = CC_RGBINIT | CC_FULLOPEN ;

cc.lCustData = 0L ;

cc.lpfnHook = NULL ;

cc.lpTemplateName = NULL ;

return ChooseColor (&cc) ;

}

Рис. 11.13. Программа COLORS3

В функции ChooseColor используется структура типа CHOOSECOLOR, а для хранения выбранных пользователем в окне диалога цветов — массив из 16 элементов типа COLORREF (DWORD). Поле rgbResult может быть инициализировано значением того цвета, который в дальнейшем появится на экране, если в поле Flags установлен флаг CC_RGBINIT. При нормальном использовании функции, в поле rgbResult устанавливается тот цвет, который выбирает пользователь.

Рис. 11.14. Вид экрана программы COLORS3

Обратите внимание, что поле hwndOwner окна диалога Color устанавливается в NULL. Когда функция ChooseColor для вывода на экран окна диалога вызывает функцию DialogBox, третий параметр функции DialogBox также устанавливается в NULL. Такая установка совершенно нормальна. Она означает, что у окна диалога нет родительского окна. В панели задач Windows 95 появится заголовок диалогового окна, и будет казаться, что окно диалога функционирует во многом так, как обычное окно.

Этот прием можно использовать для создания в программе своих собственных окон диалога. Или создать такую программу для Windows, которая только создает диалоговое окно, а всю обработку осуществляет в диалоговой процедуре.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]