好文档 - 专业文书写作范文服务资料分享网站

(适合初学者)MFC基础教程

天下 分享 时间: 加入收藏 我要投稿 点赞

? SYSTEM_FONT The system font. By default, Windows uses the system font to draw menus, dialog-box controls, and other text. In Windows versions 3.0 and later, the system font is proportional width; earlier versions of Windows use a fixed-width system font.

? SYSTEM_FIXED_FONT The fixed-width system font used in Windows prior to version 3.0. This object is available for compatibility with earlier versions of Windows.

? DEFAULT_PALETTE Default color palette. This palette consists of the 20 static colors in the system palette.

这些对象留在DC中是安全的,所以你可以利用选入库存对象来作为恢复DC中GUI对象。 大家可能都注意到了绘图时都需要一个DC对象,DC(Device Context设备环境)对象是一个抽象的作图环境,可能是对应屏幕,也可能是对应打印机或其它。这个环境是设备无关的,所以你在对不同的设备输出时只需要使用不同的设备环境就行了,而作图方式可以完全不变。这也就是Windows耀眼的一点设备无关性。如同你将对一幅画使用照相机或复印机将会产生不同的输出,而不需要对画进行任何调整。DC的使用会穿插在本章中进行介绍。

返回首页

2.2 在窗口中输出文字

在这里我假定读者已经利用ApplicationWizard生成了一个SDI界面的程序代码。接下来的你只需要在CView派生类的OnDraw成员函数中加入绘图代码就可以了。在这里我需要解释一下OnDraw函数的作用,OnDraw函数会在窗口需要重绘时自动被调用,传入的参数CDC* pDC对应的就是DC环境。使用OnDraw的优点就在于在你使用打印功能的时候传入OnDraw的DC环境将会是打印机绘图环境,使用打印预览时传入的是一个称为CPreviewDC的绘图环境,所以你只需要一份代码就可以完成窗口/打印预览/打印机绘图三重功能。利用Windows的设备无关性和M$为打印预览所编写的上千行代码你可以很容易的完成一个具有所见即所得的软件。

输出文字一般使用CDC::BOOL TextOut( int x, int y, const CString& str )和CDC::int DrawText( const CString& str, LPRECT lpRect, UINT nFormat )两个函数,对TextOut来讲只能输出单行的文字,而DrawText可以指定在一个矩形中输出单行或多行文字,并且可以规定对齐方式和使用何种风格。nFormat可以是多种以下标记的组合(利用位或操作)以达到选择输出风格的目的。

?

DT_BOTTOM底部对齐 Specifies bottom-justified text. This value must be combined with DT_SINGLELINE.

? DT_CALCRECT计算指定文字时所需要矩形尺寸 Determines the width and height of the rectangle. If there are multiple lines of text, DrawText will use the width of the rectangle pointed to by lpRect and extend the base of the rectangle to bound the last line of text. If there is only one line of text, DrawText will modify the right side of the rectangle so that it bounds the last character in the line. In either case, DrawText returns the height of the formatted text, but does not draw the text.

? ?

DT_CENTER中部对齐 Centers text horizontally.

DT_END_ELLIPSIS or DT_PATH_ELLIPSIS Replaces part of the given string with ellipses, if necessary, so that the result fits in the specified rectangle. The given string is not modified unless the DT_MODIFYSTRING flag is specified.

You can specify DT_END_ELLIPSIS to replace characters at the end of the string, or DT_PATH_ELLIPSIS to replace characters in the middle of the string. If the string contains backslash (\\) characters, DT_PATH_ELLIPSIS preserves as much as possible of the text after the last backslash.

? DT_EXPANDTABS Expands tab characters. The default number of characters per tab is eight.

? DT_EXTERNALLEADING Includes the font抯 external leading in the line height. Normally, external leading is not included in the height of a line of text.

? ?

DT_LEFT左对齐 Aligns text flush-left.

DT_MODIFYSTRING Modifies the given string to match the displayed text. This flag has no effect unless the DT_END_ELLIPSIS or DT_PATH_ELLIPSIS flag is specified.

Note Some uFormat flag combinations can cause the passed string to be modified. Using DT_MODIFYSTRING with either DT_END_ELLIPSIS or DT_PATH_ELLIPSIS may cause the string to be modified, causing an assertion in the CString override.

? DT_NOCLIP Draws without clipping. DrawText is somewhat faster when DT_NOCLIP is used.

? DT_NOPREFIX禁止使用&前缀 Turns off processing of prefix characters. Normally, DrawText interprets the ampersand (&) mnemonic-prefix character as a directive to underscore the character that follows, and the two-ampersand (&&) mnemonic-prefix characters as a directive to print a single ampersand. By specifying DT_NOPREFIX, this processing is turned off.

? ? ?

DT_PATH_ELLIPSIS

DT_RIGHT右对齐 Aligns text flush-right.

DT_SINGLELINE单行输出 Specifies single line only. Carriage returns and linefeeds do not break the line.

? DT_TABSTOP设置TAB字符所占宽度 Sets tab stops. The high-order byte of

nFormat is the number of characters for each tab. The default number of

characters per tab is eight.

? ?

DT_TOP定部对齐 Specifies top-justified text (single line only). DT_VCENTER中部对齐 Specifies vertically centered text (single line only).

? DT_WORDBREAK每行只在单词间被折行 Specifies word-breaking. Lines are automatically broken between words if a word would extend past the edge of the rectangle specified by lpRect. A carriage return杔inefeed sequence will also break the line.

在输出文字时如果希望改变文字的颜色,你可以利用CDC::SetTextColor( COLORREF crColor )进行设置,如果你希望改变背景色就利用CDC::SetBkColor( COLORREF crColor ),很多时候你可能需要透明的背景色你可以利用CDC::SetBkMode( int nBkMode )设置,可接受的参数有

?

OPAQUE Background is filled with the current background color before the text, hatched brush, or pen is drawn. This is the default background mode.

? TRANSPARENT Background is not changed before drawing.

接下来讲讲如何创建字体,你可以创建的字体有两种:库存字体CDC::CreateStockObject( int nIndex )和自定义字体。

在创建非库存字体时需要填充一个LOGFONT结构并使用CFont::CreateFontIndirect(const LOGFONT* lpLogFont ),或使用CFont::CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename )其中的参数和LOGFONT中的分量有一定的对应关系。下面分别讲解参数的意义:

nHeight 字体高度(逻辑单位)等于零为缺省高度,否则取绝对值并和可用的字体高度进行

匹配。

nWidth 宽度(逻辑单位)如果为零则使用可用的横纵比进行匹配。

nEscapement 出口矢量与X轴间的角度

nOrientation 字体基线与X轴间的角度 nWeight 字体粗细,可取以下值

Constant FW_DONTCARE FW_THIN Value 0 100 FW_EXTRALIGHT 200 FW_ULTRALIGHT 200 FW_LIGHT FW_NORMAL FW_REGULAR FW_MEDIUM FW_SEMIBOLD FW_DEMIBOLD FW_BOLD FW_EXTRABOLD FW_ULTRABOLD FW_BLACK FW_HEAVY 300 400 400 500 600 600 700 800 800 900 900

bItalic 是否为斜体

bUnderline 是否有下划线 cStrikeOut 是否带删除线

nCharSet 指定字符集合,可取以下值

Constant ANSI_CHARSET Value 0 DEFAULT_CHARSET 1 SYMBOL_CHARSET 2

SHIFTJIS_CHARSET 128 OEM_CHARSET 255

nOutPrecision 输出精度

OUT_CHARACTER_PRECIS OUT_STRING_PRECIS OUT_DEFAULT_PRECIS OUT_DEVICE_PRECIS OUT_RASTER_PRECIS OUT_STROKE_PRECIS OUT_TT_PRECIS

nClipPrecision 剪辑精度,可取以下值

CLIP_CHARACTER_PRECIS CLIP_MASK CLIP_DEFAULT_PRECIS CLIP_ENCAPSULATE CLIP_LH_ANGLES CLIP_STROKE_PRECIS CLIP_TT_ALWAYS

nQuality 输出质量,可取以下值

? ?

DEFAULT_QUALITY Appearance of the font does not matter.

DRAFT_QUALITY Appearance of the font is less important than when PROOF_QUALITY is used. For GDI raster fonts, scaling is enabled. Bold, italic, underline, and strikeout fonts are synthesized if necessary.

? PROOF_QUALITY Character quality of the font is more important than exact matching of the logical-font attributes. For GDI raster fonts, scaling is disabled and the font closest in size is chosen. Bold, italic, underline, and strikeout fonts are synthesized if necessary.

nPitchAndFamily 字体间的间距

lpszFacename 指定字体名称,为了得到系统所拥有的字体可以利用EmunFontFamiliesEx。

此外可以利用CFontDialog来得到用户选择的字体的LOGFONT数据。

(适合初学者)MFC基础教程

?SYSTEM_FONTThesystemfont.Bydefault,Windowsusesthesystemfonttodrawmenus,dialog-boxcontrols,andothertext.InWindowsversions3.0andlater,thesystemfontisproportio
推荐度:
点击下载文档文档为doc格式
1lv6k057hm83uyx977cs
领取福利

微信扫码领取福利

微信扫码分享