ON_WM_CTLCOLOR

1 отговора 98 прегледа
#1

ON_WM_CTLCOLOR

В MSDN-а пише:
"OnCtlColor must return a handle to the brush that is to be used for painting the control background." за

HBRUSH CWnd::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

И така пиша си в моя си
class CMyView : public CFormView ...

HBRUSH CMyView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hb;

switch( pWnd->GetDlgCtrlID() )
{


}

return hb;
}

където switch-а изчерпва всички контроли, появяващи се върху CFormView-то.

Обаче
след малко промени размерите на CMyView-то изведнъж не само че всички контроли се заоцветяват в подразбиращия се сив цвят, ами и останалата част от екрана ( !!! ) - в т.ч. рамката на приложението заедно с мена, toolbar-ове и т.н., както и всичко останало разбира се, се оцветява в това сиво, когато приложението е на преден план. Когато друг прозорец стане активен (от друго приложение) разкарва тая част от ,,сивотата'', която той покрива.

Първо мислех, че е от моите сметки за размери на разните му там контроли (преоразмерявам ги с MoveWindow()), ама като разкарам кода за ON_WM_CTLCOLOR не се стига до сивота. Само при прихващането му стават тия изгъзици. И не мога да установя общ признак за появяването им ...

Някой по-на ти с MFC-то да каже нещо ?

Редактирано от ЯPOCTcлaв на

Отговор
в отговор на ЯPOCTcлaв #2

Re: ON_WM_CTLCOLOR

eto ti edin primer za prihvashtane na suobshtenieto WM_CTLCOLOR, kogato iskash da smenish cveta na texta i background-a na primeren Static kontrol.

da rechem, che v header file-a sme deklarirali
....
CBrush m_brBlackBrush;
....

v konstruktora na klasa na izgleda suzdavame chetkata:
...
VERIFY(m_brBlackBrush.CreateSolidBrush(RGB(0,0,0)));
//cherna chetka

posle vuv funkciata:

OnCtlColor(.....argumenti blah-blah....){
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);

pDC->SetBkMode(TRANSPARENT);
switch (nCtlColor){
case CTLCOLOR_STATIC:
if (*pWnd == *GetDlgItem(IDC_NASHIA_STATIC){
pDC->SetTextColor(RGB(255, 255, 255);
return m_brBlackBrush;
}
break;
.......................
}
.......................
return hbr;
}

po tozi nachin vuprosnia static, shte se ocveti v cherno, a texta v nego - v bialo.

Отговор