• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 147
  • Last Modified:

changing text color URGENT

I have a dialog with a lot of edit control.I want to change the text color to red of only one edit control.How can I do it?
0
erp
Asked:
erp
1 Solution
 
chensuCommented:
Override the CWnd::OnCtlColor. Look into the MFC Technical Note "TN062: Message Reflection for Windows Controls".
0
 
Answers2000Commented:
Your dialog box will receive WM_CTLCOLOREDIT messages for each edit control in your dialog.  What you do is add a handler for this message and look for the specific control you are interested in (and change it's text color):

STEPS
1. Add WM_CTLCOLOR handler using class wizard.  You'll get a funciton something like:

HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
      HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
      
      // TODO: Change any attributes of the DC here
      
      // TODO: Return a different brush if the default is not desired
      return hbr;
}

2. Now the 2nd parameter pWnd tells you which control the message is for, and the 3rd parameter tells you which type of control.  Add a test for either or both of these, and using SetTextColor on the DC to change the foreground color.

HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

 if ( pWnd->GetDlgCtrlID() == ID_MYEDIT )
 {
   pDC->SetTextColor( RGB(255,0,0) ) ; // changes to text red
 }
      
 return hbr;
}

3. You can also change the background color of the edit control by returning an appropriate brush (which is used for the "non text" areas of the control) and using pDC->SetBkColor(..etc..) (which is used for the "text" areas of the control).


A FINAL NOTE
1. If you find yourself doing this a lot you may prefer to make your own class derived from CEdit which handles the WM_CTLCOLOR message (it will receive it thru message reflection) and has extra members for setting the background/foreground colors.
2. This is documented in "TN062" in the MFC help (simply type this into the Index tab of the dialog which appears when you click Help/Search menu)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: MCSA MCSE Windows Server 2012

This course teaches how to install and configure Windows Server 2012 R2.  It is the first step on your path to becoming a Microsoft Certified Solutions Expert (MCSE).

Tackle projects and never again get stuck behind a technical roadblock.
Join Now