ON_WM_CTLCOLOR
1 отговора
98 прегледа
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-то да каже нещо ?
"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в на
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.
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.