ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:25.63KB ,
资源ID:6005911      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6005911.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第二章 MFC入门图形输出.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第二章 MFC入门图形输出.docx

1、第二章 MFC入门图形输出第二章 图形输出2.1 和GUI有关的各种对象2.2 在窗口中输出文字2.3 使用点、刷子、笔进行绘图2.4 在窗口中绘制设备相关位图、图标、设备无关位图2.5 使用各种映射方式2.6 多边形和剪贴区域21 和GUI有关的各种对象在Windows中有各种GUI对象(不要和C+对象混淆),当你在进行绘图就需要利用这些对象。而各种对象都拥有各种属性,下面分别讲述各种GUI对象和拥有的属性字体对象CFont用于输出文字时选用不同风格和大小的字体。可选择的风格包括:是否为斜体,是否为粗体,字体名称,是否有下划线等。颜色和背景色不属于字体的属性。关于如何创建和使用字体在2.2

2、在窗口中输出文字中会详细讲解刷子CBrush对象决定填充区域时所采用的颜色或模板。对于一个固定色的刷子来讲它的属性为颜色,是否采用网格和网格的类型如水平的,垂直的,交叉的等。你也可以利用8*8的位图来创建一个自定义模板的刷子,在使用这种刷子填充时系统会利用位图逐步填充区域。关于如何创建和使用刷子在2.3 使用刷子、笔进行绘图中会详细讲解画笔CPen对象在画点和画线时有用。它的属性包括颜色,宽度,线的风格,如虚线,实线,点划线等。关于如何创建和使用画笔在2.3 使用刷子、笔进行绘图中会详细讲解位图CBitmap对象可以包含一幅图像,可以保存在资源中。关于如何使用位图在2.4 在窗口中绘制设备相关

3、位图、图标、设备无关位图中会详细讲解还有一种特殊的GUI对象是多边形,利用多边形可以很好的限制作图区域或是改变窗口外型。关于如何创建和使用多边形在2.6 多边形和剪贴区域中会详细讲解。在Windows中使用GUI对象必须遵守一定的规则。首先需要创建一个合法的对象,不同的对象创建方法不同。然后需要将该GUI对象选入DC中,同时保存DC中原来的GUI对象。如果选入一个非法的对象将会引起异常。在使用完后应该恢复原来的对象,这一点特别重要,如果保存一个临时对象在DC中,而在临时对象被销毁后可能引起异常。有一点必须注意,每一个对象在重新创建前必须销毁,下面的代码演示了这一种安全的使用方法。OnDraw(

4、CDC* pDC)CPen pen1,pen2;pen1.CreatePen(PS_SOLID,2,RGB(128,128,128);/创建对象pen2.CreatePen(PS_SOLID,2,RGB(128,128,0);/创建对象CPen* pPenOld=(CPen*)pDC-SelectObject(&pen1);/选择对象进DCdrawWithPen1.(CPen*)pDC-SelectObject(&pen2);/选择对象进DCdrawWithPen2.pen1.DeleteObject();/再次创建前先销毁pen1.CreatePen(PS_SOLID,2,RGB(0,0,0

5、);/再次创建对象(CPen*)pDC-SelectObject(&pen1);/选择对象进DCdrawWithPen1.pDC-SelectObject(pOldPen);/恢复此外系统中还拥有一些库存GUI对象,你可以利用CDC:SelectStockObject(SelectStockObject( int nIndex )选入这些对象,它们包括一些固定颜色的刷子,画笔和一些基本字体. BLACK_BRUSH Black brush. DKGRAY_BRUSH Dark gray brush. GRAY_BRUSH Gray brush. HOLLOW_BRUSH Hollow brus

6、h. LTGRAY_BRUSH Light gray brush. NULL_BRUSH Null brush. WHITE_BRUSH White brush. BLACK_PEN Black pen. NULL_PEN Null pen. WHITE_PEN White pen. ANSI_FIXED_FONT ANSI fixed system font. ANSI_VAR_FONT ANSI variable system font. DEVICE_DEFAULT_FONT Device-dependent font. OEM_FIXED_FONT OEM-dependent fixe

7、d font. 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 sys

8、tem 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(Dev

9、ice Context设备环境)对象是一个抽象的作图环境,可能是对应屏幕,也可能是对应打印机或其它。这个环境是设备无关的,所以你在对不同的设备输出时只需要使用不同的设备环境就行了,而作图方式可以完全不变。这也就是Windows耀眼的一点设备无关性。如同你将对一幅画使用照相机或复印机将会产生不同的输出,而不需要对画进行任何调整。DC的使用会穿插在本章中进行介绍2.2 在窗口中输出文字 在这里我假定读者已经利用ApplicationWizard生成了一个SDI界面的程序代码。接下来的你只需要在CView派生类的OnDraw成员函数中加入绘图代码就可以了。在这里我需要解释一下OnDraw函数的作用,

10、OnDraw函数会在窗口需要重绘时自动被调用,传入的参数CDC* pDC对应的就是DC环境。使用OnDraw的优点就在于在你使用打印功能的时候传入OnDraw的DC环境将会是打印机绘图环境,使用打印预览时传入的是一个称为CPreviewDC的绘图环境,所以你只需要一份代码就可以完成窗口/打印预览/打印机绘图三重功能。利用Windows的设备无关性和M$为打印预览所编写的上千行代码你可以很容易的完成一个具有所见即所得的软件。输出文字一般使用CDC:BOOL TextOut( int x, int y, const CString& str )和CDC:int DrawText( const CS

11、tring& str, LPRECT lpRect, UINT nFormat )两个函数,对TextOut来讲只能输出单行的文字,而DrawText可以指定在一个矩形中输出单行或多行文字,并且可以规定对齐方式和使用何种风格。nFormat可以是多种以下标记的组合(利用位或操作)以达到选择输出风格的目的。 pDC- TextOut(100,100,”wqewr”); DT_BOTTOM底部对齐 Specifies bottom-justified text. This value must be combined with DT_SINGLELINE. DT_CALCRECT计算指定文字时所需

12、要矩形尺寸 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 o

13、f 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,

14、 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 cont

15、ains 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 le

16、ading 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

17、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 pr

18、ocessing 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 processin

19、g 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

20、 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

21、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

22、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

23、* lpLogFont )(可以参考文章在同一系统中显示GB字符和BIG5字符),或使用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 )其中

24、的参数和LOGFONT中的分量有一定的对应关系。下面分别讲解参数的意义:nHeight 字体高度(逻辑单位)等于零为缺省高度,否则取绝对值并和可用的字体高度进行匹配。nWidth 宽度(逻辑单位)如果为零则使用可用的横纵比进行匹配。nEscapement 出口矢量与X轴间的角度nOrientation 字体基线与X轴间的角度nWeight 字体粗细,可取以下值Constant ValueFW_DONTCARE 0FW_THIN 100FW_EXTRALIGHT 200FW_ULTRALIGHT 200FW_LIGHT 300FW_NORMAL 400FW_REGULAR 400FW_MEDIU

25、M 500FW_SEMIBOLD 600FW_DEMIBOLD 600FW_BOLD 700FW_EXTRABOLD 800FW_ULTRABOLD 800FW_BLACK 900FW_HEAVY 900bItalic 是否为斜体bUnderline 是否有下划线cStrikeOut 是否带删除线nCharSet 指定字符集合,可取以下值Constant ValueANSI_CHARSET 0DEFAULT_CHARSET 1SYMBOL_CHARSET 2SHIFTJIS_CHARSET 128OEM_CHARSET 255nOutPrecision 输出精度OUT_CHARACTER_PR

26、ECIS OUT_STRING_PRECISOUT_DEFAULT_PRECIS OUT_STROKE_PRECISOUT_DEVICE_PRECIS OUT_TT_PRECISOUT_RASTER_PRECIS nClipPrecision 剪辑精度,可取以下值CLIP_CHARACTER_PRECIS CLIP_MASKCLIP_DEFAULT_PRECIS CLIP_STROKE_PRECISCLIP_ENCAPSULATE CLIP_TT_ALWAYSCLIP_LH_ANGLES nQuality 输出质量,可取以下值 DEFAULT_QUALITY Appearance of the

27、 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

28、 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。(可以参考文章在同一系统中显示GB字符和BIG5

29、字符)此外可以利用CFontDialog来得到用户选择的字体的LOGFONT数据。最后我讲一下文本坐标的计算,利用CDC:GetTextExtent( const CString& str )可以得到字符串的在输出时所占用的宽度和高度,这样就可以在手工输出多行文字时使用正确的行距。另外如果需要更精确的对字体高度和宽度进行计算就需要使用CDC:GetTextMetrics( LPTEXTMETRIC lpMetrics ) 该函数将会填充TEXTMETRIC结构,该结构中的分量可以非常精确的描述字体的各种属性。2.3 使用点、刷子、笔进行绘图在Windows中画点的方法很简单,只需要调用COLO

30、RREF CDC:SetPixel( int x, int y, COLORREF crColor )就可以在指定点画上指定颜色,同时返回原来的颜色。COLORREF CDC:GetPixel( int x, int y)可以得到指定点的颜色。在Windows中应该少使用画点的函数,因为这样做的执行效率比较低。刷子和画笔在Windows作图中是使用最多的GUI对象,本节在讲解刷子和画笔使用方法的同时也讲述一写基本作图函数。在画点或画线时系统使用当前DC中的画笔,所以在创建画笔后必须将其选入DC才会在绘图时产生效果。画笔可以通过CPen对象来产生,通过调用CPen:CreatePen( int

31、nPenStyle, int nWidth, COLORREF crColor )来创建。其中nPenStyle指名画笔的风格,可取如下值: PS_SOLID 实线 Creates a solid pen. PS_DASH 虚线,宽度必须为一 Creates a dashed pen. Valid only when the pen width is 1 or less, in device units. PS_DOT 点线,宽度必须为一 Creates a dotted pen. Valid only when the pen width is 1 or less, in device un

32、its. PS_DASHDOT 点划线,宽度必须为一 Creates a pen with alternating dashes and dots. Valid only when the pen width is 1 or less, in device units. PS_DASHDOTDOT 双点划线,宽度必须为一 Creates a pen with alternating dashes and double dots. Valid only when the pen width is 1 or less, in device units. PS_NULL 空线,使用时什么也不会产生 Creates a null

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1