MFC对话框和控件(二)教程课件

上传人:夏** 文档编号:569349395 上传时间:2024-07-28 格式:PPT 页数:29 大小:2.57MB
返回 下载 相关 举报
MFC对话框和控件(二)教程课件_第1页
第1页 / 共29页
MFC对话框和控件(二)教程课件_第2页
第2页 / 共29页
MFC对话框和控件(二)教程课件_第3页
第3页 / 共29页
MFC对话框和控件(二)教程课件_第4页
第4页 / 共29页
MFC对话框和控件(二)教程课件_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《MFC对话框和控件(二)教程课件》由会员分享,可在线阅读,更多相关《MFC对话框和控件(二)教程课件(29页珍藏版)》请在金锄头文库上搜索。

1、对话框和控件(二)文 越回顾模态对话框与非模态对话框内容:列表控件、表格控件、树形控件时间日期控件、定时器选项卡控件、IP地址控件对话框属性设置:模态对话框: 新建对话框资源,对新对话框新建一个类; 建立该类的对象; 注:该对象可以是局部变量; 该对象调用函数DoModal()。非模态对话框: 新建对话框资源,对新对话框新建一个类; 建立该类的对象; 注:该对象是用new操作符来动态创建的, 用delete操作符删除对话框对象。 该对象调用函数Create()和ShowWindow() 对话框置顶(SetWindowPos):基于对话框应用程序时: 设置置顶: SetWindowPos(&wn

2、dTopMost,0,0,0,0, SWP_NOMOVE | SWP_NOSIZE); SetWindowPos(&wndTopMost,300,300,500,500, SWP_NOMOVE | SWP_SHOWWINDOW); 取消置顶: SetWindowPos(&wndNoTopMost,0,0,0,0, SWP_NOMOVE | SWP_NOSIZE); SetWindowPos(&wndNoTopMost,300,300,300,350, SWP_NOMOVE | SWP_SHOWWINDOW); 基于单文档应用程序时: 设置置顶: SetWindowPos( Handle, HW

3、ND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); 取消置顶: SetWindowPos( Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);对话框置顶(SetWindowPos):23Windows消息分类:标准Windows消息。除WM_COMMAND外以WM_开头的消息是标准消息。例如,WM_CREATE、WM_CLOSE命令消息。消息名为WM_COMMAND,消息中附带了标识符ID来区分是来自哪个菜单、工具栏按钮或加速键的消息。通知消息。通知消息一般由列表框等子窗口发送给父窗

4、口,消息名也是WM_COMMAND,其中附带了控件通知码来区分控件。1CWnd的派生类都可以接收到标准Windows消息、通知消息和命令消息。123控件基本使用:拖动/创建一个控件对控件创建一个变量:Control型变量:可以获得控件的实例例如:m_TreeCtrol.InsertItem(.);Value型:变量仅仅可以获得该控件的public型变量例如:CString m_Str=hustwjz; UpdateData(FALSE); / 向控件传递数据 UpdateData(TRUE); / 从控件获得数据 对控件添加事件处理响应/通知消息表格控件(List Contorl): CLis

5、tCtrl类封装了“列表视图控件”功能,显示每个包含图标(列表视图中)和标签的收集。 除图标和标签外,每一项还能有显示在图标和标签右边列中的信息。表格控件(List Contorl):列表视图控件: 分类:Icon、Small Icon、List和Report。表格控件(List Contorl):属性:View 列表视图的显示风格:图标(Icon)、小图标(Small Icon)、列表(list)、报表(Report)Align 列表中的文本对齐方式:顶端对齐(top)、左对齐(left)Sort 列表中的记录排序: 不排序(None)、升序(Ascending),降序(Descending

6、)按照列表的第一列字母顺序排序Border 选中时,使列表含有边框Single selection 选中时,只能选择一条记录,否则,可以多行选择Auto arrange 选中时, 自动对齐网格上的项No Label wrap 选中时,文本不折叠Edit lables 选中时, 可以编辑标签No scroll 选中时,列表不能滚动No column header 选中时,列表没有列表头No sort header 选中时,没有排序的表头Show selection always 总是显示选择项表格控件(List Contorl):用Create函数创建ListCtrl:virtual BOOL

7、Create( DWORD dwStyle, / 设定列表视图控件的风格 const RECT& rect, / 列表视图控件的位置和尺寸 CWnd* pParentWnd, / 指向父窗口的指针 UINT nID / 列表视图控件的ID);风风 格格含含 义义LVS_ALIGNLEFT 显示格式是大图标或小图标时,标签放在图标的左边LVS_ALIGNTOP 显示格式是大图标或小图标时,标题放在图标的上边LVS_ICON 指定大图标显示格式LVS_LIST 指定列表显示格式LVS_NOCOLUMNHEADER在报表格式中不显示列的表头LVS_NOSCROLL 列表视图控件无滚动条,此风格不能与

8、LVS_LIST或LVS_REPORT组合使用LVS_REPORT指定报表显示格式LVS_SORTASCENDING 按升序排列列表项LVS_SORTDESCENDING 按降序排列列表项LVS_AUTOARRANGE 显示格式是大图标或小图标时,自动排列控件中的列表项 不要忘记:WS_CHILD和WS_VISIBLE风格。表格控件(List Contorl):列表视图控件的通知消息:函数声明函数声明功功 能能LVN_ITEMCHANGING当列表视图的状态发生变化时,发送该通知消息如果返回TRUE,那么就阻止选择的改变,如果返回FALSE,则允许改变LVN_ITEMCHANGED当列表视图的

9、状态发生变化时,发送该通知消息LVN_KEYDOWN该消息表明了一个键盘事件。消息会附带一个指向NMLVKEYDOWN结构的指针,通过该结构程序可以获得按键的信息。LVN_BEGINLABELEDIT 在用户开始编辑标题时发送。消息会附带一个指向NMLVDISPINFO结构的指针LVN_ENDLABELEDIT在用户结束编辑标题时发送表格控件(List Contorl): 列表视图控件的相关结构体:1. NMHDR结构体:typedef struct tagNMHDR HWND hwndFrom; / 控件窗口的句柄 UINT_PTR idFrom; / 控件ID UINT code; / 控

10、件的通知消息码 NMHDR;2. NMLISTVIEW结构体: 该结构体存放了列表视图控件通知消息的相关信息。列表视图控件的大部分通知消息都会附带指向该结构体的指针。typedef struct tagNMLISTVIEW NMHDR hdr; / 标准的NMHDR 结构 int iItem; / 列表项的索引 int iSubItem; / 列表子项的索引 UINT uNewState; / 列表项或列表子项的新状态 UINT uOldState; / 列表项或列表子项原来的状态 UINT uChanged; / 用来表明哪些状态发生了变化 POINT ptAction; / 事件发生时鼠标

11、的客户区坐标 LPARAM lParam; /32位的附加数据 NMLISTVIEW, *LPNMLISTVIEW; 表格控件(List Contorl):函数声明函数声明功功 能能InsertColumn插入列DeleteColumn删除列InsertItem插入新的表项SetImageList为列表视图设置位图序列DeleteItem删除某表项DeleteAllItems删除所有的项GetItemText查询表项及子项显示的正文SetItemText设置表项及子项显示的正文GetItemCount查询表项的数目GetSelectedCount返回列表视图控件中被选择列表项的数量CListC

12、trl类的主要成员函数:树形控件(Tree Contorl): 主要用来显示具有一定层次结构的数据项,如资源管理器中的磁盘目录等,以供用户在其中进行各种选择。 树控制中的每个数据项包括数据项名称的文本字符串和用于表示该数据项的图像,每个数据项下面均可包含各种子项,整个结构就象目录树一样。树形控件(Tree Contorl):函数声明函数声明功功 能能TVS_HASLINES 表示树控件在各子项之间存在连线TVS_LINESATROOT 表示树控件在根项之间存在连线TVS_HASBUTTONS 表示树控件视在父项左侧存在展开合拢控件按钮TVS_EDITLABELS 表示可以控件鼠标单击修改树项的

13、名称TVS_SHOWSELALWAYS 表示选中项即使在窗口失去输入焦点时仍然保持选中状态;TVS_DISABLEDRAGDROP表示禁止树控件发送TVN_BEGINDRAG消息树控件的创建: BOOL Create( DWORD dwStyle, / 设定列表视图控件的风格 const RECT& rect, / 列表视图控件的位置和尺寸 CWnd* pParentWnd, / 指向父窗口的指针 UINT nID / 列表视图控件的ID);树形控件(Tree Contorl): 树形控件的相关数据结构: 1. HTREEITEM句柄: 树形控件中的每个节点都可以由一个HTREEITEM类型的

14、句柄表示。 我们通过CTreeCtrl类的成员函数对树进行访问和操作时,很多时候都要用到HTREEITEM句柄。2. TVITEM结构体: TVITEM结构体描述了树形控件节点的属性。typedef struct tagTVITEM . int iImage; / 树节点的图像索引(TVIF_IMAGE) int iSelectedImage; / 选中项的图像索引(TVIF_SELECTEDIMAGE) int cChildren; / 表明节点是否有子节点,为1则有,为0则没有 . TVITEM, *LPTVITEM;3. NMTREEVIEW结构体: 包含了树形控件通知消息的相关信息。t

15、ypedef struct tagNMTREEVIEW NMHDR hdr; / 标准的NMHDR结构 UINT action; / 表明是用户的什么行为触发了该通知消息 TVITEM itemOld; / 原节点的属性 TVITEM itemNew; / 新节点的属性 POINT ptDrag; / 事件发生时鼠标的客户区坐标 NMTREEVIEW, *LPNMTREEVIEW; 树形控件(Tree Contorl):函数声明函数声明功功 能能InsertItem插入新的表项SetImageList为树形视图设置位图序列DeleteItem删除指定项DeleteAllItems删除所有的项G

16、etSelectedItem获取树形控件当前选中节点的句柄SelectItem选中指定的树节点GetItemCount查询表项的数目GetItem查询指定的项SetItem设置指定项GetItemText获取树形控件中某个指定节点的标签文本CTreectrl类的主要成员函数:树形控件(Tree Contorl):树形控件的创建及使用:123拖动/创建一个树形控件添加创建图像控件对象、树形控件对象、树形控件句柄加载图标、创建根节点添加树形控件的通知消息等选项卡控件(Tab Contorl): 使用标签控件我们可以同时加载多个有关联的页面,用户只需点击标签即可实现页面切换,方便灵活的进行操作。每个

17、标签除了可以显示标签文本,还可以显示图标。 标签控件相当于是一个页面的容器,可以容纳多个对话框,而且一般也只容纳对话框,所以我们不能直接在标签控件上添加其他控件,必须先将其他控件放到对话框中,再将对话框添加到标签控件中。最终我们点击标签切换页面时,切换的不是控件的组合,而是对话框。选项卡控件(Tab Contorl):通知消息通知消息功功 能能TCN_SELCHANGE通知父窗口控件的标签选择项已经改变TCN_SELCHANGING通知父窗口控件的标签选择项正在改变TCN_KEYDOWN通知父窗口在控件范围内键盘被按下TCN_GETOBJECT具有TCS_EX_REGISTERDROP扩展特性

18、并且对象被拖动时的通知消息TCN_FOCUSCHANGE通知父窗口控件的按钮聚焦已经改变NM_CLICK通知父窗口用户在控件区域范围内点击了鼠标左键NM_RCLICK通知父窗口用户在控件区域范围内点击了鼠标右键NM_RELEASEDCAPTURE通知父窗口在控件区域范围内释放鼠标捕获消息标签控件的通知消息:选项卡控件(Tab Contorl):通知消息通知消息功功 能能InsertItem在标签控件中插入新的标签GetItem获取标签控件中某个标签的信息GetItemCount获取标签控件中标签的数量SetCurSel在标签控件中选择某标签DeleteAllItems删除标签控件中所有标签De

19、leteItem删除标签控件中的某个标签SetItem设置某标签的所有或部分属性GetCurSel获取标签控件中当前选择标签的索引。如果成功则返回选择标签的索引,否则返回-1CTabCtrl类的主要成员函数:定时器的基本操作:1、启动定时器: 使用CWnd类的成员函数SetTimer。2、为WM_TIMER消息添加消息处理函数,或者定义回调函数。3、销毁定时器: 不再使用定时器时,可以销毁它。销毁定时器需使用KillTimer成员函数。API函数的SetTimer原型:UINT_PTR SetTimer( HWND hWnd, / 窗口句柄 UINT_PTR nIDEvent, / 定时器ID

20、 UINT uElapse, / 时间间隔,单位为毫秒 TIMERPROC lpTimerFunc / 回调函数);CWnd类的成员函数SetTimer原型:UINT_PTR SetTimer( UINT_PTR nIDEvent, / 计时器的标识 UINT nElapse, / 时间间隔,单位为毫秒 void (CALLBACK* lpfnTimer / 一个回调函数的地址 )(HWND,UINT,UINT_PTR,DWORD) );SetTimer(m_hWnd,1,1000,NULL); / 一个1秒触发一次的定时器例如:SetTimer(1,1000,NULL);/ 1:计时器的名称

21、; 1000:时间间隔,单位是毫秒;NULL:使用OnTime函数。定时器的基本操作:3、当不需要计时器的时候调用KillTimer(nIDEvent);例如:KillTimer(1); / 此处的ID号“1 ”应与SetTimer()中的ID号一致2、为WM_TIMER消息添加消息处理函数,或者定义回调函数。void CExample44Dlg:OnTimer(UINT_PTR nIDEvent) / TODO: Add your message handler code here and/or call default CDialogEx:OnTimer(nIDEvent); 日期控件(D

22、ate Time Picker)和IP地址控件:DateTimePicker控件,控件一般用于让用户可以从日期列表中选择单个值。运行时,单击控件边上的下拉箭头,会显示为两个部分:一个下拉列表,一个用于选择日期的。CIPAddressCtrl类提供Windows普通IP地址协议的功能。日期控件(Date Time Picker): CTime类的对象表示的时间是基于格林威治标准时间(GMT)的。 CTime类一般不会被继承使用。 CTime类的主要成员函数:通知消息通知消息功功 能能CTime构造一个未经初始化的CTime对象GetCurrentTime获取系统当前日期和时间GetYear获取C

23、Time对象表示时间的年份。范围从1970年1月1日到2038年(包括2038年)1月18日GetMonth获取CTime对象表示时间的月份。范围为1到12。GetDay 获取CTime对象表示时间的日期。范围为1到31。GetHour获取CTime对象表示时间的小时。范围为0到23。GetMinute 获取CTime对象表示时间的分钟。范围为0到59GetSecond 获取CTime对象表示时间的秒。范围为0到59。GetDayOfWeek此函数的返回值表示CTime对象代表的是星期几,1表示是周日,2表示是周一,以此类推日期控件(Date Time Picker): CString For

24、mat(LPCTSTR pszFormat) const; 将CTime对象中的时间信息格式化为字符串。%a:周的英文缩写形式%A:周的英文全名形式%b: 月的英文缩写形式。%B:月的英文全名形式。%c: 完整的日期和时间。%d:十进制形式的日期(01-31)。%H:24小时制的小时(00-23)。%I: 12小时制的小时(00-11)。%j: 十进制表示的一年中的第几天(001-366)。%m: 月的十进制表示(01-12)。%M:十进制表示的分钟(00-59)%p: 12小时制的上下午标示(AM/PM)。%S: 十进制表示的秒(00-59)。 %U: 一年中的第几个星期(00-51),星期

25、日是一周的第一天。%W: 一年中的第几个星期(00-51),星期一是一周的第一天。 %w: 十进制表示的星期几(0-6)。%Y: 十进制表示的年。IP地址控件(IP Address):CIPAddressCtrl类主要成员函数:函数声明函数声明功功 能能 ClearAddress清除IP地址控件中的内容IsBlank如果IP地址控件的所有域均为空,返回非0值;否则返回0。SetAddress(BYTE nField0,BYTE nField1, BYTE nField2,BYTE nField3);SetAddress(DWORD dwAddress);设置IP地址控件中的地址值。第一种形式是

26、用4个0255的整数分别设置IP地址各个域的值。第二种形式是用1个长整数设置IP地址值。GetAddress(BYTE& nField0,BYTE& nField1, BYTE& nField2,BYTE& nField3);GetAddress(DWORD& dwAddress);获取IP地址控件中的地址值。第一种形式是把IP地址的4个域填充到用4个引用中。第二种形式是把IP地址填充到1个长整数的引用中。返回值:IP地址控件中非空域的数量。SetFieldFocus把焦点设置在指定的域中。SetFieldRangenField:域索引,取值03;nLower:域的下限;nUpper:域的上限。谢 谢

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号