Win32 API. Библиотека стандартных диалоговых окон
Страница 25. Использование общих диалоговых окон


 Использование общих диалоговых окон

 Выбор цвета

Эта статья описывает типовой код, который отображает на экране диалоговое окно Цвет (Color) тогда, когда пользователь собирается выбрать какой-нибудь цвет. Этот типовой код сначала инициализирует структуру CHOOSECOLOR, а затем вызывает функцию ChooseColor, чтобы изобразить диалоговое окно. Если функция возвращает значение ИСТИНА (TRUE), то это служит признаком того, что пользователь выбрал цвет, а типовой код использует выбранный цвет для создания новой сплошной кисти.

Этот пример использует структуру CHOOSECOLOR для инициализации диалогового окна как ниже указано:

  1. Инициализирует элемент lpCustColors с указателем на статический массив COLORREF. Цвета в массиве первоначально черные, но статический массив защищает пользовательские цвета, созданные пользователем, посредством использования последующего вызова ChooseColor.
  2. Устанавливает флажок CC_RGBINIT и инициализирует элемент rgbResult, чтобы определить цвет, который первоначально был выбран, когда диалоговое окно открывалось. Если он не определен, изначально выбирается черный цвет.
  3. Пример, использует статическую переменную rgbCurrent, чтобы сохранить значение выбора между обращениями к ChooseColor.
  4. Устанавливает флажок 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;

 
« Предыдущая статья   Следующая статья »