Hi,

I want to change the color of my button during runtime..

i am writing the following code inthe OnCtlColor of my dialog box

HBRUSH CPIVSyncDlg::OnCtlColor(CDC *pdc,CWnd *pwnd,UINT nCtlColor)
{
	HBRUSH hbr = CDialog::OnCtlColor(pdc,pwnd,nCtlColor);

	switch(nCtlColor)
	{
		case CTLCOLOR_BTN:
			if(pwnd->GetDlgCtrlID() == IDC_STARTSTOP)
				pdc->SetBkColor(RGB(255,0,0));
			return (HBRUSH)m_btbrush.GetSafeHandle();
		case CTLCOLOR_DLG:
			pdc->SetBkColor(RGB(255,255,255));
			pdc->SetBkMode(TRANSPARENT);
			return (HBRUSH)m_hbrush.GetSafeHandle();
		case CTLCOLOR_EDIT:
			pdc->SetBkColor(RGB(0,0,0));
			pdc->SetBkMode(TRANSPARENT);
			return (HBRUSH)m_hbrush.GetSafeHandle();
		default:
			return CDialog::OnCtlColor(pdc,pwnd,nCtlColor);		
	}
	return hbr;
	//return (HBRUSH)m_hbrush.GetSafeHandle();
}

the button is IDC_STARTSTOP i want to turn it red..but the interesting thing is the whole dialog box turns red except the buttons...

i have searched the msdn library and I am following all the instruction given in example ...all in vein... any suggestion would be helpful..

thanks,
Hardik

the method in "How do I change the background color of a control?" will not work for buttons!

If you want to change the color of a dialog button, you have to use an owner-draw button. (You can use bitmap buttons.) Changing the color through OnCtlColor() will not work for buttons. The following Knowledge Base articles may be of help to you: Q32685, "Using the WM_CTLCOLOR Message,"


Hi,

I want to change the color of my button during runtime..

i am writing the following code inthe OnCtlColor of my dialog box

HBRUSH CPIVSyncDlg::OnCtlColor(CDC *pdc,CWnd *pwnd,UINT nCtlColor)
{
	HBRUSH hbr = CDialog::OnCtlColor(pdc,pwnd,nCtlColor);

	switch(nCtlColor)
	{
		case CTLCOLOR_BTN:
			if(pwnd->GetDlgCtrlID() == IDC_STARTSTOP)
				pdc->SetBkColor(RGB(255,0,0));
			return (HBRUSH)m_btbrush.GetSafeHandle();
		case CTLCOLOR_DLG:
			pdc->SetBkColor(RGB(255,255,255));
			pdc->SetBkMode(TRANSPARENT);
			return (HBRUSH)m_hbrush.GetSafeHandle();
		case CTLCOLOR_EDIT:
			pdc->SetBkColor(RGB(0,0,0));
			pdc->SetBkMode(TRANSPARENT);
			return (HBRUSH)m_hbrush.GetSafeHandle();
		default:
			return CDialog::OnCtlColor(pdc,pwnd,nCtlColor);		
	}
	return hbr;
	//return (HBRUSH)m_hbrush.GetSafeHandle();
}

the button is IDC_STARTSTOP i want to turn it red..but the interesting thing is the whole dialog box turns red except the buttons...

i have searched the msdn library and I am following all the instruction given in example ...all in vein... any suggestion would be helpful..

thanks,
Hardik

What is here m_btbrush and m_hbrush ?

I got an error with this code like this :

error C2228: left of '.GetSafeHandle' must have class/struct/union

This article has been dead for over six months. Start a new discussion instead.