WM_CTLCOLOR ...

Hi, all ...

I have been desperatly trying, in vain, to change the color of
a static control, using VC++ under Windows 3.1.
Any help appreciated !
I used the following declaration :

-----------------------------------------------
class CMainWnd : public CFrameWnd
{  
public:
    CMainWnd ();
private:
    DECLARE_MESSAGE_MAP();
    CStatic lblFancy;
    afx_msg HBRUSH OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor);    
};
-----------------------------------------------

And the body of the callback is :

-----------------------------------------------
afx_msg HBRUSH CMainWnd::OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{    
    if (nCtlColor == CTLCOLOR_STATIC)
    {
        if (pWnd->GetSafeHwnd() == lblFancy.GetSafeHwnd())
        {
            pDC->SetTextColor(RGB(0,255,0));
            pDC->SetBkColor(RGB(0,0,0));        
            return (HBRUSH) NULL;              
        }                    
    }
    return (HBRUSH) NULL;    
}
-----------------------------------------------

I tried to remove all the 'ifs', but it didn't change anything.
I know that this code is executed, (I added debugging messages and beeps),
but it doesn't change the color of my static control at all.

I used this technique without MFCs, using "pure" SDK C, and it worked
fine.
Therefore, I would appreciate any help !

By the way, I have another question : I also need to change the
color of a combo-box, but the help files are not very clear about
that, and I don't know how to do. But first, I must be able to
change the color of a simple static control !

Thanks by advance.

----------------
Cedric Simon.
garfield020497Asked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

serge010697Commented:
Have you tried to return real brush handle instead of NULL from OnCtlColor?
0
serge010697Commented:
Have you tried to return real brush handle instead of NULL from OnCtlColor?
0
garfield020497Author Commented:
Yes, Serge, I tried to return BLACK_BRUSH, but it didn't work
better, that's why I tried to retrun NULL, just to see...
0
Exploring SharePoint 2016

Explore SharePoint 2016, the web-based, collaborative platform that integrates with Microsoft Office to provide intranets, secure document management, and collaboration so you can develop your online and offline capabilities.

xbwenCommented:
1. Don't forget
    BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
      //{{AFX_MSG_MAP(CMyWnd)
      ...
        ON_WM_CTLCOLOR()
      ...
      //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
2. can you try this way:
   afx_msg HBRUSH CWappView::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor)
{
    static CBrush TxtBkBrush(RGB(0, 255, 0));
   
    if (pWnd == (CWnd *)(&lblFancy) && nCtlColor ==                      CTLCOLOR_STATIC)
    {
        pDC->SetTextColor(RGB(0, 0, 0));
        pDC->SetBkColor(RGB(255, 255, 0));
        return (HBRUSH)TxtBkBrush.GetSafeHandle();
    }
   
    return NULL;
}
    these code work very well in my application.

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
syed_dgreatCommented:
Try this one. I think this will work:-
// This will display white text on black background!!
CBrush *pBrush = CBrush::FromHandle(
(HBRUSH)::GetStockObject(BLACK_BRUSH));
pDC->SelectObject(pBrush);
pDC->SetTextColor(RGB(0xff,0xff,0xff));
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)(*pBrush);
0
garfield020497Author Commented:
Hard luck !
None of these two pieces of code work in my application !
I did not forget the "BEGIN_MESSAGE_MAP" stuff, and I said
that my code IS executed but seems to have no effect.
My problem must be elsewhere.
And there is still the second part of my question
(this is now the fourth time I submit this question, but
nobody seem to want to answer it !!!!!!!) :

I would like to change the colors for a combobox. You can
explain me everything you want, but it would be so easy
to understand with a small sample of code !
(assuming that I can solve my color problem with a static
control, first :)
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
System Programming

From novice to tech pro — start learning today.