当前位置:C++技术网 > 资讯 > 字体对话框的创建及理解

字体对话框的创建及理解

更新时间:2015-10-22 23:41:40浏览次数:1+次

字体对话框的作用是用来选择字体。我们也经常能够见到。MFC使用CFontDialog类封装了字体对话框的所有操作。字体对话框也是一种模态对话框。

我们先看看字体对话框:

  我们先来了解CFontDialog类。它的常用构造函数原型如下:


CFontDialog(
   LPLOGFONT lplfInitial = NULL,
   DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS,
   CDC* pdcPrinter = NULL,
   CWnd* pParentWnd = NULL 
);

       参数说明:
       lplfInitial:指向LOGFONT结构体数据的指针,可以通过它设置字体的一些特征。
       dwFlags:指定选择字体的一个或多个属性,详情可在MSDN中查阅。
       pdcPrinter:指向一个打印设备上下文的指针。
       pParentWnd:指向字体对话框父窗口的指针。
       上面的构造函数中第一个参数为LOGFONT指针,LOGFONT结构体中包含了字体的大部分特征,包括字体高度、宽度、方向、名称等等。下面是此结构体的定义:



typedef struct tagLOGFONT {
    LONG lfHeight;
    LONG lfWidth;
    LONG lfEscapement;
    LONG lfOrientation;
    LONG lfWeight;
    BYTE lfItalic;
    BYTE lfUnderline;
    BYTE lfStrikeOut;
    BYTE lfCharSet;
    BYTE lfOutPrecision;
    BYTE lfClipPrecision;
    BYTE lfQuality;
    BYTE lfPitchAndFamily;
    TCHAR lfFaceName[LF_FACESIZE];
} LOGFONT;
获取字体对话框中所选字体
       我们在字体对话框中选择了字体后,如何获取选定的字体呢?我们可以通过CFontDialog类的成员变量m_cf间接获得选定字体的CFont对象。m_cf是CHOOSEFONT类型的变量,CHOOSEFONT结构体定义如下:
typedef struct {
    DWORD lStructSize;
    HWND hwndOwner;
    HDC hDC;
    LPLOGFONT lpLogFont;
    INT iPointSize;
    DWORD Flags;
    COLORREF rgbColors;
    LPARAM lCustData;
    LPCFHOOKPROC lpfnHook;
    LPCTSTR lpTemplateName;
    HINSTANCE hInstance;
    LPTSTR lpszStyle;
    WORD nFontType;
    INT nSizeMin;
    INT nSizeMax;
} CHOOSEFONT, *LPCHOOSEFONT;
接下来我们就基于单文档来创建个小程序,看看字体对话框的实例。我们创建一个单文档的项目,改名称为Graphics,我们在菜单中添加一个菜单项,ID号改为IDC_FONT,caption改为字体。接着我们利用类向导为它添加消息响应函数,不过我更建议你收代码!



void CGraphicView::OnFont() 
{
 // TODO: Add your command handler code here
 CFontDialog dlg;
 if(IDOK==dlg.DoModal())
 {
  if(m_font.m_hObject)
   m_font.DeleteObject();
  m_font.CreateFontIndirect(dlg.m_cf.lpLogFont);
  m_strFontName=dlg.m_cf.lpLogFont->lfFaceName;
  Invalidate();
 }
}
void CGraphicView::OnDraw(CDC* pDC)
{
 CGraphicDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
CFont *pOldFont=pDC->SelectObject(&m_font);
 pDC->TextOut(0,0,m_strFontName);
 pDC->SelectObject(pOldFont);
}
不过首先你得添加两个成员变量:



CString m_strFontName;
 CFont m_font;
记得为第一个变量初始化为空哦!


下面看看实现吧: