您的位置:首页 > 其它

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

2017-11-08 17:50 281 查看
主要的步骤有: 

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: