Что такое код setbkcolor

Что такое код setbkcolor

Возвращаемое значение
OnCtlColor должен возвратить дескриптор кисти, которая должна использоваться для закрашивания фона элемента управления.

Параметры
pDC
Содержит указатель на контекст дисплея для дочернего окна. Может быть временный.
pWnd
Содержит указатель на элемент управления просящий цвет. Может быть временный.
nCtlColor
Содержит одно из следующих значений, определяя тип элемента управления:

  • CTLCOLOR_BTN — Элемент управление Кнопки
  • CTLCOLOR_DLG — Диалоговое окно
  • CTLCOLOR_EDIT — Средства редактирования
  • CTLCOLOR_LISTBOX — Элемент управление Списка
  • CTLCOLOR_MSGBOX — Окно сообщения
  • CTLCOLOR_SCROLLBAR — Элемент управление Слайдера
  • CTLCOLOR_STATIC — Статический элемент управления

Замечания
Рамка вызывает эту функцию, когда порожденный элемент управление собирается быть выведенным. Большинство элементов управления посылает это сообщение их родителю (обычно диалоговое окно) чтобы готовить pDC для рисования элемента управления, использующего правильные цвета. Чтобы изменять цвет текста вызовите SetTextColor функцию с желательными красными, зелеными, и синими значениями (RGB).
Чтобы изменять фоновый цвет элемента редактирования для одиночной линтт установите дескриптор кисти в CTLCOLOR_EDIT и CTLCOLOR_MSGBOX кодах сообщения, и вызовите CDC::SetBkColor в ответ на CTLCOLOR_EDIT код.
OnCtlColor не будет запрашивать список поля с раскрывающимся списком, потому что раскрывающийся список фактически порожден из поля со списком и не порожденный из окна. Чтобы изменять цвет раскрывающегося списка, создайте CComboBox с перегрузкой OnCtlColor, который проверяет CTLCOLOR_LISTBOX в nCtlColor параметре. В этом драйвере, SetBkColor функция должна использоваться, чтобы установить фоновый цвет для текста.

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

TVM_SETBKCOLOR и TreeView_SetBkColor не объявлены в этой области?

Я получаю странную ошибку объема: ‘TVM_SETBKCOLOR’ was not declared in this scope и тому подобное ‘TreeView_SetBkColor’ was not declared in this scope , Я не могу понять, почему это происходит:

  • Я включил commctrl.h
  • Другие макросы дерева работают нормально (например, TreeView_DeleteItem )
  • Автозаполнение распознает и заканчивает TreeView_SetBkColor так что это не проблема орфографии
  • Я очень хорошо читаю документацию

Вот фрагмент из соответствующего окна. Все работает нормально, пока не попробую поменять фон tvw_filelist_ переменная.

Я также пытался

но я получаю ту же ошибку. В чем дело?

(Среда: Код :: Блоки, MinGW, Win7 x64)

Решение

TVM_SETBKCOLOR сообщение и связанный с ним TreeView_SetBkColor () макрос определяется, только если приложение указывает, что Internet Explorer 4 или более поздней версии должен быть установлен в целевой системе.

Другими словами, _WIN32_IE Символ препроцессора должен быть установлен в 0x0400 или больше

Соответствующие части файла заголовка (строки с 5752 по 5792 из CommCtrl.h в версии 7.0А Windows SDK) есть:

CWnd::OnCtlColor

OnCtlColor must return a handle to the brush that is to be used for painting the control background.

Contains a pointer to the display context for the child window. May be temporary.

Contains a pointer to the control asking for the color. May be temporary.

Contains one of the following values, specifying the type of control:

    CTLCOLOR_BTN Button control

CTLCOLOR_DLG Dialog box

CTLCOLOR_EDIT Edit control

CTLCOLOR_LISTBOX List-box control

CTLCOLOR_MSGBOX Message box

CTLCOLOR_SCROLLBAR Scroll-bar control

The framework calls this member function when a child control is about to be drawn. Most controls send this message to their parent (usually a dialog box) to prepare the pDC for drawing the control using the correct colors.

To change the text color, call the SetTextColor member function with the desired red, green, and blue (RGB) values.

To change the background color of a single-line edit control, set the brush handle in both the CTLCOLOR_EDIT and CTLCOLOR_MSGBOX message codes, and call the CDC::SetBkColor function in response to the CTLCOLOR_EDIT code.

Илон Маск рекомендует:  Атрибут alt в HTML

OnCtlColor will not be called for the list box of a drop-down combo box because the drop-down list box is actually a child of the combo box and not a child of the window. To change the color of the drop-down list box, create a CComboBox with an override of OnCtlColor that checks for CTLCOLOR_LISTBOX in the nCtlColor parameter. In this handler, the SetBkColor member function must be used to set the background color for the text.

Note This member function is called by the framework to allow your application to handle a Windows message. The parameters passed to your function reflect the parameters received by the framework when the message was received. If you call the base-class implementation of this function, that implementation will use the parameters originally passed with the message and not the parameters you supply to the function.

SetBkColor and SetTextColor Don’t set the background and text color for DrawText

Using the following code to write a string to the DesktopWindow’s device context works, but the background color and text color remain the same (white on blue):

What am I doing wrong? The text gets written just fine, but the colors are ugly.

1 Answer 1

Use SetBkMode() (http://msdn.microsoft.com/en-us/library/dd162965%28v=vs.85%29.aspx) first to set the DC to not draw a background.

SetTextColor() is only used for TextOut(), not DrawText(), IIRC — MSDN is ambiguous on it. Try seleting a different HBRUSH into the DC, that may do what you want.

SetBkColor function

The SetBkColor function sets the current background color to the specified color value, or to the nearest physical color if the device cannot represent the specified color value.

Syntax

Parameters

A handle to the device context.

The new background color. To make a COLORREF value, use the RGB macro.

Return Value

If the function succeeds, the return value specifies the previous background color as a COLORREF value.

If the function fails, the return value is CLR_INVALID.

Remarks

This function fills the gaps between styled lines drawn using a pen created by the CreatePen function; it does not fill the gaps between styled lines drawn using a pen created by the ExtCreatePen function. The SetBkColor function also sets the background colors for TextOut and ExtTextOut.

If the background mode is OPAQUE, the background color is used to fill gaps between styled lines, gaps between hatched lines in brushes, and character cells. The background color is also used when converting bitmaps from color to monochrome and vice versa.

Examples

For an example, see «Example of Owner-Drawn Menu Items» in Using Menus.

Что такое код setbkcolor

Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: нет
Всего: 2

Доброго времени суток. Собственно при написании кода под Вин 7 всё нормально, под ХР у меня вышло не то что хотелось. Суть в том чтобы закрасить фон текста в обычный , делаю это так:

Код
COLORREF color;
if ( )
<
color=RGB(255,0,0);
>
else
<
color=RGB(0,255,0);
>
::SetTextColor(reinterpret_cast (wParam),color);
const COLORREF gray=GetSysColor(COLOR_WINDOW);
::SetBkColor(reinterpret_cast (wParam),gray);
static HBRUSH hBr=::CreateSolidBrush(gray);
return (BOOL)hBr;

На вин 7 всё впорядке. На ХР фон темнее нежели обычный (стандартный\дефолтный) фон программы. Пробовал COLOR_MENU тоже самое. Благодарю за помощь!

Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

SetBkColor и SetTextColor Не устанавливайте цвет фона и текста для DrawText

Использование следующего кода для записи строки в контекст устройства DesktopWindow работает, но цвет фона и цвет текста остаются неизменными (белый на синем):

Что я делаю не так? Текст написан просто отлично, но цвета уродливы.

Сначала используйте SetBkMode() (http://msdn.microsoft.com/en-us/library/dd162965%28v=vs.85%29.aspx), чтобы установить DC, чтобы не рисовать фон.

SetTextColor() используется только для TextOut(), а не для DrawText(), IIRC — MSDN неоднозначно. Попробуйте выбрать другой HBRUSH в DC, который может делать то, что вы хотите.

Что такое код setbkcolor

Подпрограммы управления палитрой в случае CGA

Поскольку палитра CGA является предопределенной, подпрограмму setallpalette использовать в данном случае нельзя. Также не следует использовать setpalette(индекс, фактическийцвет), за исключением индекс=0. (Это альтернативный способ установки фонового цвета CGA равным фактическому цвету)

Управление цветом для EGA и VGA

В случае EGA палитра содержит 16 элементов из общего количества 64 возможных цветов, причем каждый из элементов палитры может быть задан пользователем. Доступ к текущей палитре выполняется через функцию getpalette, которая заполняет структуру, включающую в себя размер палитры (16) и массив фактических элементов палитры ( аппаратные номера цветов , хранимые в палитре). Элементы палитры можно изменять как по отдельности при помощи setpalette, либо все сразу через функцию setallpalette.

Палитра EGA по умолчанию соответствует 16 цветам CGA, которые были даны в предыдущей таблице цветов: черный равен элементу 0, голубой равен элементу 1, . , белый равен элементу 15. В graphics.h определены константы, которые содержат соответствующие цветам аппаратные значения: это EGA BLACK, EGA WHITE и т.д. Эти значения могут быть также получены через функцию getpalette.

Подпрограмма setbkcolor(цвет) на EGA работает несколько иначе, чем на CGA. На EGA setbkcolor копирует фактическое значение цвета, хранящееся в элементе #цвет, в элемент #0.

Что касается цветов, то драйвер VGA работает фактически так же, как и драйвер EGA; он просто имеет более высокое разрешение (и меньшие по размеру элементы изображения)

Обработка ошибок в графическом режиме

Ниже приведены функции обработки ошибок в графическом режиме:

Возвращает строку с сообщением об ошибке для заданного кода ошибки.

Возвращает код ошибки для последней графической операции, в которой встретилась ошибка.

Если ошибка произошла при вызове графической библиотечной функции (например, не найден шрифт, запрошенный функцией settextstyle), устанавливается внутренний код ошибки. Доступ к коду ошибки для последней графической операции, сообщившей об ошибке, выполняется при помощи функции graphresult. Вызов grapherrormsg(graphresult()) возвращает строку сообщения об ошибке из приведенных выше.

Код возврата ошибки накапливается, изменяясь только когда графическая функция сообщает об ошибке. Код возврата ошибки сбрасывается в 0 только при успешном выполнении initgraph, либо при вызове функции graphresult. Таким образом, если вы хотите знать, какая графическая функция возвратила ошибку, нужно хранить значение graphresult во временной переменной и затем проверять ее.

Код ошибки, константа графической ошибки и соответствующая строка с сообщением об ошибке приведены ниже:

No error (нет ошибки)

(BGI) graphics not installed (use initgraph) (графика не инсталлирована используйте функцию initgraph)

Graphics hardware not detecte (графическое аппаратное обеспечение не обнаружено)

Device driver file not found (не найден файл драйвера устройства)

Invalid device driver file (неверный файл драйвера устройства)

Not enough memory to load driver (не хватает памяти дя загрузки драйвера)

Out of memory in scan fill (кончилась память при сканирующем заполнении)

Out of memory in flood fill (кончилась память при лавинном заполнении)

Font file not found (файл шрифта не найден)

Not enough memory to load font (не хватает памяти для загрузки шрифта)

Invalid graphics mode for selected driver (недопустимый графический режим для выбранного драйвера)

Graphics error (графическая ошибка)

Graphics I/O error (графическая ошибка ввода-вывода)

Invalid font file (неверный файл шрифта)

Invalid font number (неверный номер шрифта)

Invalid device number (неверный номер устройства)

Управление цветом Free Pascal

В цветовом режиме D8bit выбор цвета осуществляется следующим образом. Видеокарта, управляющая окраской пикселов графического окна, использует цифро- аналоговый преобразователь (ЦАП), в котором код цветности представлен 18- разрядным двоичным кодом — по 6 разрядов на интенсивность RGB-компонентов. В блоке ЦАП находится 256 регистров, содержимое которых образует текущую

цветовую палитру. Программа имеет возможность опросить или изменить содер- жимое любого регистра палитры или содержимое всех регистров одновременно.

На выполнение графических операций оказывают влияние три основные харак- теристики видеокарты. В дополнение к упоминавшимся ранее цветам переднего (foreground color) и заднего плана (background color) добавляется цвет заливки (fill- ing color), участвующий в закраске различных замкнутых контуров. Физические компоненты цвета фона (т. е. заднего плана) хранятся в нулевом регистре ЦАП. Поэтому изменение цвета фона, осуществляемое с помощью процедуры SetBkCo- lor, сводится к переписи содержимого регистра ЦАП с указанным номером n_reg в нулевой регистр ЦАП:

SetBkColor(n_reg); // n_reg из диапазона [0, 255]

Цвет рисования, которым воспроизводятся отрезки прямых и контуры различ- ных графических фигур (примитивов — дуг, окружностей, эллипсов, многоуголь- ников и др.), устанавливается с помощью процедуры SetColor. Ее единственным аргументом является номер регистра ЦАП, в котором зафиксирован физический цвет переднего плана:

SetColor(n_reg); // n_reg из диапазона [0, 255]

Цвет и способ заливки устанавливается с помощью процедуры SetFillStyle: SetFillStyle(Pattern, n_reg); // n_reg из диапазона [0, 255]

Параметр Pattern (шаблон) определяет способ заполнения замкнутой фигуры (заливка сплошным цветом, всевозможные штриховки, растровая закраска и т. п.). Со всеми способами, поддерживаемыми библиотекой BGI, мы познакомимся позд- нее.

Для знакомства с палитрой по умолчанию, которая устанавливается при ини- циализации графической системы, можно воспользоваться программой из листин- га 15.1.

Листинг 15.1. Программа color256

program color256; uses graph;

gd,gm: SmallInt; x,y,i,j: SmallInt;

gd:=D8bit; gm:=m800x600; initgraph(gd,gm,”); for i:=0 to 15 do

for j:=0 to 15 do begin

y:=j*20; SetfillStyle(SolidFill,i*16+j); Bar(x,y,x+40,y+20);

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

40 20 пикселов, раскрашивая их в цвет, соответствующий содержимому очередного регистра ЦАП. Результат ее работы представлен на рис. 15.2. Нумерация цветовых оттенков продвигается от 0 до 255. В каждом столбце представлены цвета 16 по- следовательных регистров ЦАП.

Рис. 15.2. Цветовая палитра по умолчанию

В регистре ЦАП с нулевым номером находится нулевой код, соответствующий тройке минимальных интенсивностей RGB-компонентов — (0, 0, 0). На экране этому набору соответствует черный цвет. В регистре с номером 1 находится тройка (0, 0, 63), соответствующая максимальной интенсивности синего цвета. Регистр с номером 2 содержит тройку (0, 63, 0), и его содержимое воспроизводится зеленым цветом. В следующем регистре «смешаны» максимальные значения синего и зеле- ного цветов — (0, 63, 63), соответствующие бирюзовому цвету. Содержимое чет- вертого регистра равно (63, 0, 0) и отображается красным цветом, и т. д. Для обо- значения первых 16 цветовых оттенков можно использовать имена мнемонических констант, приведенные в табл. 15.4.

FreeBasic

API и FreeBasic. (Цвета контролов, часть первая)

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

И так начнем с тех контролов, у которых замена цвета устанавливается с помощью функции SendMessage с отправкой определенных сообщений.

Замена цветов фона и текста редактора RichEdit

Для установки фона достаточно отправить сообщение EM_SETBKGNDCOLOR , при этом если в параметре WPARAM будет передано значение FALSE , то в параметре LPARAM можно передать константу , определяющую цвет. Если в параметре WPARAM значение TRUE, то будет использоваться системный цвет(фон окна). Например:

Для установки цвета текста нужно заполнить структуру CHARFORMAT и отправить сообщение EM_SETCHARFORMAT . При этом в параметре WPARAM нужно передать одну (или несколько объединенных) констант , а в параметре LPARAM указатель на структуру. Например:

Замена цветов фона и текста TOOLTIP

Для замены цвета нужно отправить одно из ниже перечисленных сообщений:

TTM_SETTIPBKCOLOR — цвет фона
TTM_SETTIPTEXTCOLOR — цвет текста

При этом в параметре WPARAM передать константу , определяющую нужный цвет. Например:

Замена цвета фона StatusBar

У этого контрола стандартными средствами меняется только фон с помощью сообщения SB_SETBKCOLOR. Константа с указанным цветом передается в параметре LPARAM. Например:

Замена цветов фона и индикатора ProgressBar

PBM_SETBKCOLOR — цвет фона (константа необъявлена в FB 0.24)
TTM_SETTIPTEXTCOLOR — цвет индикатора

Для объявления константы PBM_SETBKCOLOR можно использовать этот код:

Константа с цветом передается в параметре LPARAM, например:

Замена цветов фона и текста ListView

LVM_SETBKCOLOR — цвет фона окна контрола
LVM_SETTEXTBKCOLOR — цвет фона текста
LVM_SETTEXTCOLOR — цвет текста

Константа с цветом передается в параметре LPARAM, например:

Замена цветов фона и текста TreeView

TVM_SETBKCOLOR — цвет фона
TVM_SETTEXTCOLOR — цвет текста

Константа с цветом передается в параметре LPARAM, например:

Замена цветов у календарей

MCM_SETCOLOR — универсальное сообщение для замены 6 частей календаря

Константа с цветом передается в параметре LPARAM. В параметре WPARAM указывается константа, соответствующая той части, у которой следует изменить цвет:

MCSC_BACKGROUND — задний фон
MCSC_MONTHBK — фон отображения окна месяцев
MCSC_TEXT — цвет текста окна месяцев
MCSC_TITLEBK — фон заголовка окна года
MCSC_TITLETEXT — цвет текста окна года
MCSC_TRAILINGTEXT — цвет текста дней, которые не являются днями текущего месяца

Замена цветов вышеуказанными способами может быть выполнена из любого места в программе. Изменения цветов остальных контролов в следующей части. Напоследок рабочий пример изменения цветов RichEdit:

Илон Маск рекомендует:  Что такое код function_exists
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL
Earnest
Дата 16.3.2011, 07:28 (ссылка) | (нет голосов) Загрузка .