【VC开源代码栏目提醒】:网学会员,鉴于大家对VC开源代码十分关注,论文会员在此为大家搜集整理了“WizFontExampleStatic.cpp”一文,供大家参考学习!
// WizFontExampleStatic.cpp : implementation file
//
#include "stdafx.h"
#include "EnumFonts.h"
#include "WizFontExampleStatic.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CWizFontExampleStatic
CWizFontExampleStatic::CWizFontExampleStatic()
{
}
CWizFontExampleStatic::~CWizFontExampleStatic()
{
}
BEGIN_MESSAGE_MAP(CWizFontExampleStatic, CStatic)
//{{AFX_MSG_MAP(CWizFontExampleStatic)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWizFontExampleStatic message handlers
//初始化字符串要使用的字体
void CWizFontExampleStatic::SetFont (LPCTSTR fontname, int pp_size, BOOL bItal, BOOL bBold, BOOL bUnder)
{
memset (&m_lf, 0, sizeof(m_lf));
m_lf.lfCharSet = DEFAULT_CHARSET;
strcpy(m_lf.lfFaceName, fontname);
m_lf.lfHeight = pp_size*10;
m_lf.lfItalic = bItal;
m_lf.lfUnderline = bUnder;
m_lf.lfWeight = (bBold) ? FW_BOLD : FW_REGULAR;
//获得设备场景
CClientDC dc (this);
if (m_Font.GetSafeHandle())
m_Font.DeleteObject();
//创建字体
if (!m_Font.CreatePointFontIndirect(&m_lf, &dc))
{
ASSERT(0); return;
}
CString text;
TCHAR bold_ch = (bBold) ? 'B' : ' ';
TCHAR ital_ch = (bItal) ? 'I' : ' ';
TCHAR Under_ch = (bUnder) ? 'U' : ' ';
text.Format (_T("%s size % d %c %c %c"), fontname, pp_size, bold_ch, ital_ch, Under_ch);
m_strSample = text;
//重画该窗体
CWnd* parent = GetParent();
if (parent)
{
CRect r;
GetWindowRect(r);
parent->ScreenToClient(&r);
parent->InvalidateRect(r);
parent->UpdateWindow();
}
Invalidate(TRUE);
}
//按设定的格式显示字符串
void CWizFontExampleStatic::OnPaint()
{
//获得设备场景
CPaintDC dc(this);
CRect rcText;
CFont *oldFont;
CSize TextExtent;
COLORREF crText;
TEXTMETRIC tm;
int bkMode, len, x, y;
//要显示的字符串
CString strSample = _T("AaBbYyZz ");
strSample += m_strSample;
if (!m_Font.GetSafeHandle())
return;
//获得客户区大小
GetClientRect( &rcText );
//将字体选进设备场景
oldFont = dc.SelectObject( &m_Font );
crText = dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
bkMode = dc.SetBkMode(TRANSPARENT);
//计算字符串的大小
dc.GetTextMetrics( &tm );
len = strSample.GetLength();
TextExtent = dc.GetTextExtent(strSample, len);
TextExtent.cy = tm.tmAscent - tm.tmInternalLeading;
if ((TextExtent.cx >= (rcText.right - rcText.left)) ||
(TextExtent.cx <= 0))
x = rcText.left;
else
x = rcText.left + ((rcText.right - rcText.left) - TextExtent.cx) / 2;
y = min(rcText.bottom,
rcText.bottom - ((rcText.bottom - rcText.top) - TextExtent.cy) / 2);
//显示字符串
dc.ExtTextOut(x, y - (tm.tmAscent), ETO_CLIPPED, &rcText,
strSample, len, NULL);
dc.SetBkMode(bkMode);
dc.SetTextColor(crText);
//还原字体
if (oldFont)
dc.SelectObject(oldFont);
}