改变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);
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);
相关文章推荐
- mfc如何改变静态文本框字体大小及mfc按钮问题用CButtonST进行图形按钮处理
- MFC之对话框美化(背景图片,按钮字体大小,字形,背景颜色)
- UITableViewCell删除按钮的背景颜色,字体大小可以改变吗?
- [置顶] mfc怎么动态加载时间以及改变字体大小和颜色。
- MFC 改变static字体颜色、大小、背景颜色【自定义类】
- MFC 改变static字体颜色、大小、背景颜色【自定义类】
- MFC修改按钮中字体颜色大小
- VS2010 MFC编辑框如何改变字体的大小和颜色
- VS2010 MFC中改变static字体颜色、大小、背景颜色(自定义类),及手动关联变量的方法
- mfc怎么动态加载时间以及改变字体大小和颜色
- MFC改变static text颜色和内容及字体大小
- MFC 改变static字体颜色、大小、背景颜色【自定义类】
- MFC开发IM-第五篇、MFC中改变static字体颜色、大小、背景颜色(自定义类),及手动关联变量的方法
- ios改变导航条title的字体大小和颜色
- Eclipse调试:改变颜色, 背景与字体大小 和xml字体调整
- 改变TextView里面某部分字体的颜色、大小、样式等属性
- mfc的static的字体及颜色的改变
- MFC控件大小及控件字体跟随对话框的改变而改变
- C++学习笔记之MFC改变按钮颜色
- 单击按钮改变panel中的字体大小和背景色