Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.46 MB
Время: 0.36 c
2-1184735926
Boga
2007-07-18 09:18
2007.08.12
Архивирование папки


15-1184569945
PZ
2007-07-16 11:12
2007.08.12
Странное явление


2-1184326542
Romikremind
2007-07-13 15:35
2007.08.12
Проблемы с русским языком


15-1184301344
(AD)acid
2007-07-13 08:35
2007.08.12
Выбор коммуникатора


3-1178012895
Sapos
2007-05-01 13:48
2007.08.12
Формат времени





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский