Win32 API. Библиотека стандартных диалоговых окон - Диалоговое окно Цвет

ОГЛАВЛЕНИЕ

Диалоговое окно Цвет

Диалоговое окно Цвет (Color) возвращает значения RGB цвета, выбранного пользователем. Пользователь может выбирать из набора основных цветов, определенных драйвером дисплея или из набора дополнительных цветов. Вы должны определить начальную установку дополнительных цветов, но вы можете дать возможность пользователям создавать свои собственные дополнительные цвета.

Вы создаете и показываете диалоговое окно Цвет (Color), инициализируя структуру CHOOSECOLOR и передавая параметры структуры в функцию ChooseColor.

Вы можете открыть часть диалогового окна Цвет (Color), чтобы показать основные и дополнительные цвета, из которых пользователь может выбирать, или можете полностью открыть диалоговое окно, чтобы показать дополнительные элементы управления, которые дают возможность пользователю создавать дополнительные цвета. 

Если пользователь щелкает мышью по кнопке OK, ChooseColor возвращает значение ИСТИНА (TRUE). Элемент rgbResult структуры CHOOSECOLOR содержит значения RGB цвета, выбранного пользователем. Значение цвета RGB устанавливает индивидуальную интенсивность красного, зеленого и синего цветов, которые создают выбранный цвет. Индивидуальные значения находятся в пределах от 0 до 255. Используйте макрокоманды GetRValue, GetBValue и GetGValue, чтобы извлечь индивидуальные значения цвета из RGB цвета.

Если пользователь отменяет диалоговое окно Цвет (Color) или происходит ошибка, ChooseColor возвращает значение ЛОЖЬ (FALSE>), а элемент rgbResult не определяется. Чтобы определять причину ошибки, вызовите функцию CommDlgExtendedError, чтобы получить расширенное значение ошибки.

Основное и улучшенное диалоговые окна Цвет (Color)

Диалоговое окно Цвет (Color) имеет базисную версию и улучшенную модификацию. Базисная версия имеет элементы управления, которые показывают базисные и дополнительные цвета, из которых пользователь может выбирать. Улучшенная модификация включает базисные элементы управления и дополнительные, которые позволяют пользователю создавать дополнительные цвета. Базисная версия диалогового окна Цвет (Color) включает кнопку Определение дополнительных цветов (Define Custom Colors). Пользователь может щелкать мышью по этой кнопке, чтобы отобразить улучшенную версию. Вы можете дать указание диалоговому окну Цвет (Color), чтобы всегда показывать это улучшение, установив флажок CC_FULLOPEN в элементе Flags структуры CHOOSECOLOR. Чтобы запретить пользователю создание дополнительных цветов, вы можете установить флажок CC_PREVENTFULLOPEN, чтобы отключить кнопку Define Custom Colors.

Основные цвета представляют собою выбор цветов, доступных на данном устройстве. Фактическое число отображаемых цветов определяется драйвером дисплея. Например, драйвер VGA показывает 48 цветов, а драйвера дисплея с черно-белым изображением показывает только 16.

Дополнительные цвета -это цвета, которые вы устанавливаете или которые создает пользователь. Когда вы создаете цветное диалоговое окно, вы должны использовать элемент lpCustColors структуры CHOOSECOLOR, чтобы установить начальные исходные значения для 16 дополнительных цветов. Если улучшенная версия диалогового окна Цвет (Color) открыта, пользователь может создавать дополнительный цвет одним из следующих методов:

  1. Перемещением курсора мыши в элементе управления цветом спектра и плавной регулировки яркости
  2. Вводя с клавиатуры значения красного, зеленого и синего (RGB) в полях редактирования Красный, Зеленый и Синий
  3. Вводя с клавиатуры значения оттенка, насыщенности и яркости (HSL) в редактируемые поля элементов управления Оттенок (Hue), Насыщенность (Sat), и Яркость (Lum)

Чтобы добавить новый дополнительный цвет в поддерживаемой цветовой гамме дисплея, пользователь может щелкнуть по кнопке Добавить дополнительные цвета (Add to Custom Colors). Это также заставляет диалоговое окно копировать значение RGB нового цвета в соответствующий элемент в массиве, указанном элементом lpCustColors. Чтобы сохранить новые дополнительные цвета между обращениями к функции ChooseColor, вы должны отвести статическую память для массива. Для получения дополнительной информации о цветовых моделях RGB и HSL, см. Цветовые модели, используемые диалоговым окном Цвет (Color).

Настройка диалогового окна Цвет (Color)

Чтобы настроить диалоговое окно Цвет (Color), вы можете использовать любой из нижеследующих следующих методов:

  1. Установить значения в структуре CHOOSECOLOR, когда создаете диалоговое окно.
  2. Обеспечить пользовательским шаблоном.
  3. Обеспечить фильтром - процедурой.

Вы можете изменять вид и поведение диалогового окна Цвет (Color), устанавливая флажки в элементе Flags структуры CHOOSECOLOR. Например, вы можете установить флажок CC_SOLIDCOLOR, чтобы предназначить диалоговое окно для показа только плотных тонов. Чтобы заставить диалоговое окно первоначально выбрать цвет, отличающийся от черного, установите флажок CC_RGBINIT и определите цвет в элементе rgbResult.

Вы можете дать пользовательский шаблон для Диалогового окна Цвет (Color), например, если вы желаете включить дополнительные элементы управления, которые являются уникальными в вашей прикладной программе. Функция ChooseColor использует ваш пользовательский шаблон вместо заданного по умолчанию шаблона.

Чтобы обеспечить пользовательским шаблоном для диалогового окна Цвет (Color)

  1. Создайте пользовательский шаблон, изменяя заданный по умолчанию шаблон, определяемый в файле COLOR.DLG. Идентификаторы элементов управления, используемые в заданном по умолчанию шаблоне диалогового окна Цвет (Color), определены в заголовочном файле COLORDLG.H.
  2. Используйте структуру CHOOSECOLOR, чтобы включить шаблон, как указано ниже:

Если ваш пользовательский шаблон - ресурс в прикладной программе или динамически компонуемой библиотеке, уставите флажок CC_ENABLETEMPLATE в элементе Flags. Используйте элементы структуры hInstance и lpTemplateName, чтобы идентифицировать модуль и имя ресурса.

Или

Если ваш пользовательский шаблон - уже в памяти, установите флажок CC_ENABLETEMPLATEHANDLE. Используйте элемент hInstance, чтобы идентифицировать объект памяти, который содержит шаблон.

Вы можете обеспечить диалоговое окно Цвет (Color) фильтром - процедурой CCHookProc. Фильтр - процедура может обрабатывать сообщения, пересылаемые в диалоговое окно. Она может также использовать зарегистрированные сообщения, которые управляют поведением диалогового окна. Если вы используете пользовательский шаблон, чтобы определить дополнительные средства управления, вы должны обеспечить фильтром - процедурой, чтобы обрабатывать вводимую информацию для ваших элементов управления.

Чтобы включить фильтр - процедуру для диалогового окна Цвет (Color)

1. Установите флажок CC_ENABLEHOOK в элементе Flags структуры CHOOSECOLOR.

В элементе lpfnHook определите адрес фильтра - процедуры.

После обработки сообщения WM_INITDIALOG, процедура диалогового окна посылает сообщение WM_INITDIALOG фильтру - процедуре. Параметр этого сообщения lParam - указатель на структуру CHOOSECOLOR, используемую, чтобы инициализировать диалоговое окно.

Диалоговое окно посылает зарегистрированное сообщение COLOROKSTRING фильтру - процедуре, когда пользователь щелкает мышью по кнопке OK. Фильтр - процедура может отклонить выбранный цвет и заставить диалоговое окно оставаться открытым, возвращая нуль, когда оно принимает это сообщение. Фильтр - процедура может заставить диалоговое окно выбрать специфический цвет, посылая зарегистрированное сообщение SETRGBSTRING диалоговому окну. Чтобы использовать эти зарегистрированные сообщения, вы должны передать константы COLOROKSTRING и SETRGBSTRING в функцию RegisterWindowMessage, чтобы получить идентификатор сообщения. Вы можете затем использовать идентификатор, чтобы обнаружить и обработать сообщения, посланные из диалогового окна, или посылать сообщения диалоговому окну.