MFC应用实例:[56]自定义窗口设置字体颜色
1、新建一个基于对话框的应用程序,工程名为ControlFont。
![MFC应用实例:[56]自定义窗口设置字体颜色](https://exp-picture.cdn.bcebos.com/aebdff86242fa872d5135257bfdaf05e4b23e9a3.jpg)
2、界面设计如下,添加三个按钮
![MFC应用实例:[56]自定义窗口设置字体颜色](https://exp-picture.cdn.bcebos.com/955ea0e434daf05e0f2f95c2751d96d81919e5a3.jpg)
3、新建一个Dialog设计如下:
![MFC应用实例:[56]自定义窗口设置字体颜色](https://exp-picture.cdn.bcebos.com/7830e01d96d818192b2c4b7e876efbf203b3dea3.jpg)
4、双击“单击我,设置我的颜色。”按钮添加响应函数,响应函数中添加一下代码:
void CControlFontDlg::OnButton1()
{
// TODO: Add your control notification handler code here
COLORDATE dlg;
if(dlg.DoModal() == IDOK)
{
m_TextColor = RGB(dlg.m_rText, dlg.m_gText, dlg.m_bText);
m_BKColor = RGB(dlg.m_rBG, dlg.m_gBG, dlg.m_bBG);
}
Invalidate(TRUE) ;
}
![MFC应用实例:[56]自定义窗口设置字体颜色](https://exp-picture.cdn.bcebos.com/0d2fe5f202b375d7c9775747515872dadf49d8a3.jpg)
5、为CControlFontDlg类添加OnDrawItem()函数,绘制自定义字体的按钮。
在OnDrawItem()函数中添加一下代码:
void CControlFontDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
if(nIDCtl==IDC_BUTTON1) //绘制按钮
{
CDC dc;
RECT rect;
dc.Attach(lpDrawItemStruct ->hDC); // 获取按钮设备描述符
rect = lpDrawItemStruct->rcItem; //保存按钮区域坐标
dc.Draw3dRect(&rect,RGB(255,0,255),RGB(0,0,0));
dc.FillSolidRect(&rect,RGB(100,100,255)); //设定按钮背景色
UINT state=lpDrawItemStruct->itemState; //设置按钮状态
if((state & ODS_SELECTED))
dc.DrawEdge(&rect,EDGE_SUNKEN,BF_RECT);
else
dc.DrawEdge(&rect,EDGE_RAISED,BF_RECT);
dc.SetBkColor(m_BKColor); //设置字体背景颜色
dc.SetTextColor(m_TextColor); //设置字体颜色
TCHAR buffer[MAX_PATH]; //绘制字体
ZeroMemory(buffer,MAX_PATH);
::GetWindowText(lpDrawItemStruct->hwndItem,buffer,MAX_PATH);
dc.DrawText(buffer,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE); dc.Detach();
}
}
![MFC应用实例:[56]自定义窗口设置字体颜色](https://exp-picture.cdn.bcebos.com/db196cdade49610fdd5a41b7a56817e950e1d2a3.jpg)
6、程序运行如下:
![MFC应用实例:[56]自定义窗口设置字体颜色](https://exp-picture.cdn.bcebos.com/ac45306817e951e155f4b4e55e3da824d9e9cfa3.jpg)
![MFC应用实例:[56]自定义窗口设置字体颜色](https://exp-picture.cdn.bcebos.com/5917cb3da824d8e9acde57d5da598540112ac8a3.jpg)