Хорошо, так что я понял это и заставил все это работать.
Чтобы создать шаблон, я сначала создал растровое изображение примерно так:
COLORREF bg = GetSysColor(COLOR_BTNFACE);
bg = RGB(GetBValue(bg), GetGValue(bg), GetRValue(bg));
COLORREF fg = bg - 0x00151515; //slightly darker than the background color
COLORREF bits[30] = { //would be problematic I guess if the color
bg, bg, bg, bg, fg, //was originally less than 0x00151515
bg, bg, bg, fg, bg,
bg, bg, fg, bg, bg,
bg, fg, bg, bg, bg,
fg, bg, bg, bg, bg
};
HBITMAP hbm = CreateBitmap(5, 5, 1, sizeof(COLORREF) * 8, bits);
GetSysColor()
возвращал цвет в формате 0x00BBGGRR (синий, зеленый, красный), но CreateBitmap()
требовал цвет в формате 0x00RRGGBB. Поэтому я просто поменял синее и красное значения на bg
. Я превратил это в HBRUSH так:
hbr = CreatePatternBrush(hbm);
В любом случае, это работало хорошо, за исключением того, что элементы управления STATIC
были над ним, и делали его действительно уродливым (все пустое пространство за текстом и в частях элемента управления, где вообще не было текста) .
Чтобы сделать прозрачными элементы управления STATIC
, я обработал сообщение WM_CTLCOLORSTATIC
(ранее я пытался отправить какое-то сообщение в элемент управления, чтобы изменить фон, как если бы я изменил текст с помощью WM_SETTEXT
). Итак, я сделал это:
HBRUSH main_st_color_ev(HWND hwnd, HDC hdc, HWND hwndChild, int type){
return stripes;
}
(полосы - это глобальная HBRUSH, которой я назначил растровую кисть, которую я сделал ранее)
Это изменило всю эту уродливую пустую область в элементе управления на кисть, которую я создал. Однако пространство непосредственно за текстом стало БЕЛЫМ. Поискав в интернете и MSDN, я сделал следующее дополнение:
SetBkMode(hdc, TRANSPARENT);