改变MFC按钮的颜色和字体大小的处理

主要的步骤有: 

1. 首先在属性设为OwerDraw,这是运行的话,按钮并不会显示。 

2. 重载PreTranslateMessage和OnDrawItem函数在按钮所在的对话框中

3.实现重绘的代码 ;




void CDockBotton::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)


if (nIDCtl == IDC_BUTTON_SCANPure 
|| IDC_BUTTON_DYNAMICPure
|| IDC_BUTTON_3DSHOWPure
|| IDC_BUTTON_DPSHOWPure)         //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(100, 100, 100), RGB(0, 0, 0));
dc.FillSolidRect(&rect, RGB(50, 50, 50));//Here you can define the required color to appear on the Button.
dc.SetTextColor(RGB(255, 0, 0)); 


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);
}


switch (m_Style)
{
case 0:
{
dc.SetBkColor(RGB(50, 50, 50));   //Setting the Text Background color
dc.SetTextColor(RGB(255, 0, 0));     //Setting the Text Color
}
break;
case 1:
{
dc.Draw3dRect(&rect, RGB(0, 0, 0), RGB(255, 255, 255));
dc.FillSolidRect(&rect, RGB(0, 205, 0));


dc.SetBkColor(RGB(50, 50, 50));   //Setting the Text Background color
dc.SetTextColor(RGB(255, 0, 0));     //Setting the Text Color
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);
}
}
break;
case 2:
{
dc.Draw3dRect(&rect, RGB(0, 0, 0), RGB(255, 255, 255));
dc.FillSolidRect(&rect, RGB(255, 255, 255));


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


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);
}
}
break;
}
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  




CPaneDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
}




HBRUSH CDockBotton::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr;
pDC->SetTextColor(RGB(255, 255, 255));
pDC->SetBkMode(OPAQUE);
pDC->SetBkColor(RGB(50, 50, 50));
hbr = CreateSolidBrush(RGB(50, 50, 50));

return hbr;
}

BOOL CDockBotton::PreTranslateMessage(MSG* pMsg)
{
if (WM_KEYDOWN == pMsg->message)
{
m_Style = 1;
}
if (pMsg->message == WM_KEYUP)
{
m_Style = 2;
}
return CPaneDialog::PreTranslateMessage(pMsg);
}


按钮中字体大小格式修改 :


CFont * f; 
     f = new CFont; 
     f->CreateFont(36, // nHeight 
     0, // nWidth 
     0, // nEscapement 
     0, // nOrientation 
     FW_BOLD, // nWeight 
     TRUE, // bItalic 
     FALSE, // bUnderline 
     0, // cStrikeOut 
     ANSI_CHARSET, // nCharSet 
     OUT_DEFAULT_PRECIS, // nOutPrecision 
     CLIP_DEFAULT_PRECIS, // nClipPrecision 
     DEFAULT_QUALITY, // nQuality 
     DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily 
     _T("Arial")); // lpszFac 
   
     GetDlgItem(IDC_BUTTON1)->SetFont(f);


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值