Форум: "WinAPI";
Текущий архив: 2007.08.12;
Скачать: [xml.tar.bz2];
ВнизРазличный цвет фона контрола и его владельца Найти похожие ветки
← →
jTommy (2007-02-23 14:00) [0]Добрый день.
Подскажите, почему фона статических контролов и checkbox"ов отличается от фона их владельца (владелец контролов - Tab Control)? Наверное я со стилем окон чего-нить напутал?
Это проявляется только при включенных темах XP.
Скриншот интерфейса:
<img>http://jtommy.by.ru/images/UIBad.png</img>
На всякий случай код создания контролов:
tcMainTabs:=CreateWindowEx(0, WC_TABCONTROL, "", WS_VISIBLE or WS_CHILD or TCS_TABS or TCS_HOTTRACK, 8, 73, MainWndW-22, MainWndH-108, MainWnd, id_tcMainTabs, hInstance, nil);
lbLanguages:=CreateWindowEx(0, "STATIC", "", WS_VISIBLE or WS_CHILD, 180, 44, 155, 13, tcMainTabs, id_lbLanguages, hInstance, nil);
cbSaveOptions:=CreateWindowEx(0, "BUTTON", "", WS_VISIBLE or BS_AUTOCHECKBOX or WS_CHILD or WS_TABSTOP, 16, 66, 200, 17, tcMainTabs, id_cbSaveOptions, hInstance, nil);
← →
jTommy (2007-02-23 14:04) [1]Правильная ссылка на скриншот: http://jtommy.by.ru/images/UIBad.png
← →
Rouse_ © (2007-02-23 15:03) [2]Посмотри как это у меня решалось: http://rouse.drkb.ru/winapi.php#propsheet
← →
jTommy (2007-02-23 18:27) [3]
> Посмотри как это у меня решалось: http://rouse.drkb.ru/winapi.
> php#propsheet
Спасиб, помогло, но не на 100%.
Добавил обработку WM_CTLCOLORSTATIC - лейблы стали нормальные, но при отключенных темах GroupBox"ы отображались немного некорректно: http://jtommy.by.ru/images/UIBad1.png
Добавил проверку:
...
WM_CTLCOLORSTATIC: begin
if UseThemes then begin
SetBkMode(wParam, TRANSPARENT);
Result:=TransparentBrush;
end else
// Вызов старой оконной процедуры Tab Control
Result:=CallWindowProc(MainTabsOldProc, hWind, Msg, wParam, lParam);
end;
...
А теперь главное: фон у CheckBox"ов и одного Edit"а стал черного цвета.
http://jtommy.by.ru/images/UIBad2.png
Причем, если у Edit"а убрать свойство ES_READONLY, то он отображается корректно. Наверное так и сделаю, уберу это свойство, а ввод буду контролировать "вручную". А вот что делать с CheckBox"ами, не знаю...
← →
Rouse_ © (2007-02-26 09:56) [4]
WM_CTLCOLORSTATIC:
begin
if LParam = lbLanguages then
begin
if UseThemes then
begin
SetBkMode(wParam, TRANSPARENT);
Result:=TransparentBrush;
end
else
// Вызов старой оконной процедуры Tab Control
Result:=CallWindowProc(MainTabsOldProc, hWind, Msg, wParam, lParam);
end
else
Result:=CallWindowProc(MainTabsOldProc, hWind, Msg, wParam, lParam);
end;
← →
Rouse_ © (2007-02-26 09:59) [5]т.е. суть - вызов SetBkMode должен производиться только при включенных темах только у STATIC, во всех остальных случаях производиться вызов CallWindowProc
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.08.12;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.042 c