Win32 API. Библиотека стандартных диалоговых окон Страница 25. Использование общих диалоговых окон
|
Страница 25 из 30
Использование общих диалоговых окон Выбор цвета Эта статья описывает типовой код, который отображает на экране диалоговое окно Цвет (Color) тогда, когда пользователь собирается выбрать какой-нибудь цвет. Этот типовой код сначала инициализирует структуру CHOOSECOLOR, а затем вызывает функцию ChooseColor, чтобы изобразить диалоговое окно. Если функция возвращает значение ИСТИНА (TRUE), то это служит признаком того, что пользователь выбрал цвет, а типовой код использует выбранный цвет для создания новой сплошной кисти. Этот пример использует структуру CHOOSECOLOR для инициализации диалогового окна как ниже указано: - Инициализирует элемент lpCustColors с указателем на статический массив COLORREF. Цвета в массиве первоначально черные, но статический массив защищает пользовательские цвета, созданные пользователем, посредством использования последующего вызова ChooseColor.
- Устанавливает флажок CC_RGBINIT и инициализирует элемент rgbResult, чтобы определить цвет, который первоначально был выбран, когда диалоговое окно открывалось. Если он не определен, изначально выбирается черный цвет.
- Пример, использует статическую переменную rgbCurrent, чтобы сохранить значение выбора между обращениями к ChooseColor.
- Устанавливает флажок CC_FULLOPEN, так что диалоговое окно всегда отображает пользовательские дополнительные цвета.
CHOOSECOLOR cc;// структура стандартного диалогового окна static COLORREF acrCustClr[16];// массив пользовательских цветов HWND hwnd;// окно владелец HBRUSH hbrush;// дескриптор кисти static DWORD rgbCurrent;// выбор начального цвета
// Инициализация CHOOSECOLOR ZeroMemory(&cc, sizeof(CHOOSECOLOR)); cc.lStructSize = sizeof(CHOOSECOLOR); cc.hwndOwner = hwnd; cc.lpCustColors = (LPDWORD) acrCustClr; cc.rgbResult = rgbCurrent;
cc.Flags = CC_FULLOPEN | CC_RGBINIT;
if (ChooseColor(&cc)==TRUE) { hbrush = CreateSolidBrush(cc.rgbResult); rgbCurrent = cc.rgbResult; } |