MFC学习篇:鸡啄米MFC教程字体格式设置函数解析

目前在学习MFC的过程中,初学使用鸡啄米的教程学习(向鸡啄米致敬),一边学习,一边应用,以及一边总结学习过程中所遇到的各个问题。

这篇主要解析鸡啄米字体格式设置里面所用到的各个函数,由于水平有限,难免会出现错误,望指正。

鸡啄米MFC教材字体格式设置函数解析

Author:Meteor

函数实现如下:

void CWORDDlg::OnBnClickedButton1()

{

// TODO: Add your control notification handler code here

CString strFontName;

LOGFONT lf;

memset(&lf, 0, sizeof(LOGFONT));  

_tcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("宋体"));

CFontDialog fontDlg(&lf);

if (IDOK == fontDlg.DoModal())

{

if (m_font.m_hObject)

{

m_font.DeleteObject();

}

m_font.CreateFontIndirect(fontDlg.m_cf.lpLogFont);  

GetDlgItem(IDC_FONT_EDIT)->SetFont(&m_font);

strFontName = fontDlg.m_cf.lpLogFont->lfFaceName;

SetDlgItemText(IDC_FONT_EDIT, strFontName);  

}

}

 

 

CString strFontName;设置变量,用来存放我们所设置的字体格式的相关参数

LOGFONT lfLOGFONT:结构体变量,结构体是字体格式相关的,比如大小,字体格式,颜色等参数

 

memset(&lf, 0, sizeof(LOGFONT));

memset函数定义如下:

 

所以这一步的实际意义是将之前定义的lf结构体进行一个初始赋值动作,实际上是将其全部写0

 

_tcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("宋体"));

_tcscpy_s,是一个宏定义,找到其定义的地方:#define _tcscpy_s       wcscpy_s

那么实质上调用的就是wcscpy_s,该函数原型:

errno_t wcscpy_s(

   wchar_t *strDestination,

   size_t numberOfElements,

   const wchar_t *strSource 

);

详细说明如下

Parameters

strDestination 

Location of destination string buffer

numberOfElements 

Size of the destination string buffer.

strSource 

Null-terminated source string buffer.

 

其中原函数LF_FACESIZE    #define LF_FACESIZE         32

最后,可以看出原函数的功能是将该lf 字体设置为宋体

 

CFontDialog fontDlg(&lf);

构造字体对话框,字体格式便是之前所定义的宋体,其中CFontDialog是一个库类,就是字体对话框的库类,具体结构可以查看MSDN,此处不做说明。

 

if (IDOK == fontDlg.DoModal())弹出对话框

         if (m_font.m_hObject)    

         {    

            m_font.DeleteObject();    

         }

这一句是指当也有字体对象时,删除他(我们在第二次设置字体格式时,所做动作就有这个,删除前一个设置的字体格式,具体函数实现参考MSDN)

 

m_font.CreateFontIndirect(fontDlg.m_cf.lpLogFont);  

CreateFontIndirect()函数意义如下:

Initializes a CFont object with the characteristics given in a LOGFONT structure pointed to by lpLogFont.

即使用选定字体的 LOGFONT 创建新的字体

 

GetDlgItem(IDC_FONT_EDIT)->SetFont(&m_font);

获取定义的编辑框里面的CWnd,并且设置字体。

 

strFontName = fontDlg.m_cf.lpLogFont->lfFaceName;

当字体对话框键入OK按钮时,将字体格式变量赋值给 strFontName

 

SetDlgItemText(IDC_FONT_EDIT, strFontName);  

把我们所设置的字体格式写入到编辑框内

 

 Thanks for your reading


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值