资源预览内容
第1页 / 共66页
第2页 / 共66页
第3页 / 共66页
第4页 / 共66页
第5页 / 共66页
第6页 / 共66页
第7页 / 共66页
第8页 / 共66页
第9页 / 共66页
第10页 / 共66页
亲,该文档总共66页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第8章 高级控件,第8章 高级控件,本章主要讲述高级控件及其应用的实例。,8.1 高级控件简介,新的Win32控件及其控件类 :,8.2 动画控件,Windows 支持一种动画控件(Animate control),动画控件可以播放AVI格式的动画片(AVI Clip),动画片可以来自一个AVI文件,也可以来自资源中。动画控件可以用来显示无声的动画。如果视频剪辑文件中带有声音,则不能使用动画控件来显示。,8.2.1 动画控件的样式,动画控件的样式可以在Properties对话框的Styes属性页进行设置 。,8.2.2 CAnimateCtrl类,MFC的CAnimateCtrl类封装了动画控件, CAnimateCtrl类主要的成员函数包括: BOOL Open(LPCTSTR lpszFileName ); Open函数从AVI文件或资源中打开动画片,如果参数lpszFileName或nID为NULL,则系统将关闭以前打开的动画片。若成功则函数返回TRUE。 BOOL Play( UINT nFrom, UINT nTo, UINT nRep ); 该函数用来播放动画片。参数nFrom指定了播放的开始帧的索引,索引值必须小于65536,若为0则从头开始播放。nTo指定了结束帧的索引,它的值必须小于65536,若为-1则表示播放到动画片的末尾。nRep是播放的重复次数,若为-1则无限重复播放。若成功则函数返回TRUE。,CAnimateCtrl类的成员函数(续),BOOL Seek(UINT nTo); 该函数用来静态地显示动画片的某一帧。参数nTo是帧的索引,其值必须小于65536,若为0则显示第一帧,若为-1则显示最后一帧。若成功则函数返回TRUE。 BOOL Stop(); 停止动画片的播放。若成功则函数返回TRUE。 BOOL Close(); 关闭并从内存中清除动画片。若成功则函数返回TRUE。,把动画片放进资源里:,操作步骤: 1在程序的资源视图中单击鼠标右键,并在弹出菜单中选择Import.命令。 2在文件选择对话框中选择.avi文件,按Import按钮退出。 3按Import按钮退出后,会出现一个Custom Resource Type对话框,。如果是第一次向资源中加入AVI文件,那么应该在Resource type编辑框中为动画片类资源起一个名字(如AVI),若以前已创建过AVI型资源,则可以在直接在列表框中选择AVI型。按OK后,.avi就被加入到资源中。,动画控件的使用实例:,下面的这段代码打开并不断重复播放一个资源动画,它们通常是位于OnInitDialog函数中: m_AnimateCtrl.Open(IDR_AVI1) m_AnimateCtrl.Play(0,-1,-1); 注:动画控件只能播放一些简单的,颜色数较少的AVI动画。,8.3 标签控件,标签控件(Tab Control)是用来在一个窗口,如对话框中的同一用户区域控制多组显示信息或控制信息,由顶部的一组标签来控制不同的信息提示; 标签既可以是文本说明也可以是一个代表文本含义的图标,或是两者的组合。,8.3.1 标签控件的样式,标签控件的样式可以在Properties对话框的Styes属性页进行设置,如图所示:,8.3.2 CTabCtrl类,标签控制在MFC中只存在一种封装形式,即控制类CtabCtrl 。类CTabCtrl的成员函数 如下:,8.3.3 标签控制的操作方法,CTabCtrl类有一个成员函数InsertItem,它的原型是: BOOL InsertItem(int nItem,TC_ITEMpTabCtrlItem); 其中第一个参数是加入项目的序号,此序号将在调用CTabCtrl的另一个成员函数GetCurSel()时作为返回值。,标签控制的操作方法(续),与GetCurSel()对应的就是SetCurSel(int nItem),SetCurSel函数可改变标签控件当前选定的项目,其中nItem就是该项目的序号。 InsertItem的关键在于第二个参数PTabCtrlItem。这是一个指向TC_ITEM结构的指针。 TC_ITEM结构的定义如下:,TC_ITEM结构的定义:,typedef struct_TC_ITEM UINT mask; /标签控件的类型 UINT lnReserved1; /VC保留,勿用 UINT lnReserved2; /VC保留,勿用 LPSTR pszText; /标签控件的项目文字 int cchTextMax; / pszText的长度 int iImage; / 标签控件的图形序号 LPARAM lParam; / 用于交换的数据 TC_ITEM;,TC_ITEM结构定义中的变量说明:,Mask:指定标签控件的类型。 它可以是以下三个值: TCIF_TEXT: pszText成员有效 TCIF_IMAGE :iImage成员有效 TCIF_PARAM :iParam成员有效 如果要使用多个属性,应该用按位或运算符”连接。例如要使pszText和iImage成员同时有效,则用TCIF_TEXTTCIF_IMAGE作为mask的值。 pszText 标签控件的项目文字,可直接赋予字符串值。此时标签控件的类型必须有TCIF_TEXT。 在编程中,真正经常使用的只有mask、pszText、iImage三个成员变量。,8.3.4 应用实例,步骤1.新建基于对话框的工程Eg8_1; 步骤2.在对话框资源上面添加TAB控件和两个静态控件,两个静态控件ID资源号为IDC_STATIC1和IDC_STATIC2其中标题对应为“这是第一个标签”、 “这是第二个标签”,TAB控件的资源号为IDC_TAB1;,应用实例(续),步骤3.为TAB控件添加成员变量m_Ctrl类型为CtabCtrl; 步骤4.重载对话框类的的OnInitDialog()函数; 重载以后的函数如下: BOOL CEg8_1Dlg:OnInitDialog() CDialog:OnInitDialog(); TC_ITEM tcItem;/添加标签 tcItem.mask=TCIF_TEXT; tcItem.pszText=“标签1“; m_Ctrl.InsertItem(0, ,应用实例(续),步骤5.添加响应函数。 完善OnSelchangeTab1()函数: void CEg8_1Dlg:OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code here int i=m_Ctrl.GetCurSel();/所选标签号,应用实例(续),if(i=1) GetDlgItem(IDC_STATIC2)-ShowWindow(TRUE); GetDlgItem(IDC_STATIC1)-ShowWindow(SW_HIDE); else GetDlgItem(IDC_STATIC1)-ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC2)-ShowWindow(SW_HIDE); ,8.4 列表控件,列表控件以列表条的形式显示数据信息,一般可以用来显示数据的子集,如数据库里表里的数据,或者用来显示一些分散的对象等。,8.4.1 列表控件的样式,列表控件的样式可以在Properties对话框的Styes属性页进行设置:,8.4.2 CListCtrl类,与列表视图控件有关的一些数据类型: LV_COLUMN结构。该结构仅用于报告式列表视图,用来描述表项的某一列要想向表项中插入新的一列,需要用到该结构,其定义为: typedef struct _LV_COLUMN UINT mask; /屏蔽位的组合(见下面括号),表明哪些成员是有效的 int fmt; /该列的表头和子项的标题显示格式(LVCF_FMT) int cx; /以像素为单位的列的宽度(LVCF_FMT) LPTSTR pszText; /指向存放列表头标题正文的缓冲区(LVCF_TEXT) int cchTextMax; /标题正文缓冲区的长度(LVCF_TEXT) int iSubItem; /说明该列的索引(LVCF_SUBITEM) LV_COLUMN;,与列表视图控件有关的一些数据类型(续),LV_ITEM结构。该结构用来描述一个表项或子项,它包含了项的各种属性,其定义为: typedef struct _LV_ITEM UINT mask; /屏蔽位的组合,表明哪些成员是有效的 int iItem; /从0开始编号的表项索引(行索引) int iSubItem; /从1开始编号的子项索引(列索引) UINT state; /项的状态(LVIF_STATE) UINT stateMask; /项的状态屏蔽 LPTSTR pszText; /指向存放项的正文的缓冲区(LVIF_TEXT) int cchTextMax; /正文缓冲区的长度(LVIF_TEXT) int iImage; /图标的索引(LVIF_IMAGE) LPARAM lParam; / 32位的附加数据(LVIF_PARAM) LV_ITEM;,CListCtrl类的成员函数:,列的插入和删除项: 插入某列 :int InsertColumn( int nCol, const LV_COLUMN* pColumn); 删除某列 : BOOL DeleteColumn( int nCol );,CListCtrl类的成员函数(续),表项的插入 函数的声明为int InsertItem(const LV_ITEM* pItem); 参数pItem指向一个LV_ITEM结构,该结构提供了对表项的描述。若插入成功则函数返回新表项的索引,否则返回-1。,CListCtrl类的成员函数(续),调用GetItemText和SetItemText来查询和设置表项及子项显示的正文 : int GetItemText( int nItem, int nSubItem, LPTSTR lpszText, int nLen ) const; CString GetItemText( int nItem, int nSubItem ) const; BOOL SetItemText( int nItem, int nSubItem, LPTSTR lpszText );,8.4.3 应用实例,下面开始建立一个CListCtrl对话框的工程Eg8_2,步骤如下: 步骤1.建立一个基于对话框的程序,打开对话框资源。将对话框的标题设为“列表控件”。将CListCtrl拖到视图窗口中,调整位置、大小,并定义其对象标识为IDC_LIST。,应用实例(续),步骤2.改变列表控件的属性,选中ViewReport选项。,应用实例(续),步骤3.在MFC ClassWizard中建立对列表控件IDC_LIST的成员变量为m_List,以后程序中对该控件的控制通过此成员变量来实现。 步骤4.重载 对话框类的初始化函数OnInitDialog(): BOOL CMy83Dlg:OnInitDialog() CDialog:OnInitDialog(); /初始化列表视图 LV_COLUMN lvc; LV_ITEM lvi;,初始化函数OnInitDialog():,char *display233=“1“,“01“,“75“,“2“,“02 “,“84 “,“3“,“03 “,“67 “; char *display3=“姓名“,“学号“,“分数“
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号