MFC中字体设置

来源:互联网 发布:高中语文知乎 编辑:程序博客网 时间:2024/04/29 03:54

MFC中字体设置

  MFC提供了一个CFont类专门用来设置字体.这个类派生于CGdiObject类,CGdiObject类为各种Windows图形设备接口(GDI)对象,如位图、区域、画刷、画笔、调色板、字体等提供了一些基本类。我们不会直接构造一个CGdiObject对象,而是使用某一个派生类如CPen或CBrush创建。在构造了一个CFont对象后,还必须利用该类提供的几个初始化函数(CreateFont\CreateFontIndirect\CreatePointFont\CreatePointFontIndirect)之一对该对象进行初始化,然后才能使用这个对象,这些初始化函数主要是将CFont这个C++对象与字体资源关联起来.CreatePointFont声明:

  BOOL CreatePointFont(int nPointSize,LPCTSTR lpszFaceName.CDC *pDC=NULL);nPointSize:设置将要创建字体的高度,单位是一个点的十分之一.pDC是一个CDC对象的指针,用来把nPointSize中指定的高度转换为逻辑单位.如果其值为空,就使用一个屏幕设备描述表完成这种转换.与其它GDI对象一样,当创建一个字体对象并将其初始化后,还必须将其选入设备描述表才能使用.在OnChar()响应函数中修改代码如下:

  void CTestView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

  {

  // TODO: Add your message handler code here and/or call default

  CClientDC dc(this);

  CFont font;

  font.CreatePointFont(300,"华文行楷",NULL);

  CFont *poldFont=dc.SelectObject(&font);//将创建的字体对象选入设备描述符,并返回先前的字体且予以保存

  TEXTMETRIC tm;

  dc.GetTextMetrics(&tm);

  if(0x0d==nChar)

  {

  m_strLine.Empty();

  m_ptOrigin.y+=tm.tmHeight;

  }

  else if(0x08==nChar)

  {

  COLORREF clr=dc.SetTextColor(dc.GetBkColor());

  dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);

  m_strLine=m_strLine.Left(m_strLine.GetLength()-1);

  dc.SetTextColor(clr);

  }

  else

  {

  m_strLine+=nChar;

  }

  CSize cs=dc.GetTextExtent(m_strLine);

  CPoint pt;

  pt.x=m_ptOrigin.x+cs.cx;

  pt.y=m_ptOrigin.y;

  SetCaretPos(pt);

  dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);

  dc.SelectObject(poldFont);//把设备描述表中的字体恢复为先前的字体.

  CView::OnChar(nChar, nRepCnt, nFlags);

  }