字体

来源:互联网 发布:网易云课堂mac电脑版 编辑:程序博客网 时间:2024/04/30 13:28
typedef struct tagLOGFONT
  { // lf 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;


lfHeight:
  以逻辑单位指定字体字符元(character cell)或字符的高度。字符高度值为字符元高度值减去内部行距(internal-leading)值。当lfHeight大于0时,字体映射程序将该值转换为设备单位,并将它与可用字体的字符元高度进行匹配;当该参数为0时,字体映射程度将使用一个匹配的默认高度值;如果参数的值小于0,则将其转换为设备单位,并将其绝对值与可用字体的字符高度进行匹配。对于任何一种情况,字体映射程度最终得到的字体高度值不会超过所指定的值。以MM_TEXT映射模式下,字体高度值和磅值有如下的换算公式:lfHeight=-MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
lfWidth:
  以逻辑单位指定字体字符的平均宽度。如果lfWidth的值为0,则根据设备的纵横比从可用字体的数字转换纵横中选取最接近的匹配值,该值通过比较两者之间的差异的绝对值得出。
lfEscapement:
  以十分之一度为单位指定每一行文本输出时相对于页面底端的角度。
ifOrientation:
  以十分之一度为单位指定字符基线相对于页面底端的角度。
lfWeight:
  指定字体重量。在Windows中,字体重量这个术语用来指代字体的粗细程度。lfWeight的范围为0到1000,正常情况下的字体重量为400,粗体为700。如果lfWeight为0,则使用默认的字体重量。100~900。


lfItalic:
  当lfItalic为TRUE时使用斜体
lfUnderline:
  当lfUnderline为TRUE时给字体添加下划线
lfStrikeOut:
  当lfStrikeOut为TRUE时给字体添加删除线
lfCharSet:
  指定字符集。可以使用下面的预定义值:

ANSI_CHARSET 

OEM_CHARSET 

SYMBOL_CHARSET 

UNICODE_CHARSET

CHINESEBIG5_CHARSET

GB2312_CHARSET 其中OEM字符集是与操作系统相关的。(不重要)

lfOutPrecision:
  指定输出精度。输出精度定义了输出与所要求的字体高度、宽度、字符方向等的接近程度。它可以为下面的值之一:

OUT_CHARACTER_PRECIS 

OUT_DEFAULT_PRECIS 

OUT_STRING_PRECIS 

OUT_STROKE_PRECIS(不重要)

lfClipPrecision:
  指定剪辑精度。剪辑精度定义了当字符的一部分超过剪辑区域时对字符的剪辑方式,它可以为下列值之一:

CLIP_CHARACTER_PRECIS 

CLIP_DEFAULT_PRECIS 

CLIP_STROKE_PRECIS(不重要)

lfQuality:
  定义输出质量。输出质量定义了图形设备接口在匹配逻辑字体属性到实际的物理字体的所使用的方式,它可以为下列值之一:

DEFAULT_QUALITY (默认质量)

DRAFT_QUALITY (草稿质量)

PROOF_QUALITY (正稿质量)(不重要)

lfPitchAndFamily:
  指定字体的字符间距和族。最低两位指定字体的字符间距为以下值之一:DEFAULT_PITCH FIXED_PITCHVARIABLE_PITCH第4到7位指定字体族为以下值之一:FF_DECORATIVE FF_DONTCAREFF_MODERN FF_ROMAN FF_SCRIPT FF_SWISS这些值的具体含义可以参考Visual C++中关于结构LOGFONT的文档。字符间距和字体族可以使用逻辑或(OR)运算符来进行组合。(不重要
lfFaceName:()
  一个指定以NULL结尾的字符串,它指定的所用的字体名。该字符串的长度不得超过32个字符,如果lfFaceName为NULL,图形设备接口将使用默认的字体名。设置lfFaceName时应该使用库函数strcpy。


CFontDialog::CFontDialog( LPLOGFONT lplfInitial = NULL, DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS, CDC* pdcPrinter = NULL, CWnd* pParentWnd = NULL );构造一个对象,其中参数lplfInitial指向一个LOGFONG结构.如果该参数设置为NULL表示不设置初始字体。pdcPrinter指向一个代表打印机设备环境的DC对象,若设置该参数则选择的字体就为打印机所用。pParentWnd用于指定父窗口。通过调用DoModal()创建对话框,在返回后通过调用以下函数来得到用户选择:
void CFontDialog::GetCurrentFont( LPLOGFONT lplf );用来获得所选字体的属性。该函数有一个参数,该参数是指向LOGFONT结构的指针,函数将所选字体的各种属性写入这个LOGFONT结构中。 
CString CFontDialog::GetFaceName( ) 得到所选字体名字。 
int CFontDialog::GetSize( ) 得到所选字体的尺寸(以10个象素为单位)。 
COLORREF CFontDialog::GetColor( ) 得到所选字体的颜色。 
BOOL CFontDialog::IsStrikeOut( )
BOOL CFontDialog::IsUnderline( )
BOOL CFontDialog::IsBold( )
BOOL CFontDialog::IsItalic( )
得到所选字体的其他属性,是否有删除线,是否有下划线,是否为粗体,是否为斜体。


例子:

添加成员变量m_font

初始化m_font.CreatePointFont(400,"Times New Roman")则字体大小为40(400/10),字体大小范围为8~72因此第一个参数可选为80~720。

在选择字体菜单响应函数中

LOGFONT logfont;
m_font.GetLogFont(&logfont);
CFontDialog dlg(&logfont);
if(dlg.DoModal())
{
logfont = *(dlg.m_cf.lpLogFont);
m_font.DeleteObject();
m_font.CreateFontIndirect(&logfont);
}修改字体

在OnDraw函数中

pDC->SetBkMode (TRANSPARENT);
pDC->SetTextColor (RGB (255,0,0));
CFont font;

LOGFONT logfont;

m_font.GetLogFont(&logfont);

...修改logfont

font.CreateFontIndirect(&logfont);

CFont* pOldFont = pDC->SelectObject(&font);

pDC->TextOut(...)

pDC->SelectObject(pOldFont);




原创粉丝点击