Monday, August 29, 2011

Coloring Button BGCOLOR using MFC


Step 1:

Chnage Button Owner Draw propery to TRUE

Step 2:

Add WM_DRAWITEM message for the parent Dialog

And add this handler function..

void CStaticDataItem::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
if(nIDCtl==IDC_BTN_OK) //checking for the button
{
CDC dc;
RECT rect;
dc.Attach(lpDrawItemStruct ->hDC); // Get the Button DC to CDC

rect = lpDrawItemStruct->rcItem; //Store the Button rect to our local rect.

dc.Draw3dRect(&rect,RGB(255,255,255),RGB(0,0,0));// 32,137,223 100,200,155

dc.FillSolidRect(&rect,RGB(32,137,223));//Here you can define the required color to appear on the Button.

UINT state=lpDrawItemStruct->itemState; //This defines the state of the Push button either pressed or not.

if((state & ODS_SELECTED))
{
dc.DrawEdge(&rect,EDGE_SUNKEN,BF_RECT);

}
else
{
dc.DrawEdge(&rect,EDGE_RAISED,BF_RECT);
}

dc.SetBkColor(RGB(200,200,123)); //Setting the Text Background color
dc.SetTextColor(RGB(255,0,0)); //Setting the Text Color


TCHAR buffer[MAX_PATH]; //To store the Caption of the button.
ZeroMemory(buffer,MAX_PATH ); //Intializing the buffer to zero
::GetWindowText(lpDrawItemStruct->hwndItem,buffer,MAX_PATH); //Get the Caption of Button Window

dc.DrawText(buffer,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);//Redraw the Caption of Button Window

dc.Detach(); // Detach the Button DC
}

CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}

No comments: