Меню

Как изменить цвет окна winapi



Win API как изменить hbrBackground цвет окна после создания ?

Есть окно его создал с hbrBackground = WHITE_BRUSH
Но потом когда игрок ставит на паузу игру, надо изменить цвет hbrBackground.

Как это сделать без перересовок BeginPaint и WM_ERASEBKGND ?

Хотелось бы через SetWindowLong

monobogdan
> https://docs.microsoft.com/en-us/windows/desktop/api/wingdi/nf-wi…
> di-setbkcolor

Нэт, это для WM_PAINT

ronniko
> Хотелось бы через SetWindowLong

Ну попробуй, в чём дело-то?

В любом случае надо как-то заставить окно обновиться, чтобы что-то визуально поменялось

> Хотелось бы через SetWindowLong

Можно попробовать так, —

ronniko
> Как это сделать без перересовок BeginPaint и WM_ERASEBKGND ?
Так же, как ты все остальное отрисовываешь.

Как я понимаю InvalidateRect шлет привет моему окну.
И подпрограмма окна должна иметь событие по которому все равно надо делать мне отрисовку в WndProc окна.

ronniko
> И подпрограмма окна должна иметь событие по которому все равно надо делать мне
> отрисовку в WndProc окна.
>

А как, по твоему, оконный менеджер должен догадаться, что окно протухло и нужно бы обновить его?

Самое интересное как Виндовс красит при создании окно цветом ?!
Ведь как то же при создании окна Винда его сама заливает цветом из hbrBackground

Сейчас в моей WndProc нет ни WM_ERASEBKGND ни WM_PAINT
При этом окно создается с нужным цветом(сейчас серого цвета)

Ладно придется написать обработку в моей WndProc WM_PAINT
И делать не InvalidateRect а RedrawWindow чтобы послать сообщение WM_PAINT

Спасибо за советы и ответы.

eMan.Lived было бы здорово, если бы она еще раз заливала бы другим цветом окно.

Другая проблема. Сработал один раз Rectangle

А потом меняю RectX, RectY но на экране прямоугольник остается без изменений.

ronniko
Ты совсем поехал рисовать игоря средствами гди?

Я делаю хитрые штуки !
И мне надо менять только hbrBackground окна чтобы эта хитрая штука сработала !

Источник

Как изменить цвет окна winapi

Возвращает системный цвет элементов окна

#include
_WinAPI_GetSysColor ( $iIndex )

$iIndex Элемент, цвет которого необходимо возвратить. Может быть одним из следующих значений:
$COLOR_3DDKSHADOW — Тёмная тень трехмерных элементов.
$COLOR_3DFACE — Цвет поверхности трехмерных элементов и фон диалогового окна.
$COLOR_3DHIGHLIGHT — Цвет выделенных трехмерных элементов (для краев, стоящих перед источником света.)
$COLOR_3DHILIGHT — Цвет выделенных трехмерных элементов (для краев, стоящих перед источником света.)
$COLOR_3DLIGHT — Светлый цвет трехмерных элементов (для краев, стоящих перед источником света.)
$COLOR_3DSHADOW — Цвет тени трехмерных элементов (для краев противоположных источнику света).
$COLOR_ACTIVEBORDER — Границы активного окна.
$COLOR_ACTIVECAPTION — Заголовок активного окна.
Цвет левой стороны градиента, если включен эффект градиента.
$COLOR_APPWORKSPACE — Рабочая область приложения (MDI).
$COLOR_BACKGROUND — Фон рабочего стола.
$COLOR_BTNFACE — Цвет поверхности трехмерных элементов и фон диалогового окна.
$COLOR_BTNHIGHLIGHT — Цвет выделенных трехмерных элементов (для краев, стоящих перед источником света.)
$COLOR_BTNHILIGHT Цвет выделенных трехмерных элементов (для краев, стоящих перед источником света.)
$COLOR_BTNSHADOW — Цвет тени трехмерных элементов (для краев противоположных источнику света).
$COLOR_BTNTEXT — Цвет текста на кнопке.
$COLOR_CAPTIONTEXT — Цвет текста в заголовке, size box, и стрелки в элементе прокрутки.
$COLOR_DESKTOP — Фон рабочего стола.
$COLOR_GRADIENTACTIVECAPTION — Цвет правой стороны градиента в заголовке активного окна, если включен эффект градиента.
$COLOR_ACTIVECAPTION Заголовок активного окна.
Используйте SPI_GETGRADIENTCAPTIONS с функцией SystemParametersInfo, чтобы определить, включен ли эффект градиента.
$COLOR_GRADIENTINACTIVECAPTION — Цвет правой стороны градиента в заголовке не активного окна, если включен эффект градиента.
$COLOR_INACTIVECAPTION определяет цвет левого края.
$COLOR_GRAYTEXT — Серый текст (недоступный). Этот цвет имеет значение 0, если текущий драйвер дисплея не поддерживает solid серый цвет.
$COLOR_HIGHLIGHT — Выделенный пункт(а) элементы (например ListView).
$COLOR_HIGHLIGHTTEXT — Текст выделенного пункта(ов) элемента (например ListView).
$COLOR_HOTLIGHT — Цвет ссылки или пункта, на который наведён курсор мыши.
$COLOR_INACTIVEBORDER — Цвет границы неактивного окна.
$COLOR_INACTIVECAPTION — Цвет заголовка неактивного окна.
Цвет левой стороны градиента, если включен эффект градиента.
$COLOR_INACTIVECAPTIONTEXT — Цвет текста в заголовке неактивного окна.
$COLOR_INFOBK — Цвет фона всплывающей подсказки.
$COLOR_INFOTEXT — Цвет текста всплывающей подсказки.
$COLOR_MENU — Цвет фона меню.
$COLOR_MENUHILIGHT — Цвет выделенного элемента меню, когда меню плоское.
Выделенный пункт меню очерчен $COLOR_HIGHLIGHT .
Это значение не поддерживается в Windows 2000.
$COLOR_MENUBAR — Цвет фона меню, когда меню плоское.
Однако, $COLOR_MENU продолжает определять цвет фона всплывающего меню.
Это значение не поддерживается в Windows 2000.
$COLOR_MENUTEXT — Цвет текста в меню.
$COLOR_SCROLLBAR — Серая область элемента прокрутки.
$COLOR_WINDOW — Цвет фона окна.
$COLOR_WINDOWFRAME — Window frame.
$COLOR_WINDOWTEXT — Цвет текста в окне.
Читайте также:  Как выбрать основной цвет свадьбы

Возвращает красный, зеленый, синий (RGB) значения цвета данного элемента

Для выше указанных констант необходим WindowsConstants.au3.

Если параметр $iIndex выходит за пределы диапазона, то возвращается 0. Поскольку 0 является допустимым значением RGB, то вы не можете использовать GetSysColor для определения системного цвета, поддерживаемого текущей платформой. Вместо этого используйте функцию GetSysColorBrush, которая возвращает NULL, если цвет не поддерживается.

Искать GetSysColor в библиотеке MSDN

Func _Example ()
Local $aSysColor [ 39 ] = [ _
‘COLOR_3DDKSHADOW’ , _
‘COLOR_3DFACE’ , _
‘COLOR_3DHIGHLIGHT’ , _
‘COLOR_3DHILIGHT’ , _
‘COLOR_3DLIGHT’ , _
‘COLOR_3DSHADOW’ , _
‘COLOR_ACTIVEBORDER’ , _
‘COLOR_ACTIVECAPTION’ , _
‘COLOR_APPWORKSPACE’ , _
‘COLOR_BACKGROUND’ , _
‘COLOR_BTNFACE’ , _
‘COLOR_BTNHIGHLIGHT’ , _
‘COLOR_BTNHILIGHT’ , _
‘COLOR_BTNSHADOW’ , _
‘COLOR_BTNTEXT’ , _
‘COLOR_CAPTIONTEXT’ , _
‘COLOR_DESKTOP’ , _
‘COLOR_GRADIENTACTIVECAPTION’ , _
‘COLOR_ACTIVECAPTION’ , _
‘COLOR_GRADIENTINACTIVECAPTION’ , _
‘COLOR_INACTIVECAPTION’ , _
‘COLOR_GRAYTEXT’ , _
‘COLOR_HIGHLIGHT’ , _
‘COLOR_HIGHLIGHTTEXT’ , _
‘COLOR_HOTLIGHT’ , _
‘COLOR_INACTIVEBORDER’ , _
‘COLOR_INACTIVECAPTION’ , _
‘COLOR_INACTIVECAPTIONTEXT’ , _
‘COLOR_INFOBK’ , _
‘COLOR_INFOTEXT’ , _
‘COLOR_MENU’ , _
‘COLOR_MENUHILIGHT’ , _
‘COLOR_MENUBAR’ , _
‘COLOR_MENU’ , _
‘COLOR_MENUTEXT’ , _
‘COLOR_SCROLLBAR’ , _
‘COLOR_WINDOW’ , _
‘COLOR_WINDOWFRAME’ , _
‘COLOR_WINDOWTEXT’ ]

Источник

Изменить цвет окна

Изменить цвет окна
Скажите, как изменить цвет главного окна программы и как изменить цвет кнопки расположенной на.

Изменить цвет дочернего окна
Создаю дочерние окна таким образом: #define ID_FIRSTCHILD 100 . . . for (int i = 0; i.

Изменить цвет фона клиентского окна
Добрый день, подскажите как изменить цвет фона клиентского окна. При регистрации класса в.

Как изменить цвет рамки окна?
Всем привет. Подскажите как изменить цвет рамки окна?

Ну конечно, зачем нам документация если можно писать что угодно и получать что угодно но не то что надо.

Не, задача такая если мышкой клацнешь по окошку, то цвет должен поменяться (изначально я знаю как установить цвет)

Добавлено через 1 минуту

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как изменить цвет фона диалогового окна
Всем день добрый. Создал win32 проект, к основному окну добавил ресурсом диалоговое окно. Не.

Получить цвет пикселя из неактивного окна, перекрытого другими окнами окна
Можно ли получить цвет пикселя из неактивного или перекрытого другими окна? Какие есть способы.

Изменить цвет окна (формы)
Доброго времени суток. Подскажите, пожалуйста, как изменить цвет окна

Изменить цвет диалогового окна
В манифесте указан стиль AppTheme и лайауты отображаются светлыми. Как добиться, чтобы.

Источник

Графический интерфейс GDI в Microsoft Windows

3.2. Выбор цвета без использования палитры

Приложения, которые не хотят ничего знать про палитры, могут указывать логический цвет изображений, составляя его из RGB-компонент, указывая их количественный состав. Однако, если видеоконтроллер не работает в режиме True Color, для вывода на экран будут использованы только статические цвета или смешанные цвета, состоящие из статических цветов. В результате полученный на экране физический цвет может не соответствовать запрошенному логическому цвету.

Как указать цвет

Многие функции программного интерфейса GDI (например, функции, создающие перья и кисти) требуют в качестве одного из своих параметров ссылку на используемый цвет. Цвет указывается при помощи переменной, имеющей тип COLORREF :

Тип COLORREF определен в файле windows.h следующим образом:

В простейшем случае цвет можно определить с помощью макрокоманды RGB , комбинирующей цвет из отдельных компонент:

Читайте также:  Щенок шпиц померанский белого цвета

Эта макрокоманда упаковывает отдельные цветовые компоненты в двойное слово, причем (что важно) старший байт этого слова должен быть равен нулю (рис. 3.2).

Рис. 3.2. Представление цвета, полученное с помощью макрокоманды RGB

В файле windows.h определены также макрокоманды, извлекающие из переменной типа COLORREF, упакованной с помощью макрокоманды RGB, отдельные цветовые компоненты:

Как мы уже говорили, в зависимости от текущего цветового разрешения Windows может предоставить приложению приближенный цвет, который максимально соответствует запрошенному логическому цвету. Функция GetNearestColor возвращает для запрошенного логического цвета clrref физический цвет, составленный только из компонент чистого цвета:

Через параметр hdc необходимо передать идентификатор контекста отображения.

Системные цвета

Как выбрать цвета для объектов приложения?

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

Более удачный способ заключается в использовании так называемых системных цветов. Системные цвета — это цвета, с помощью которых операционная система Windows рисует отдельные элементы окон и органов управления.

Приложение Control Panel, которое входит в состав Windows, позволяет вам изменять системные цвета, обеспечивая приемлемую цветовую палитру практически для любого типа видеомонитора.

Для того чтобы узнать цвет той или иной системной компоненты экрана Windows, вы можете вызвать функцию GetSysColor :

В качестве единственного параметра следует передать этой функции идентификатор компоненты:

Идентификатор Описание
COLOR_ACTIVEBORDER Рамка вокруг активного окна
COLOR_ACTIVECAPTION Заголовок активного окна
COLOR_APPWORKSPACE Фон окна приложения MDI (приложение, использующее многооконный интерфейс)
COLOR_BACKGROUND Окно Desktop
COLOR_BTNFACE Кнопка
COLOR_BTNHIGHLIGHT Выбранная кнопка
COLOR_BTNSHADOW Тень, «отбрасываемой» кнопкой
COLOR_BTNTEXT Текст надписи на поверхности кнопки
COLOR_CAPTIONTEXT Текст заголовка окна, кнопки изменения размера, кнопки полосы просмотра
COLOR_GRAYTEXT Текст серого цвета
COLOR_HIGHLIGHT Фон выбранного элемента в органе управления
COLOR_HIGHLIGHTTEXT Текст для выбранного органа управления
COLOR_INACTIVEBORDER Рамка вокруг неактивного окна
COLOR_INACTIVECAPTION Заголовок неактивного окна
COLOR_INACTIVECAPTIONTEXT Текст заголовка для неактивного окна
COLOR_MENU Фон меню
COLOR_MENUTEXT Текст меню
COLOR_SCROLLBAR Полоса просмотра
COLOR_WINDOW Фон окна
COLOR_WINDOWFRAME Рамка окна
COLOR_WINDOWTEXT Текст в окне

Ваше приложение может выбрать для использования некоторые из системных цветов, при этом пользователь сможет влиять на внешний вид вашего приложения с помощью Control Panel, настраивая цвета на свой вкус.

Вы можете создать приложение, изменяющее системные цвета. Для этого обратите внимание на функцию SetSysColors :

Параметр cDspElements определяет количество элементов, для которых изменяются цвета.

Параметр lpnDspElements представляет собой указатель на массив идентификаторов элементов изображения, список которых приведен выше.

Перед вызовом функции вам надо подготовить также массив из cDspElements элементов, содержащих новые значения для цветов, передав функции адрес этого массива через параметр lpdwRgbValues.

Внесенные изменения сохраняются только до очередного перезапуска операционной системы Windows.

После вызова этой функции все запущенные приложения получают сообщение WM_SYSCOLORCHANGE , которое информирует их об изменении системных цветов. Windows также перерисовывает на экране все видимые окна.

Сообщение WM_SYSCOLORCHANGE

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

Так как после изменения системных цветов все активные окна получают сообщение WM_PAINT, обработчик сообщения WM_SYSCOLORCHANGE не должен ничего перерисовывать в окне.

Читайте также:  Оранжевый цвет с каким цветом совместить

Сообщение WM_SYSCOLORCHANGE не имеет параметров, поэтому значения, передаваемые через wParam и lParam следует проигнорировать.

Функция ChooseColor

В составе DLL-библиотеки commdlg.dll есть функция ChooseColor , которая предназначена для выбора цвета . Эта функция выводит на экран диалоговую панель (рис. 3.3), с помощью которой пользователь может выбрать цвет из основного набора цветов «Basic Color» и дополнительного «Custom Colors». Возможность использования цветовых палитр при выборе не обеспечивается, так что с помощью этой функции можно выбирать только чистые статические или смешанные цвета.

Рис. 3.3. Диалоговая панель для выбора цвета

Если нажать на кнопку «Define Custom Colors. «, внешний вид диалоговой панели изменится (рис. 3.4).

Рис. 3.4. Расширенная диалоговая панель

Пользуясь правой половиной диалоговой панели, пользователь сможет добавить новый цвет в набор «Custom Colors» и затем выбрать его из этого набора.

Функция ChooseColor описана в файле commdlg.h:

Перед вызовом функции следует заполнить структуру CHOOSECOLOR, передав функции ее адрес через параметр lpcc.

В случае успешного выбора цвета функция возвращает TRUE. Если пользователь отказался от выбора или, если произошла ошибка, возвращается значение FALSE.

Структура CHOOSECOLOR и указатель на нее описаны в файле commdlg.h:

Опишем назначение и правила использования отдельных полей этой структуры.

Поле lStructSize заполняется перед вызовом функции. Оно должно содержать размер структуры в байтах.

Поле Flags также заполняется до вызова функции. В него следует записать флаги инициализации, влияющие на использование других полей этой структуры.

Флаг Описание
CC_RGBINIT Для цвета, выбранного по умолчанию, используется цвет, указанный в поле rgbResult
CC_FULLOPEN Если указан этот флаг, на экране появляется полный вариант диалоговой панели, обеспечивающий возможность определения произвольного цвета. Если этот флаг не указан, для определения произвольного цвета пользователь должен нажать на кнопку «Define Custom Color»
CC_PREVENTFULLOPEN Кнопка «Define Custom Color» блокируется, таким образом, при использовании этого флага пользователь не может определить произвольный цвет
CC_SHOWHELP Флаг разрешает отображение кнопки «Help». Если указан этот флаг, в поле нельзя указывать значение hwndOwner
CC_ENABLEHOOK Если указан этот флаг, используется функция фильтра, адрес которой указан в поле lpfnHook. С помощью этой функции можно организовать дополнительную обработку сообщений от диалоговой панели
CC_ENABLETEMPLATE Используется шаблон диалоговой панели, определяемый содержимым поля hInstance. Адрес строки, содержащей имя шаблона, должен быть указан в поле lpTemplateName
CC_ENABLETEMPLATEHANDLE Используется шаблон диалоговой панели, идентификатор которого записан в поле hInstance. Содержимое поля lpTemplateName игнорируется

В поле hwndOwner перед вызовом функции следует записать идентификатор окна, создавшего диалоговую панель, или NULL. В последнем случае нельзя использовать флаг CC_SHOWHELP.

Поле hInstance заполняется в тех случаях, когда приложение использует свой собственный шаблон диалоговой панели (вместо стандартного шаблона, расположенного в ресурсах DLL-библиотеки). В этом случае перед вызовом функции в это поле следует записать идентификатор модуля, содержащего шаблон диалоговой панели. В поле Flags необходимо указать флаги CC_ENABLETEMPLATE или CC_ENABLETEMPLATEHANDLE.

В поле lpTemplateName следует записать адрес текстовой строки идентификатора ресурса шаблона диалоговой панели (если этот шаблон используется).

Поле rgbResult предназначено для передачи приложению цвета, выбранного пользователем. Если записать в это поле значение NULL, сразу после вывода диалоговой панели выбора цвета по умолчанию будет выбран черный цвет. Вы, однако, можете использовать для начального выбора любой другой цвет, записав его в это поле и указав флаг CC_RGBINIT.

Перед вызовом функции вы должны подготовить массив из 16 двойных слов, содержащих цвета для использования в меню «Custom Colors». Адрес этого массива следует передать через параметр lpCustColors.

Поле lCustData используется для передачи данных функции фильтра (если она определена).

Адрес функции фильтра передается через параметр lpfnHook. Для использования функции фильтра следует указать флаг CC_ENABLEHOOK.

Источник