C++.docx
《C++.docx》由会员分享,可在线阅读,更多相关《C++.docx(14页珍藏版)》请在冰豆网上搜索。
![C++.docx](https://file1.bdocx.com/fileroot1/2022-12/29/7f2ba14d-cd00-498a-b350-0ad1bbe8eb6c/7f2ba14d-cd00-498a-b350-0ad1bbe8eb6c1.gif)
C++
CPen
画笔是绘图的基本工具,在MFC中画笔是CPen类的对象,它用来在DC上完成绘制线条的任务。
初始化时,系统自动提供了一支黑色的默认画笔。
如果程序设计人员对这个默认的画笔不满意,可以自己创建画笔来替换它。
所谓的自定义画笔,就是程序员自己创建的CPen类对象,创建画笔对象是,需要使用CPen类的构造函数,它的原型为:
CPen(Intstyle,intwidth,COLORREFcolor);
style:
画笔的样式
width:
画笔的宽度
color:
画笔的颜色(颜色用RGB值来描述)
1.CPen类构造函数该类共重载了3个构造函数:
CPen();
CPen(intnPenStyle,intnWidth,COLORREFcrColor);
throw(CResourceException);
CPen(intnPenStyle,intmWidth,constLOGVRUSH*pLogBrush,
intnStyleCount=0,constDWORD*lpStyle=NULL);
throw(CResourceException);
参数nPenStyle的值
参数值注释
PS_SOLID创建一个实线画笔
PS_DASH创建一个虚线画笔,该值只有当画笔宽度等于1个设备单位或更小时才有效
PS_DOT创建一个点线画笔,该值只有当画笔宽度等于1个设备单位或更小时才有效
PS_DASHDOT创建一个点和虚线交替画笔,该值只有当画笔宽度等于1个设备单位或更小时才有效
PS_DASHDOTDOT创建一个双点线画笔,该值只有当画笔宽度等于1个设备单位或更小时才有效
PS_NULL创建一个空线画笔
PS_INSIDEFRAME创建一个内框线画笔,该画笔可以在WindowsGDI输出函数定义的矩形边界所生成的封闭形状的边框内绘制直线 PS_GEOMETRIC创建一个几何画笔
PS_COSMETIC创建一个装饰画笔
PS_ALTERNATE创建一个设置其他像素的画笔
PS_USERSTYLE创建一个使用由用户提供的风格矩阵的画笔 PS_ENDCAP_ROUND尾帽为圆形的
PS_ENDCAP_SQUARE尾帽为方形的
PS_ENDCAP—FLAT尾帽为平坦的
PS_JOIN_BEVEL成尖角连接
PS_JOIN_MITET通过setMiterLimit函数设置的当前极限值范围内斜接;否则,成尖角连接
PS_JOIN_ROUND成圆角连接参数pLogBrush指向一个LOGBRUSH结构。
该结构原型声明如下:
typedefstructtagLOGBRUSH{/*lb*/
UINTlbStyle;
COLORREFlbColor;
LONGlbHatch;
}LOGBRUSH;
该结构定义了一个画刷的风格、颜色和阴影线种类。
画刷的风格值参数值说明
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由内存位图定义的图形画刷
BS_SOLID实画刷
2.CPen类初始化成员函数
1)CreatePen()成员函数其原型声明如下:
BOOLCreatePen(intnPenStyle,intnWidth,constLOGBRUSH*pLogBrush,intnStyleCount=0,constDWORD*lpStyle=NULL);
2)CreatePenIndirect()成员函数的原型声明如下:
BOOLCreatePenIndirect(LPLOGPENlpLogPen);
LOGPEN结构的具体定义如下:
typedefstructtagLOGPEN{//lgpn
UNITlopnStyle;
POINTlopnWidth;
COLORREFlopnColor;
}LOGPEN;
可以使用RGB宏来完成颜色设定:
COLORREFRGB(cRed,cGreen,cBlue);
也可以使用COLORREF,其结构为0x00bbggrr。
注:
COLORREF实际上就是一个DWORD类型的。
所有如果进行颜色传递直接按%d格式就可以,不需要格式的转换。
3.CPen创建的例子
CPenpen1;
CPen*oldPen;
pen1.CreatePen(PS_SOLID,2,RGB(192,192,192));//创建对象
oldPen=pDC->SelectObject(&pen1);
pDC->MoveTo(10,10);
pDC->LineTo(200,20);
pDC->SelectObject(oldPen);
CPoint
CPoint类简介
CPoint类与WindowsPOINT结构类似。
它还包括用来操纵CPoint和POINT结构的成员函数。
只要POINT结构可以使用的地方,CPoint对象也可以使用。
这个类与“大小”有关的操作符可以接受CSize对象或SIZE结构,因为这两者是可以互换的。
注意:
这个类派生于tagPOINT结构(名字tagPOINT是POINT结构的不太常用的有关名字)。
这意味着POINT结构的数据成员,x和y,也是CPoint的可以访问的数据成员。
CPoint类成员
构造CPoint构造一个CPoint
操作符Offset给CPoint的x和y成员增加值
operator==检查两个点是否相等
operator!
=检查两个点是否不等
返回CPoint值的操作符operator+=通过增加一个尺寸或点来使CPoint偏移
operator-=通过减去一个尺寸或点来使CPoint偏移
operator+返回一个CPoint和一个尺寸或点的和
operator-返回一个CPoint和一个尺寸或点的偏差,或一个点的不存在
返回CSize值的操作符operator-返回两点之间的大小差别
返回CRect值的操作符operator+返回偏移一个大小的CRect
operator-返回偏移一个负大小的CRect
CPoint构造函数
CPoint:
:
CPoint
CPoint();
CPoint(intinitX,intinitY);
CPoint(POINTinitPt);
CPoint(SIZEinitSize);
CPoint(DWORDdwPoint);
参数:
initX指定CPoint的成员x的值。
initY指定CPoint的成员y的值。
initPt用于初始化此CPoint的一个POINT结构或CPoint对象。
initSize用于初始化CPoint值的SIZE结构或CSize。
dwPoint设此参数的低位字为x成员,高位字为y成员。
说明:
构造一个CPoint对象。
如果不给参数,则不初始化x和y成员。
DrawText
函数功能
该函数在指定的矩形里写入格式化的正文,根据指定的方法对正文格式化(扩展的制表符,字符对齐、折行等)。
要指定额外的格式化选项,请使用DrawTextEx函数。
函数原型
intDrawText(
HDChDC;//设备描述表句柄
LPCTSTRlpString;//将要绘制的字符串
intnCount;//字符串的长度
LPRECTlpRect;//指向矩形结构RECT的指针
UINTuFormat;//正文的绘制选项
);
参数
hdc:
[输入]设备环境句柄。
lpString:
[输入]指向将被写入的字符串的指针,如果参数nCount是-1,则字符串必须是以\0结束的。
如果uFormat包含DT_MODIFYSTRING,则函数可为此字符串增加4个字符,存放字符串的缓冲区必须足够大,能容纳附加的字符。
nCount:
[输入]指向字符串中的字符数。
如果nCount为-1,则lpString指向的字符串被认为是以\0结束的,DrawText会自动计算字符数。
lpRect:
[输入/输出]指向结构RECT的指针,其中包含文本将被置于其中的矩形的信息(按逻辑坐标)。
uFormat:
[输入]指定格式化文本的方法。
它可以下列值的任意组合,各值描述如下:
值
说明
DT_BOTTOM
将正文调整到矩形底部。
此值必须和DT_SINGLELINE组合。
DT_CALCRECT
决定矩形的宽和高。
如果正文有多行,DrawText使用lpRect定义的矩形的宽度,并扩展矩形的底部以容纳正文的最后一行。
如果正文只有一行,则DrawText改变矩形的右边界,以容纳下正文行的最后一个字符。
出现上述任何一种情况,DrawText返回格式化正文的高度,而不是绘制正文。
DT_CENTER
使正文在矩形中水平居中。
DT_VCENTER
使正文在矩形中垂直居中。
(DreamSmart注:
此参数必须和DT_SINGLE连用,否则GDI无法计算目的矩形)
DT_EDITCONTROL
复制多行编辑控制的正文显示特性。
特殊地,为编辑控制的平均字符宽度是以同样的方法计算的,此函数不显示只是部分可见的最后一行。
DT_END_ELLIPSIS
对于显示的文本,如果结束的字符串的范围不在矩形内,它会被截断并被附加到椭圆中。
如果一个字母不是在字符串的末尾处超出了矩形范围,它不会被椭圆截断。
字符串不会被修改,除非指定了DT_MODIFYSTRING标志。
DT_EXPANDTABS
扩展制表符,每个制表符的缺省字符数是8。
DT_WORD_ELLIPSIS,DT_PATH_ELLIPSIS和DT_END_ELLIPSIS不能和此参数一起使用
DT_EXTERNALLEADING
在行的高度里包含字体的外部标头,通常,外部标头不被包含在正文行的高度里。
DT_HIDEPREFIX
忽略正文中的前缀字符(&),并且前缀字符后面的字母不会出现下划线。
其它前缀字符的调用方式不受影响。
输入的字符串:
"A&bc&&d"正常:
"Abc&d"DT_HIDEPREFIX:
"Abc&d"
DT_INTERNAL
用系统字体来计算正文度量。
DT_LEFT
正文左对齐。
DT_MODIFYSTRING
修改给定的字符串来匹配显示的正文。
此标志必须和DT_END_ELLIPSIS或DT_PATH_ELLIPSIS同时使用。
DT_NOCLIP
无裁剪绘制。
当DT_NOCLIP使用时DrawText的使用会有所加快。
DT_NOFULLWIDTHCHARBREAK
在宽字符的字符串中防止行断开,因此折行规则相当于单字符的字符串。
例如,我们可以用在棒子版的windows中,为图标标签提供更好的可读性。
除非指定DT_WORDBREAK,否则此值没有作用。
DT_NOPREFIX
关闭前缀字符的处理。
通常DrawText解释助记前缀字符,&为给其后的字符加下划线,解释&&为显示单个&。
指定DT_NOPREFIX,这种处理被关闭。
DT_PATH_ELLIPSIS
对于显示的正文,替换字符串在椭圆中的字符以确保结果能在合适的矩形内。
如果该字符串包含反斜杠(\)字符,DT_PATH_ELLIPSIS尽可能的保留最后一个反斜杠之后的正文。
字符串不会被修改,除非指定了DT_MODIFYSTRING标志。
DT_PREFIXONLY
仅仅在(&)前缀字符的位置下绘制一个下划线。
不绘制字符串中的任何其他字符。
输入的字符串:
"A&bc&&d"正常:
"Abc&d"DT_PREFIXONLY:
"_"
DT_RIGHT
正文右对齐。
DT_RTLREADING
当选择进设备环境的字体是希伯来文或阿拉伯文字体时,为双向正文安排从右到左的阅读顺序都是从左到右的。
DT_SINGLELINE
显示正文的同一行,回车和换行符都不能折行。
DT_TABSTOP
设置制表,参数uFormat的15"C8位(低位字中的高位字节)指定每个制表符的字符数,每个制表符的缺省字符数是8。
注意:
DT_CALCRECT,DT_EXTERNALLEADING,DT_INTERNAL, DT_NOCLIP,
DT_NOPREFIX
值不能和DT_TABSTOP值一起使用。
DT_TOP
正文顶端对齐(仅对单行)。
DT_WORDBREAK
断开字。
当一行中的字符将会延伸到由lpRect指定的矩形的边框时,此行自动地在字之间断开。
一个回车一换行也能使行折断。
DT_WORD_ELLIPSIS
截短不符合矩形的正文,并增加椭圆。
返回值
如果函数调用成功,返回值是正文的高度(逻辑单位)。
如果指定了DT_VCENTER或DT_BOTTOM,返回值是lpRect->top到绘制的正文的底部的偏移值。
如果函数调用失败,返回值是0 WindowsNT:
若想获得更多错误信息,请调用GetLastError函数。
备注
函数DrawText用设备环境中的字体选择、正文颜色和背景颜色来写正文。
DrawText裁剪正文,不会出现在指定矩形的外面,除非指定了DT_NOCLIP。
除非使用DT_SINGLELINE格式化,否则其余的格式都认为正文有多行。
如果选择的字体对指定的矩形而言太大,DrawText不会试图去换成一种小字体。
DrawText支持纵和方向均为0的字体。
设备环境的正文对齐方式必须包括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
函数功能:
该函数改变指定窗口的标题栏的文本内容(如果窗口有标题栏)。
如果指定窗口是一个控件,则改变控件的文本内容。
然而,SetWindowText函数不改变其他应用程序中的控件的文本内容。
函数原型:
BOOLSetWindowText(HWNDhwnd,LPCTSTRlpString);
参数:
hWnd:
要改变文本内容的窗口或控件的句柄。
lpString:
指向一个空结束的字符串的指针,该字符串将作为窗口或控件的新文本。
返回值:
如果函数成功,返回值为非零;如果函数失败,返回值为零。
若想获得更多错误信息,请调用GetLastError函数。
备注:
如果目标窗口属于当前进程,SetWindowText函数会使WM_SETTEXT消息发送给指定的窗口或控件。
然而,如果控件是以WS_CAPTION风格创建的列表框控件,SetWindowText函数将为控件设置文本,而不是为列表项设置文本。
SetWindowText函数不扩展tab字符(ASCII代码0×09),Tab字符以字符‘}’来显示。
速查:
WindowsNT:
3.1以上版本;Windows:
95以上版本;Windows
CE:
1.0以上版本;头文件;winuser.h;库文件:
user32.lib;Unicode:
WindowsNT上实现为Unicode和ANSI两种版本。
CListBox类的成员函数
AddString
向列表中添加串
CharToItem
重载以提供的WM_CHAR处理
CListBox
创建CListBox类
ComapareItem
在一个排序的owner-draw列表框中调用来获取一个新选项的位置
Create
创建一个列表框并且将它同CListBox对象联系起来
DeleteItem
当用户从owner-draw列表框中删除一个选项时起作用
DeleteString
从列表框中删除串
Dir
将当前目录下的所有文件添加到列表框中
DrawItem
当一个可视owner-draw列表框外观改变时被调用
FindString
从列表框中搜索串
FindStringExact
查找匹配制定串的首个列表框串
GetCount
返回组合框的列表框中串的数目
GetCurSel
检索当前选取选项的索引,即使在组合框的列表中
GetDroppedControlRect
检索下拉组合框中可视列表框的屏幕坐标
GetDroppedState
检索下拉组合框的列表框是否可视
GetDroppedWidth
检索作为组合框一部分的下拉列表框中的最小可用宽度
GetEditSel
获取编辑框中当前选区内容的开始和结束字符位置
GetExtendUI
组合框使用默认的用户界面还是扩展的用户界面
GetHorizontalExtend
返回作为组合框部件列表框能够被水平滚动的像素宽带
GetItemDate
检索与指示组合框选项相关的32位应用程序值
GetItemDatePtr
检索与指示组合框相关的32位应用程序值的指针
GetItemHeight
检索组合框中列表选项的高度
GetLBText
获取来自组合框中列表框的词条
GetLBTextLen
获取列表框中词条的长度
GetLocale
检索组合框的当前标识
GetTopIndex
返回作为组合部件的列表框中的第一个可视选项的索引
InitStorage
给作为组合框部件的列表框选项和串与分配内存
InsertString
将串加到组合框的列表框中
LimitText
限制用户可以输入到组合框中的编辑框中的文本长度
MeasureItem
当创建owner-draw组合框,已决定组合框尺寸
Paste
将剪贴板中的数据插入到编辑框中
ResetContent
从组合框的列表框和编辑框中删除所有的串
SetCurSel
在组合框的列表框中选取一个串
SetDroppedWidth
未作为组合框部件的下拉列表框设置最小的可用宽度
SetEditSel
在组合框的编辑框中选取字符
SetExtendUI
选取默认的用户界面或扩展界面
SetHorizontalExtent
设置作为组合框部件的列表框可水平滚动的像素宽度
SetItemDate
设置与组合框相关的32位值
SetItemDatePtr
设置与组合框相关的32位值的指针
SetItemHeight
设置组合框中的列表框或编辑框选项的高度
SetLocale
设置组合框的当前标识符
SetTopIndex
通知组合框的列表框部分在最上方显示选项
ShowDropDown
显示或隐藏列表框
SetCurSel
intSetCurSel(intnSelect);
返回值
调用成功时返回选中的项的下标。
如果nSelect大于列表中项的个数,则返回CB_ERR。
如果nSelect为-1,则清除当前的选择并返回CB_ERR。
参数nSelect
指定要选中的字符串的下标。
如果为-1,则清除当前的选择,编辑控件中的内容设置为空。
说明
本函数在组合框的列表框中选择一个字符串。
必要时列表框会滚动,以使该字符串在列表的可视区内(列表是可见的时)。
编辑控件中的文本将相应地变为选中的字符串。
此前在列表框中的选择将不复存在。
FindStringExact
intFindStringExact(intnIndexStart,LPCTSTRlpszFind)const;
返回值:
返回匹配的项的下标。
未查找到匹配串时返回CB_ERR。
参数:
nIndexStart指定了查找开始的下标。
当查到列表的结尾处时,又继续找到它标志的位置。
如果设为-1,则从列表的开始处开始查找匹配的串。
lpszFind指向一个以null结尾的字符串,该字符串中可以包括完整的文件名(包括扩展名)。
查找过程是不区分大小写的。
说明:
本函数用于查找组合框的列表中匹配指定字符串的第一个项,但不把它选为当前项。
如果组合框是自定义的,但未设置CBS_HASSTRING风格,FindStringExact会试图匹配双字值。
GetLBText-MFC
intGetLBText(intnIndex,LPTSTRlpszText)const;
voidGetLBText(intnIndex,CString&rString)const;
返回值:
返回字符串的字节数,不包括终结符null。
如果nIndex指定的值无效,则返回CB_ERR。
参数:
nIndex指明列表框中待拷贝的字符串的下标。
lpszText指向接收字符串的缓冲。
缓冲必须能够容纳下待拷贝的字符串及其终结符null。
rString对CString对象的一个参考。
说明:
本函数用于从组合框的列表中拷贝一个字符串。
第二种实现方式用拷贝来的文本填充一个CString对象。
InsertString
intInsertString(intnIndex,LPCTSTRlpszItem);
返回值:
字符串被插入位置的基于零的索引。
如果出错,则返回LB_ERR;如果无足够有效空间来存储新字符串,则返回LB_ERRSPACE。
参数:
nIndex指定插入字符串的基于零的索引。
如果此参数为-1,则字符串添加到列表末尾。
lpszItem指向插入的空终止字符串的指针。
说明:
插入字符串到列表框中。
与AddString成员函数不同,InsertString不会使LBS_SORT风格的列表被排序。
GetWindowText
函数功能
该函数将指定窗口的标题条文本(如果存在)拷贝到一个缓存区内。
如果指定的窗口是一个控件,则拷贝控件的文本。
但是,GetWindowText不能接收在其他应用程序中的控件的文本。
函数原型:
IntGetWi