Solved

WM_CTLCOLOR ...

Posted on 1997-03-26
6
839 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
ID: 1300691
Have you tried to return real brush handle instead of NULL from OnCtlColor?
0
 
LVL 1

Expert Comment

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

Author Comment

by:garfield020497
ID: 1300693
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
Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

 
LVL 1

Accepted Solution

by:
xbwen earned 100 total points
ID: 1300694
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
ID: 1300695
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
ID: 1300696
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

Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Need to retreive data from .TFS file exported by DVR 8 195
Rewrite URL With Encoded Characters 6 78
iSeries DB2 Query 2 95
fizzArray2 challenge 1 78
Introduction: Load and Save to file, Document-View interaction inside the SDI. Continuing from the second article about sudoku.   Open the project in visual studio. From the class view select CSudokuDoc and double click to open the header …
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.
Along with being a a promotional video for my three-day Annielytics Dashboard Seminor, this Micro Tutorial is an intro to Google Analytics API data.

813 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

14 Experts available now in Live!

Get 1:1 Help Now