- •Глава 11 Окна диалога
- •Модальные окна диалога
- •Создание окна диалога About
- •Шаблон окна диалога
- •Диалоговая процедура
- •Вызов окна диалога
- •Дополнительная информация о стиле окна диалога
- •Дополнительная информация об определении дочерних окон элементов управления
- •Более сложное окно диалога
- •Работа с дочерними элементами управления окна диалога
- •Кнопки ok и Cancel
- •Позиции табуляции и группы
- •Рисование в окне диалога
- •Использование с окном диалога других функций
- •Определение собственных окон управления
- •Окна сообщений
- •Информация во всплывающих окнах
- •Немодальные окна диалога
- •Различия между модальными и немодальными окнами диалога
- •Новая программа colors
- •Программа hexcalc: обычное окно или окно диалога?
- •Творческое использование идентификаторов дочерних окон элементов управления
- •Диалоговые окна общего пользования
- •Модернизированная программа poppad
- •Изменение шрифта
- •Поиск и замена
- •Программа для Windows, содержащая всего один вызов функции
Программа для 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, которая только создает диалоговое окно, а всю обработку осуществляет в диалоговой процедуре.
