1、C+CPen画笔是绘图的基本工具,在MFC中画笔是CPen类的对象,它用来在DC上完成绘制线条的任务。初始化时,系统自动提供了一支黑色的默认画笔。如果程序设计人员对这个默认的画笔不满意,可以自己创建画笔来替换它。所谓的自定义画笔,就是程序员自己创建的CPen类对象,创建画笔对象是,需要使用CPen类的构造函数,它的原型为:CPen(Int style,int width ,COLORREF color); style:画笔的样式 width:画笔的宽度 color:画笔的颜色(颜色用RGB值来描述)1. CPen类构造函数该类共重载了3个构造函数:CPen( ); CPen(int nPenS
2、tyle, int nWidth, COLORREF crColor); throw(CResourceException); CPen(int nPenStyle, int mWidth, const LOGVRUSH* pLogBrush,int nStyleCount=0, const DWORD* lpStyle=NULL); throw(CResourceException); 参数nPenStyle的值 参数值 注释 PS_SOLID 创建一个实线画笔PS_DASH 创建一个虚线画笔,该值只有当画笔宽度等于1个设备单位或更小时才有效PS_DOT 创建一个点线画笔,该值只有当画笔宽度
3、等于1个设备单位或更小时才有效 PS_DASHDOT 创建一个点和虚线交替画笔,该值只有当画笔宽度等于1个设备单位或更小时才有效 PS_DASHDOTDOT 创建一个双点线画笔,该值只有当画笔宽度等于1个设备单位或更小时才有效 PS_NULL 创建一个空线画笔 PS_INSIDEFRAME 创建一个内框线画笔,该画笔可以在WindowsGDI输出函数定义的矩形边界所生成的封闭形状的边框内绘制直线 PS_GEOMETRIC 创建一个几何画笔 PS_COSMETIC 创建一个装饰画笔 PS_ALTERNATE 创建一个设置其他像素的画笔 PS_USERSTYLE 创建一个使用由用户提供的风格矩阵的
4、画笔 PS_ENDCAP_ROUND 尾帽为圆形的 PS_ENDCAP_SQUARE 尾帽为方形的 PS_ENDCAPFLAT 尾帽为平坦的 PS_JOIN_BEVEL 成尖角连接 PS_JOIN_MITET 通过setMiterLimit函数设置的当前极限值范围内斜接;否则,成尖角连接 PS_JOIN_ROUND 成圆角连接 参数pLogBrush指向一个LOGBRUSH结构。该结构原型声明如下: typedef struct tag LOGBRUSH *lb* UINT lbStyle; COLORREF lbColor; LONG lbHatch; LOGBRUSH; 该结构定义了一个画
5、刷的风格、颜色和阴影线种类。画刷的风格值 参数值 说明 BS_DIBPATTERN 由设备无关的位图定义的图形画刷。如果该参数值为该值,则成员lbHatch包含了一个被压缩的DIB句柄 BS_DIBPATTERNPT 由设备无关的位图定义的图形画刷。如果该参数值为该值,则成员lbHatch包含了一个被压缩的DIB指针 BS_HATCHED 阴影线画刷 BS_HOLLOW 中空画刷 BS_NULL 与参数值为BS_HOLLOW定义相同的画刷 BS_PATTERN 由内存位图定义的图形画刷 BS_SOLID 实画刷 BS_NULL 与参数值为BS_HOLLOW定义相同的画刷 BS_PATTERN
6、由内存位图定义的图形画刷 BS_SOLID 实画刷2. CPen类初始化成员函数 1) CreatePen( )成员函数其原型声明如下: BOOL CreatePen(int nPenStyle,int nWidth,const LOGBRUSH* pLogBrush,int nStyleCount=0,const DWORD*lpStyle=NULL);2) CreatePenIndirect( )成员函数的原型声明如下: BOOL CreatePenIndirect(LPLOGPEN lpLogPen); LOGPEN结构的具体定义如下: typedef struct tagLOGPEN
7、/ lgpn UNIT lopnStyle; POINT lopnWidth; COLORREF lopnColor; LOGPEN; 可以使用RGB宏来完成颜色设定: COLORREF RGB(cRed,cGreen,cBlue); 也可以使用COLORREF,其结构为0x00bbggrr。 注:COLORREF实际上就是一个DWORD类型的。所有如果进行颜色传递直接按%d格式就可以,不需要格式的转换。3. CPen创建的例子 CPen pen1; CPen *oldPen; pen1.CreatePen(PS_SOLID,2,RGB(192,192,192);/创建对象 oldPen =
8、pDC-SelectObject(&pen1); pDC-MoveTo(10,10); pDC-LineTo(200,20); pDC-SelectObject(oldPen);CPointCPoint类 简介CPoint类与Windows POINT结构类似。它还包括用来操纵CPoint和POINT结构的成员函数。 只要POINT结构可以使用的地方,CPoint对象也可以使用。这个类与“大小”有关的操作符可以接受CSize对象或SIZE结构,因为这两者是可以互换的。 注意:这个类派生于tagPOINT结构(名字tagPOINT是POINT结构的不太常用的有关名字)。这意味着POINT结构的数
9、据成员,x和y,也是CPoint的可以访问的数据成员。CPoint类成员构造 CPoint 构造一个CPoint 操作符 Offset 给CPoint的x和y成员增加值 operator = 检查两个点是否相等 operator != 检查两个点是否不等 返回CPoint值的操作符 operator += 通过增加一个尺寸或点来使CPoint偏移 operator -= 通过减去一个尺寸或点来使CPoint偏移 operator + 返回一个CPoint和一个尺寸或点的和 operator - 返回一个CPoint和一个尺寸或点的偏差,或一个点的不存在 返回CSize值的操作符 operato
10、r - 返回两点之间的大小差别 返回CRect值的操作符 operator + 返回偏移一个大小的CRect operator - 返回偏移一个负大小的CRectCPoint构造函数CPoint:CPoint CPoint(); CPoint( int initX, int initY ); CPoint( POINT initPt ); CPoint( SIZE initSize ); CPoint( DWORD dwPoint ); 参数: initX 指定CPoint的成员x的值。 initY 指定CPoint的成员y的值。 initPt 用于初始化此CPoint的一个POINT结构或C
11、Point对象。 initSize 用于初始化CPoint值的SIZE结构或CSize。 dwPoint 设此参数的低位字为x成员,高位字为y成员。 说明:构造一个CPoint对象。如果不给参数,则不初始化x和y成员。DrawText函数功能该函数在指定的矩形里写入格式化的正文,根据指定的方法对正文格式化(扩展的制表符,字符对齐、折行等)。 要指定额外的格式化选项,请使用DrawTextEx函数。函数原型int DrawText( HDC hDC; / 设备描述表句柄 LPCTSTR lpString; / 将要绘制的字符串 int nCount; / 字符串的长度 LPRECT lpRect
12、; / 指向矩形结构RECT的指针 UINT uFormat; / 正文的绘制选项 );参数hdc: 输入设备环境句柄。 lpString: 输入指向将被写入的字符串的指针,如果参数nCount是-1,则字符串必须是以0结束的。 如果uFormat包含DT_MODIFYSTRING,则函数可为此字符串增加4个字符,存放字符串的缓冲区必须足够大,能容纳附加的字符。 nCount: 输入指向字符串中的字符数。如果nCount为-1,则lpString指向的字符串被认为是以0结束的,DrawText会自动计算字符数。 lpRect: 输入/输出指向结构RECT的指针,其中包含文本将被置于其中的矩形的
13、信息(按逻辑坐标)。 uFormat: 输入指定格式化文本的方法。它可以下列值的任意组合,各值描述如下:值说明DT_BOTTOM将正文调整到矩形底部。此值必须和DT_SINGLELINE组合。DT_CALCRECT决定矩形的宽和高。 如果正文有多行,DrawText使用lpRect定义的矩形的宽度,并扩展矩形的底部以容纳正文的最后一行。 如果正文只有一行,则DrawText改变矩形的右边界,以容纳下正文行的最后一个字符。 出现上述任何一种情况,DrawText返回格式化正文的高度,而不是绘制正文。DT_CENTER使正文在矩形中水平居中。DT_VCENTER使正文在矩形中垂直居中。(Dream
14、Smart注:此参数必须和DT_SINGLE连用,否则GDI无法计算目的矩形)DT_EDITCONTROL复制多行编辑控制的正文显示特性。 特殊地,为编辑控制的平均字符宽度是以同样的方法计算的,此函数不显示只是部分可见的最后一行。DT_END_ELLIPSIS对于显示的文本,如果结束的字符串的范围不在矩形内,它会被截断并被附加到椭圆中。 如果一个字母不是在字符串的末尾处超出了矩形范围,它不会被椭圆截断。字符串不会被修改,除非指定了DT_MODIFYSTRING标志。DT_EXPANDTABS扩展制表符,每个制表符的缺省字符数是8。DT_WORD_ELLIPSIS, DT_PATH_ELLIPS
15、IS和DT_END_ELLIPSIS不能和此参数一起使用DT_EXTERNALLEADING在行的高度里包含字体的外部标头,通常,外部标头不被包含在正文行的高度里。DT_HIDEPREFIX忽略正文中的前缀字符(&),并且前缀字符后面的字母不会出现下划线。其它前缀字符的调用方式不受影响。 输入的字符串: A&bc&d 正常: Abc&d DT_HIDEPREFIX: Abc&dDT_INTERNAL用系统字体来计算正文度量。DT_LEFT正文左对齐。DT_MODIFYSTRING修改给定的字符串来匹配显示的正文。此标志必须和DT_END_ELLIPSIS 或 DT_PATH_ELLIPSIS同
16、时使用。DT_NOCLIP无裁剪绘制。当DT_NOCLIP使用时DrawText的使用会有所加快。DT_NOFULLWIDTHCHARBREAK在宽字符的字符串中防止行断开,因此折行规则相当于单字符的字符串。 例如,我们可以用在棒子版的windows中,为图标标签提供更好的可读性。除非指定DT_WORDBREAK,否则此值没有作用。DT_NOPREFIX关闭前缀字符的处理。 通常DrawText解释助记前缀字符,&为给其后的字符加下划线,解释&为显示单个&。指定DT_NOPREFIX,这种处理被关闭。DT_PATH_ELLIPSIS对于显示的正文,替换字符串在椭圆中的字符以确保结果能在合适的矩
17、形内。 如果该字符串包含反斜杠()字符,DT_PATH_ELLIPSIS尽可能的保留最后一个反斜杠之后的正文。 字符串不会被修改,除非指定了DT_MODIFYSTRING标志。DT_PREFIXONLY仅仅在()前缀字符的位置下绘制一个下划线。不绘制字符串中的任何其他字符。输入的字符串: A&bc&d 正常: Abc&d DT_PREFIXONLY: _ DT_RIGHT正文右对齐。DT_RTLREADING当选择进设备环境的字体是希伯来文或阿拉伯文字体时,为双向正文安排从右到左的阅读顺序都是从左到右的。DT_SINGLELINE显示正文的同一行,回车和换行符都不能折行。DT_TABSTOP设
18、置制表,参数uFormat的15C8位(低位字中的高位字节)指定每个制表符的字符数,每个制表符的缺省字符数是8。 注意:DT_CALCRECT, DT_EXTERNALLEADING, DT_INTERNAL, DT_NOCLIP,DT_NOPREFIX值不能和DT_TABSTOP值一起使用。DT_TOP正文顶端对齐(仅对单行)。DT_WORDBREAK断开字。当一行中的字符将会延伸到由lpRect指定的矩形的边框时,此行自动地在字之间断开。一个回车一换行也能使行折断。DT_WORD_ELLIPSIS截短不符合矩形的正文,并增加椭圆。返回值如果函数调用成功,返回值是正文的高度(逻辑单位)。如果
19、指定了DT_VCENTER或DT_BOTTOM,返回值是lpRect-top到绘制的正文的底部的偏移值。 如果函数调用失败,返回值是0 Windows NT:若想获得更多错误信息,请调用GetLastError函数。备注函数DrawText用设备环境中的字体选择、正文颜色和背景颜色来写正文。DrawText裁剪正文,不会出现在指定矩形的外面,除非指定了DT_NOCLIP。除非使用DT_SINGLELINE格式化,否则其余的格式都认为正文有多行。 如果选择的字体对指定的矩形而言太大,DrawText不会试图去换成一种小字体。 DrawText支持纵和方向均为0的字体。 设备环境的正文对齐方式必须
20、包括TA_LEFT, TA_TOP和TA_NOUPDATECP标志。 Windows CE:如果为参数uFormat指定DT_CALCRECT值,必须为lpRect指向的RECT结构设置right和bottom成员。Windows CE不支持uFormat为DT_EXTERNALLEADING。在K线图中的运用: 格式:drawtext(条件表达式子,位置,文字); 含义:当条件满足时,在指定的位置显示需提示的汉字; 编写时注意事项:位置要与价格相适应,如果价格在5000,那么位置处用50是显示不出文字的; 文字前后的标点是英文状态下输入的,不能用中文状态输入。SetWindowText函数功
21、能:该函数改变指定窗口的标题栏的文本内容(如果窗口有标题栏)。如果指定窗口是一个控件,则改变控件的文本内容。然而,SetWindowText函数不改变其他应用程序中的控件的文本内容。函数原型:BOOL SetWindowText(HWND hwnd,LPCTSTR lpString);参数: hWnd:要改变文本内容的窗口或控件的句柄。lpString:指向一个空结束的字符串的指针,该字符串将作为窗口或控件的新文本。返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。备注:如果目标窗口属于当前进程,SetWindowText函
22、数会使WM_SETTEXT消息发送给指定的窗口或控件。然而,如果控件是以WS_CAPTION风格创建的列表框控件,SetWindowText函数将为控件设置文本,而不是为列表项设置文本。 SetWindowText函数不扩展tab字符(ASCII代码009),Tab字符以字符来显示。 速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;头文件;winuser.h;库文件:user32.lib;Unicode:Windows NT上实现为Unicode和ANSI两种版本。CListBox类的成员函数AddString向列表中添加串Cha
23、rToItem重载以提供的WM_CHAR处理CListBox创建CListBox类ComapareItem在一个排序的owner-draw列表框中调用来获取一个新选项的位置Create创建一个列表框并且将它同CListBox对象联系起来DeleteItem当用户从owner-draw列表框中删除一个选项时起作用DeleteString从列表框中删除串Dir将当前目录下的所有文件添加到列表框中DrawItem当一个可视owner-draw列表框外观改变时被调用FindString从列表框中搜索串FindStringExact查找匹配制定串的首个列表框串GetCount返回组合框的列表框中串的数目
24、GetCurSel检索当前选取选项的索引,即使在组合框的列表中GetDroppedControlRect检索下拉组合框中可视列表框的屏幕坐标GetDroppedState检索下拉组合框的列表框是否可视GetDroppedWidth检索作为组合框一部分的下拉列表框中的最小可用宽度GetEditSel获取编辑框中当前选区内容的开始和结束字符位置GetExtendUI组合框使用默认的用户界面还是扩展的用户界面GetHorizontalExtend返回作为组合框部件列表框能够被水平滚动的像素宽带GetItemDate检索与指示组合框选项相关的32位应用程序值GetItemDatePtr检索与指示组合框
25、相关的32位应用程序值的指针GetItemHeight检索组合框中列表选项的高度GetLBText获取来自组合框中列表框的词条GetLBTextLen获取列表框中词条的长度GetLocale检索组合框的当前标识GetTopIndex返回作为组合部件的列表框中的第一个可视选项的索引InitStorage给作为组合框部件的列表框选项和串与分配内存InsertString将串加到组合框的列表框中LimitText限制用户可以输入到组合框中的编辑框中的文本长度MeasureItem当创建owner-draw组合框,已决定组合框尺寸Paste将剪贴板中的数据插入到编辑框中ResetContent从组合框
26、的列表框和编辑框中删除所有的串SetCurSel在组合框的列表框中选取一个串SetDroppedWidth未作为组合框部件的下拉列表框设置最小的可用宽度SetEditSel在组合框的编辑框中选取字符SetExtendUI选取默认的用户界面或扩展界面SetHorizontalExtent设置作为组合框部件的列表框可水平滚动的像素宽度SetItemDate设置与组合框相关的32位值SetItemDatePtr设置与组合框相关的32位值的指针SetItemHeight设置组合框中的列表框或编辑框选项的高度SetLocale设置组合框的当前标识符SetTopIndex通知组合框的列表框部分在最上方显示
27、选项ShowDropDown显示或隐藏列表框SetCurSelint SetCurSel( int nSelect ); 返回值 调用成功时返回选中的项的下标。如果 nSelect 大于列表中项的个数,则返回CB_ERR 。如果 nSelect 为 -1 ,则清除当前的选择并返回 CB_ERR 。 参数 nSelect 指定要选中的字符串的下标。如果为 1 ,则清除当前的选择,编辑控件中的内容设置为空。 说明 本函数在组合框的列表框中选择一个字符串。必要时列表框会滚动,以使该字符串在列表的可视区内 (列表是可见的时 )。编辑控件中 的文本将相应地变为选中的字符串。此前在列表框中的选择将不复存在
28、。FindStringExactint FindStringExact( int nIndexStart, LPCTSTR lpszFind ) const;返回值:返回匹配的项的下标。未查找到匹配串时返回CB_ERR。参数: nIndexStart指定了查找开始的下标。当查到列表的结尾处时,又继续找到它标志的位置。如果设为1,则从列表的开始处开始查找匹配的串。 lpszFind指向一个以null结尾的字符串,该字符串中可以包括完整的文件名(包括扩展名)。查找过程是不区分大小写的。 说明:本函数用于查找组合框的列表中匹配指定字符串的第一个项,但不把它选为当前项。如果组合框是自定义的,但未设置C
29、BS_HASSTRING风格,FindStringExact会试图匹配双字值。GetLBText-MFCint GetLBText( int nIndex, LPTSTR lpszText ) const;void GetLBText(int nIndex, CString& rString ) const;返回值:返回字符串的字节数,不包括终结符null。如果nIndex指定的值无效,则返回CB_ERR。参数: nIndex指明列表框中待拷贝的字符串的下标。 lpszText指向接收字符串的缓冲。缓冲必须能够容纳下待拷贝的字符串及其终结符null。 rString对CString对象的一个参
30、考。 说明:本函数用于从组合框的列表中拷贝一个字符串。第二种实现方式用拷贝来的文本填充一个CString对象。InsertStringint InsertString( int nIndex, LPCTSTR lpszItem );返回值:字符串被插入位置的基于零的索引。如果出错,则返回LB_ERR;如果无足够有效空间来存储新字符串,则返回LB_ERRSPACE。参数: nIndex指定插入字符串的基于零的索引。如果此参数为-1,则字符串添加到列表末尾。 lpszItem指向插入的空终止字符串的指针。 说明:插入字符串到列表框中。与AddString成员函数不同,InsertString不会使LBS_SORT 风格的列表被排序。GetWindowText函数功能该函数将指定窗口的标题条文本(如果存在)拷贝到一个缓存区内。如果指定的窗口是一个控件,则拷贝控件的文本。但是,GetWindowText不能接收在其他应用程序中的控件的文本。 函数原型:Int GetWi
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1