




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据类型:1、LPCTSTR类型: L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。 P表示这是一个指针 C表示是一个常量 T表示在Win32环境中, 有一个_T宏 STR表示这个变量是一个字符串所以LPCTSTR就表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。ansi情况下,LPCTSTR 就是 const char*, 是常量字符串(不能修改的)。 而LPTSTR 就是 char*, 即普通字符串(非常量,可修改的)。2、枚举类型的使用方法:1. 枚举的定义枚举类型定义的一般形式为:enum 枚举名 枚举值表 ; 在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。例如: 该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。 2. 枚举变量的说明如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式:enum weekday sun,mou,tue,wed,thu,fri,sat ; enum weekday a,b,c;或者为: enum weekday sun,mou,tue,wed,thu,fri,sat a,b,c; 或者为: enum sun,mou,tue,wed,thu,fri,sat a,b,c; 枚举类型在使用中有以下规定: 1. 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。例如对枚举weekday的元素再作以下赋值: sun=5;mon=2; sun=mon; 都是错误的。2. 枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2。如在weekday中,sun值为0,mon值为1,,sat值为6。【例11.10】main() enum weekday sun,mon,tue,wed,thu,fri,sat a,b,c; a=sun; b=mon; c=tue; printf(%d,%d,%d,a,b,c); 说明:只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如: a=sum; b=mon; 是正确的。而: a=0; b=1; 是错误的。如一定要把数值赋予枚举变量,则必须用强制类型转换。如: a=(enum weekday)2; 其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于: a=tue; 还应该说明的是枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。3、this指针:this指针的由来 一个学生可以有多本书一样,而这些书都是属于这个同学的;同理,如果有很多个同学在一起,那么为了确定他们的书不要拿混淆了,最好的办法我想应该就是每个同学都在自己的书上写上名字,这样肯定就不会拿错了。 同理,一个对象的多个成员就可看作是这个对象所拥有的书;而在很多个对象中间,我们为了证明某个成员是自己的成员,而不是其他对象的成员,我们同样需要给这些成员取上名字。在C+中,我们利用this指针帮助对象做到这一点,this指针记录每个对象的内存地址,然后通过运算符-访问该对象的成员this指针作用示例我们通过一个程序来体现this指针的实际用处:12345678910111213141516171819202122232425#include using namespace std; class A public: int get() constreturn i; void set(int x)this-i=x;coutthis指针保存的内存地址为:thisendl; private: int i; ; int main() A a; a.set(9); cout对象a所在的内存地址为:&aendl; cout对象a所保存的值为:a.get()endl; coutendl; A b; b.set(999); cout对象b所在的内存地址为:&bendl; cout对象b所保存的值为:b.get()i=x;这句话就表示把x的值赋值给当前的对象的私有成员函数i。总结 通过上面这个例子,我们可以看到this指针最大的作用就是它保存了当前对象的地址,并且应用指针的形式指向了当前的对象。4、消息分为三类:标准消息,命令消息,和控件通知消息。56、CWnd类中有一个成员数m_hWnd,它用来存储和类对象对应的相关窗口的句柄。它派生的类都有这个成员数。7、逗号表达式: 逗号表达式的形式如下:表达式1,表达式2,表达式3,. ,表达式n 逗号表达式的要领: (1) 逗号表达式的运算过程为:从左往右逐个计算表达式。 (2) 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。 (3) 逗号运算符的优先级别在所有运算符中最低。例题:逗号表达式本身不难,常常与赋值运算符一起考,考查学生对这两个知识点的理解和考生观察是否细心。如下题: 题目:以下程序的输出结果是: main() int x,y,z; x=y=1; z=x+,y+,+y; printf(%d,%d,%dn,x,y,z); A2,3,3 B2,3,2 C2,3,1 D1,1,1 解析: x和y的值经过自增以后分别为2和3,D可以排除。剩下3个选项选择什么呢? 如果是(x+,y+,+y)实际上可以看成(1,1,3)整个逗号表达式的值应该是3,那么选A。 如果是(x+,+y,y+)实际上可以看成(1,2,2)整个逗号表达式的值应该是2,那么选B。 但这是错的,这儿还有赋值运算符。赋值运算符的优先级是14,而逗号表达式的优先级是15,也就是说上面的表达式中应该等价于这样的结合:(z=x+),y+,+y;如果这样写的话,则答案很清晰,为:2,3,1 正确答案选C。 PS:据我统计,这种类型的题目错误率超过70%. 与逗号表达式有关的题例题1:(a = 3,b = 5,b+ = a,c = b* 5),求逗号表达式的值? 答案:40。前两个表达式只是赋值,从第三个开始计算,b+=a,即b=b+a,即b=5+3,b=8,求最后一个表达式,c=b*5=8*5=40.因为逗号表达式的值是最后一个表达式的值,所以整个逗号表达式的值为40,其他各变量最后的值依次为:a=3,b=8,c=40 例题2:若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是 A) 1 B) 2C) 2.0D) 2.5 分析:该表达式是一个逗号表达式,所以先运算x=1,结果变量x中的值为1.0,然后运算y=x+3/2,其结果是变量y中的值为2.0(这个运算过程可参阅本专题的“整数除法的注意事项”整数相除,舍入法取整数部分),注意此时表达式y=x+3/2的值即等于变量y的值为2.0。最后,整个逗号表达式的值应该等于最后一个表达式的值2.0,所以,正确答案是C)。 注:该题曾在1998年4月和2000年9月的二级C考试中两次出现过。 例题3:若t为double类型,表达式t=1,t+5,t+的值是 A) 1B) 6.0C) 2.0D) 1.0 分析:该题的表达式也是一逗号表达式,运算过程同例题1。需要注意的是,其中的第二个表达式(t+5)对整个表达式的运算结果不产生任何影响,因为它没有改变变量x的值(x的值仍为1.0),最后一个表达式(t+)的值为变量x进行自增运算前的值1.0,所以整个表达式的值为1.0。 注:这是1998年4月二级C考试中的一道选择题。 例题4:有如下函数调用语句 func(rec1,rec2+rec3,(rec4,rec5); 该函数调用语句中,含有的实参个数是 A)3 B)4C)5D)有语法错误 分析:C语言规定,函数调用时实参与实参之间是用逗号隔开的,所以,本题的函数调用语句中包含3个实参,其中第一个实参是rec1,第二个实参是rec2+rec3,第三个实参是(rec4,rec5),这里的第三个实参就是一个逗号表达式,根据逗号表达式的运算规则,第三个实参的值应该等于rec5的值。 注:这是2000年9月二级C考试中的一道选择题。 例题5:有如下函数调用语句 fun(a+b,(x,y),fun(n+k,d,(a,b); 在此函数调用语句中实参的个数是 A)3 B)4C)5D)6 正确答案应该是A)。 注:这是1997年9月二级C考试中的一道选择题。7、AfxGetApp函数原型: CWinApp* AfxGetApp( ); 返回值: A pointer to the single CWinAppobject for the application. 返回指向应用程序的单一的CWinApp对象的指针。 注意: The pointerreturned by this function can be used to access application information such as the main message-dispatch code or the topmost window. 这个函数返回的指针可以被用来访问应用程序的信息,比如主消息调度代码以及顶层窗口等。AfxGetApp()这个函数在VC当中很常见,主要是用来获得CWinAPP生成的全局对象的。afxgetapp - 取应用程序实例指针 getmainwnd - 取主窗口对象指针8、SetImageListCTreeCtrl:SetImageListCImageList* SetImageList( CImageList * pImageList, int nImageListType ); 返回值Pointer to the previous image list, if any; otherwise NULL. 返回指向先前的图像列表的指针(如果有);否则返回NULL 参数说明pImageList Pointer to the image list to assign. If pImageList is NULL, all images are removed from the tree view control. 指向要被分配的图像列表的指针。如果pImageList是NULL,则从tree view控件中删除所有的图像。 nImageListType Type of image list to set. The image list can be one of the following values: 要设置的图像列表的类型。图像列表可以是下列值之一:l TVSIL_NORMAL 获取常规的图像列表,它包含了该tree view项的被选择的和不被选择的图像。l TVSIL_STATE 获取状态图像列表,它包含了处于用户定义状态的treeview项的图像。 TVSIL_NORMAL Sets the normal image list, which contains the selected and nonselected images for the tree view item.TVSIL_STATE Sets the state image list, which contains the images for tree view items that are in a user-defined state. 备注Call this function to set the normal or state image list for a tree view control and redraw the control using the new images. 此成员函数用来设置一个tree view控件的常规或状态图像列表,并使用新的图 CTreeCtrl Overview | Class Members | Hierarchy Chart 相关参考资料CImageList, CTreeCtrl:GetImageList 9、树型视的三个结构TVINSERTSTRUCT、TVITEM、NMTREEVIEW TVINSERTSTRUCT包含添加新项到树形视控件所使用的信息。这个结构被TVM_INSERTITEM消息使用。这个结构与TV_INSERTSTRUCT结构是一样的,但它已经按当前的命名习惯重命名了。typedef struct tagTVINSERTSTRUCT HTREEITEM hParent; HTREEITEM hInsertAfter;#if (_WIN32_IE = 0x0400) union TVITEMEX itemex; TVITEM item; DUMMYUNIONNAME;#else TVITEM item;#endif TVINSERTSTRUCT, FAR *LPTVINSERTSTRUCT;成员hParent 父项的句柄。如果这个成员的值是TVI_ROOT或NULL,这项将被作为树形控件的根插入。 hInsertAfter 插入的新项之后的项的句柄。或是下列值之一: 值意味 TVI_FIRST在列表的开始插入项TVI_LAST在列表的最后插入项TVI_ROOT作为一个根项添加TVI_SORT以字母顺序插入项itemex 版本4.71。TVITEMEX包含关于项添加的信息。 item TVITEM包含关于项添加的信息。 需求Windows NT/2000:需要Windows NT 3.51或更高版本。 Windows 95/98:需要Windows 95或更高版本。 Header:定义在commctrl.h。TVITEM指定或接收树形视项的属性。这个结构与TV_ITEM结构一样,但它已经被当前命名协议重新命名了。新的应用程序应该使用这个结构。typedef struct tagTVITEM UINT mask; HTREEITEM hItem; UINT state; UINT stateMask; LPTSTR pszText; int cchTextMax; int iImage; int iSelectedImage; int cChildren; LPARAM lParam; TVITEM, FAR *LPTVITEM;成员mask 指出其它的结构成员哪些包含有效数据的标记数组。当这个结构被TVM_GETITEM消息使用时,mask成员指出项的属性被取回。这个成员可以是下列值的一个或多个。 TVIF_CHILDRENcChildren成员是有效的。TVIF_DI_SETITEM树形视控件将保留支持信息并且不重新请求它。当处理TVN_GETDISPINF通知时,这个标记是有效的。TVIF_HANDLEhItem成员有效。TVIF_IMAGEiImage成员有效。TVIF_PARAMlParam成员有效。TVIF_SELECTEDIMAGEiSelectedImage成员有效。TVIF_STATEstate和stateMask成员有效。TVIF_TEXTpszText和cchTextMax成员有效。hItem 这个函数引用的项。 state 位标记和图像列表索引的设置,指出项的状态。当设置了一个项的状态,stateMask成员指出这个成员的位是有效的。当取加一个项的状态时,这个成员返回stateMask成员指出的位的当前状态。 这个成员的0至7位包含了项的状态标记。关于可能的项状态标记,参见Tree View Control Item States.覆盖图像覆盖在项的图标图像之上。这个成员的8至11位指定了以1为基准的覆盖图像索引。如果这些位是0,这个项没有覆盖图像。要隔离这些位,使用TVIS_OVERLAYMASK掩码。要在这个成员中设置覆盖图像索引,使用INDEXTOOVERLAYMASK宏。图像列表的覆盖图像是被ImageList_SetOverlayImage函数设置的。一个状态图像是仅次于指出应用程序定义的状态的项的图标显示的。通过发送TVM_SETIMAGELIST消息来指定一个状态图像列表。要设置一个项的状态图像,在TVITEM结构的stateMask成员中包含TVIS_STATEIMAGEMASK值。结构的state成员的12至15位指定状态图像列表中被绘制图像的索引。要设置状态图像索引,使用INDEXTOSTATEIMAGEMASK。这个宏把一个索引适当的设置到12至15位上。要指出项没有状态图像,设置索引为0。这意味着在状态图像列表中的图像0不能被作为一个状态图像使用。要隔离state成员的位12至15,使用TVIS_STATEIMAGEMASK掩码。stateMask state成员的位是有效的。如果你取回了一个项的状态,设置stateMask成员的位来指出state成员中的这个位被返回。如果你设置了一个项的状态,设置stateMask成员的位来指出state成员的这个位是你想设置的。要设置或取回一个项的覆盖图像的索引,设置TVIS_OVERLAYMASK位。要设置和取回一个项的状态图像索引,设置TVIS_STATEIMAGEMASK位。 pszText 如果这个结构指定了项属性,那么这个成员是指向一个以空字符结束的字符串,包含有项的文本。如果这个成员是值LPSTR_TEXTCALLBACK,那么父窗口为保存名字负责。既然这样,当树形视控件需要显示、保存或编辑项文本时,向父窗口发送TVN_GETDISPINFO通过消息,当项文本改变时,发送TVN_SETDISPINFO通知消息。 如果结构是取回项的属性,这个成员是取回项文本缓冲的地址。cchTextMax pszText成员指定缓冲的大小,以字符为单位。如果这个结构被使用来设置项属性,这个成员被忽略。 iImage 当项是在非选择状态中时,是树形控件的图像列表的索引。 如果这个成员是值I_IMAGECALLBACK,父窗口为保存索引负责。既然这样,当树形视控件需要显示这个图像时,向父窗口发送TVN_GETDISPINFO通知消息来获得索引。iSelectedImage 当项被选择时,是树形控件图像列表的索引。 如果这个成员是值I_IMAGECALLBACK,父窗口为保存索引负责。既然这样,当树形视控件需要显示这个图像时,向父窗口发送TVN_GETDISPINFO通知消息来获得索引。cChildren 标记指出哪一个项有关联的子项。这个成员可以是下列值之一。 zero这个项没有子项。one这个项有一个或更多的子项。I_CHILDRENCALLBACKThe parent window keeps track of whether the item has child items. In this case, when the tree view control needs to display the item, the control sends the parent a TVN_GETDISPINFO notification message to determine whether the item has child items. If the tree view control has the TVS_HASBUTTONS style, it uses this member to determine whether to display the button indicating the presence of child items. You can use this member to force the control to display the button even though the item does not have any child items inserted. This allows you to display the button while minimizing the controls memory usage by inserting child items only when the item is visible or expanded.lParam 与这项相关的32位值。 需要Windows NT/2000:需要Windows NT 3.51或更高版本。 Windows 95/98:需要Windows 95或更高版本。 Header:定义在commctrl.h。NMTREEVIEW包含关于树形视通知消息的信息。这个结构与NM_TREEVIEW结构一样,但它已经用当前的命名规则进行了重命名。typedef struct tagNMTREEVIEW NMHDR hdr; UINT action; TVITEM itemOld; TVITEM itemNew; POINT ptDrag; NMTREEVIEW, FAR *LPNMTREEVIEW; 成员hdr NMHDR结构,包含了关于这个通知消息的信息 action 通知指定的动作标记。 itemOld 包含关于旧项状态信息的TVITEM结构。通知消息没有使用它时,这个成员为0。 itemNew 包含关于新项状态信息的TVITEM结构。通知消息没有使用它时,这个成员为0。 ptDrag 包含引起通知消息发送的事件信息的POINT结构。10、CTreeCtrl 的InsertItem详解CTreeCtrl:InsertItemHTREEITEM InsertItem( LPTVINSERTSTRUCT lpInsertStruct );HTREEITEM InsertItem( UINT nMask, LPCTSTR lpszItem, int nImage, int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam, HTREEITEM hParent, HTREEITEM hInsertAfter );HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );HTREEITEM InsertItem( LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST ); 返回值:如果成功则返回新项的句柄;否则返回NULL。 参数:lpInsertStruct 一个指向用来指定要插入的tree view项的属性的TVINSERTSTRUCT的指针。 nMask 用来指定要设置的属性的整数。 lpszItem 一个包含项的文本的字符串的地址。 nImage 项的图像在tree view控件的图像列表中的索引。 nSelectedImage 项的被选择图像在tree view控件的图像列表中的索引。 nState 为项的状态指定的值。 nStateMask 指定要设置的状态。 lParam 与此项关联的一个32位的应用程序指定的值。 hParent 要被插入的项的父项的句柄。 hInsertAfter 新项要被插入其后的项的句柄。 11、MFC中treeview控件使用方法MFC Treeview控件 方法 1用InsertItem 添加节点 参数: 文字,图标,父节点 返回: HTREEITEM 示例: 添加一系列节点 HTREEITEM hItem = m_Tree.InsertItem(root,NULL,NULL); /root就是/节点的标题 int i,j; for (i=0;i4;i+) HTREEITEM hSubItem = m_Tree.InsertItem(item,NULL,NULL,hItem); for (j=0;jitem.pszText=szOutpTVDI-item.lParam; /通过lParam得到需要显示的字符在数组中的位置 *pResult = 0; 关于编辑结点的显示字符:首先需要设置树形控件的TVS_EDITLABELS风格,在开始编辑时该控件将会发送TVN_BEGINLABELEDIT,你可以通过在处理函数中返回TRUE来取消接下来的编辑,在编辑完成后会发送TVN_ENDLABELEDIT,在处理该消息时需要将参数pNMHDR转换为LPNMTVDISPINFO,然后通过其中的item.pszText得到编辑后的字符,并重置显示字符。如果编辑在中途中取消该变量为NULL。下面的代码说明如何处理这些消息: /处理消息 TVN_BEGINLABELEDIT void CParentWnd:OnBeginEditTree(NMHDR* pNMHDR, L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四级养老护理员考试题库及答案
- 水利工程师水力学模拟考试题与参考答案
- 基因组稳定性评估-洞察及研究
- 节约在校园(说课稿)2023-2024学年初三下学期教育主题班会
- 2024年四年级英语下册 Unit 8 I come from China第1课时说课稿 湘少版
- 《向毒品说“不”》主题班会 说课稿
- 第3课 新土耳其的缔造者凯末尔教学设计-2025-2026学年高中历史人教版2007选修4中外历史人物评说-人教版2007
- 第14课 学习有方法 第2课时 教学设计-2023-2024学年道德与法治二年级下册统编版
- 习作:变形记(教学设计)-2024-2025学年统编版语文六年级上册
- 密闭鼓风炉备料工晋升考核试卷及答案
- 2025年下半年福建漳州片仔癀药业股份限公司招聘96人易考易错模拟试题(共500题)试卷后附参考答案
- 律师证考试试题及答案
- 2025-2030中国红景天苷行业市场发展趋势与前景展望战略研究报告
- 签约全屋定制合同协议
- 基于多方法融合构建麻醉专科护士核心能力评价指标体系的探索与实践
- 中建八局如何做好转型升级下的技术标编制工作
- 二年级上册体育与健康课教案
- 2025年铁路货装值班员(高级)职业技能鉴定参考试题库(含答案)
- 转让叉车协议书模板
- 2025-2030中国纳米气泡发生器行业市场发展趋势与前景展望战略研究报告
- (高清版)DB11∕T2279-2024社会单位消防安全评估规范
评论
0/150
提交评论