Solved

WM_CTLCOLOR ...

Posted on 1997-03-26
6
836 Views
Last Modified: 2013-11-20
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.
0
Comment
Question by:garfield020497
6 Comments
 
LVL 1

Expert Comment

by:serge010697
Comment Utility
Have you tried to return real brush handle instead of NULL from OnCtlColor?
0
 
LVL 1

Expert Comment

by:serge010697
Comment Utility
Have you tried to return real brush handle instead of NULL from OnCtlColor?
0
 

Author Comment

by:garfield020497
Comment Utility
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
What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

 
LVL 1

Accepted Solution

by:
xbwen earned 100 total points
Comment Utility
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
 

Expert Comment

by:syed_dgreat
Comment Utility
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
 

Author Comment

by:garfield020497
Comment Utility
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

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Introduction: Ownerdraw of the grid button.  A singleton class implentation and usage. Continuing from the fifth article about sudoku.   Open the project in visual studio. Go to the class view – CGridButton should be visible as a class.  R…
If you use Adobe Reader X it is possible you can't open OLE PDF documents in the standard. The reason is the 'save box mode' in adobe reader X. Many people think the protected Mode of adobe reader x is only to stop the write access. But this fe…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now