Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Как станик уэнаёт цвет родителя?


Автор: Rapalex 27.6.2006, 13:37
Я заметил что у всех ресурсов на диалоге есть такое свойсво, так если я создаю PropertyPage то при запуске любой статик с ней сливается.

Вот мне итересно как станик уэнаёт цвет родителя?

Я на свойство транспарент думаю но возникает вопрос можно ли это самому проделать. 

Автор: Coocky 27.6.2006, 13:46
Rapalex
ще раз-какой статик,? что значит сливается? Может просто берет цвет стандартного окна ?
smile 
Вообще
GetSysColor() тебя спасет для системных настроек

Добавлено @ 14:00 
Цитата(Rapalex @  27.6.2006,  13:37 Найти цитируемый пост)
Я на свойство транспарент думаю

  Внимание всем еще раз! с связи  с тем, что уже заколебали этим свойством. Халявы не будет!!!!

 Стиль окна WS_EX_TRANSPARENT служит для создания прозрачных окон. А именно: Любые окна ТОГО ЖЕ уровня,накрываемые этим окном, получат сообщение WM_PAINT в первую очередь, тем самым создавая эфект прозрачности!

 

Автор: Earnest 27.6.2006, 14:45
Статик (и некоторые другие контролы) посылает паренту запрос CTLCOLOR, и парент им ставит все, что надо.

Цитата(MSDN::WM_CTLCOLORSTATIC)

A static control, or an edit control that is read-only or disabled, sends the WM_CTLCOLORSTATIC message to its parent window when the control is about to be drawn. By responding to this message, the parent window can use the specified device context handle to set the text and background colors of the static control. 

  

Автор: Rapalex 27.6.2006, 14:48
Спасибо, А такие большие буквы не нужно использовать, они больше на рекламу походят, и читать не хочется. 

Автор: Coocky 27.6.2006, 14:55
Earnest
Цитата(Earnest @  27.6.2006,  14:45 Найти цитируемый пост)
посылает паренту запрос CTLCOLOR, и парент им ставит все, что надо

То же самое, что и 

Цитата(Coocky @  27.6.2006,  13:46 Найти цитируемый пост)
просто берет цвет стандартного окна 

Только вот вопрос, а если перекрасить окно руцями, т.е. поставить бекграунд другого цвета?

Цитата(Rapalex @  27.6.2006,  14:48 Найти цитируемый пост)
А такие большие буквы не нужно использовать

Нужно, ибо уже 20 раз читаю -"Я ставлю стиль Transparent, а окно не прозрачное smile  Почему?  пАмагите!!!"


Цитата(Rapalex @  27.6.2006,  14:48 Найти цитируемый пост)
и читать не хочется

Как , впрочем ,МСДН, я смотрю не сильно вами жалуется.... 

Цитата(Rapalex @  27.6.2006,  14:48 Найти цитируемый пост)
 они больше на рекламу походят

Зато запоминается лучше..
 

Автор: Mad 27.6.2006, 21:03
Цитата(Coocky @  27.6.2006,  13:55 Найти цитируемый пост)
Earnest, 

Цитата(Earnest @  27.6.2006,  14:45 )    
посылает паренту запрос CTLCOLOR, и парент им ставит все, что надо    

То же самое, что и 


Цитата(Coocky @  27.6.2006,  13:46 )    
просто берет цвет стандартного окна  

Только вот вопрос, а если перекрасить окно руцями, т.е. поставить бекграунд другого цвета?

Вот именно что не тоже самое smile

по получению сообщения WM_PAINT child контрол может послать WM_CTLCOLOR родительскому окну
в WM_CTLCOLOR пересылаеться HDC которое родитель настраивает (кстати это единственный способ изменить 
шрифт для child контрола smile )
а так же в возращаемом значении HBRUSH, который нужно ипользовать для фона
пример на API :
Код

void OnWmPaint(HDC hDC, RECT* clientRect)
{
    HBRUSH hBgBrush = (HBRUSH)SendMessage(hParentWnd, WM_CTLCOLOR, hDC, hWnd);
    FillRect(hDC, clientRect, hBgBrush);
}


Добавлено @ 21:04 
так что WM_CTLCOLOR возвращает не цвет фона, а кисть (она необязательно должна быть однотоной, можеш туда хоть битмэп всунуть smile ) 

Автор: Coocky 28.6.2006, 10:03
Цитата(Mad @  27.6.2006,  21:03 Найти цитируемый пост)
кстати это единственный способ изменить 
шрифт для child контрола 

 smile  Не понял.... smile  Как это -единственый?
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)