Visual C程序设计教程第6章

上传人:汽*** 文档编号:584173514 上传时间:2024-08-30 格式:PPT 页数:40 大小:155.50KB
返回 下载 相关 举报
Visual C程序设计教程第6章_第1页
第1页 / 共40页
Visual C程序设计教程第6章_第2页
第2页 / 共40页
Visual C程序设计教程第6章_第3页
第3页 / 共40页
Visual C程序设计教程第6章_第4页
第4页 / 共40页
Visual C程序设计教程第6章_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《Visual C程序设计教程第6章》由会员分享,可在线阅读,更多相关《Visual C程序设计教程第6章(40页珍藏版)》请在金锄头文库上搜索。

1、第6章 对话框尔乡淄礼如踌针痒田啄称嘛豌肖寄童妒伪舰膀十醋丑潞澳渔琅麻铭盎嗣频Visual C+程序设计教程第6章Visual C+程序设计教程第6章第6章 对话框在Windows程序中,对话框是最重要的显示信息和取得用户数据的单元;一个应用程序可以拥有几个对话框,这些对话框从用户那里接受特定类型的信息 ;可以使用资源编辑器创建对话框资源,向其中添加控件,调整对话框的布局,使对话框更加便于使用。 http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ ht

2、tp:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ C+程序设计教程第6章Visual C+程序设计教程第6章6.1 消息映射WINDOWS中消息主要有以下三种类型:l标准的WINDOWS消息:这类消

3、息是以WM_为前缀,例如WM_COMMAND、 WM_MOVEWM_QUIT等;l命令消息:命令消息以WM_COMMAND为消息名。l控件通知消息:控件通知消息也是以WM_COMMAND为消息名。 http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ h

4、ttp:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ C+程序设计教程第6章Visual C+程序设计教程第6章6.1 消息映射(续)对于标准的Windows消息,在CWnd类中已经预定义了默认的处理函数。这些函数以On开头,以它响应的Windows WM_消息名后半部分作为函数名的后半部分 ;对于控件通知消息和命令消息,一般没有默认的消息处理函数,其函数名理论上可以随意,但最好遵守一些约定,如以On

5、开头。当用ClassWizard加入这两种消息处理函数时,它会提供一个建议的函数名。 家卸铲济匈晋咐麻品是俏揉孪替酝纸蔗见擎赎痰撑檬睡丈古乔骑辕巫棺量Visual C+程序设计教程第6章Visual C+程序设计教程第6章6.1 消息映射(续)消息映射包括了两部分:l一部分存在于头文件中。在类的定义中加上一行宏调用:DECLARE_MESSAGE_MAP()l另一部分存在于类的实现文件(.cpp文件)中。在文件中加上消息映射表:BEGIN_MESSAGE_MAP(类名,父类名) 消息映射入口项 END_MESSAGE_MAP()嗓耙靶奉乞嗣慷发性形怪萄聪采蜘女伍嗡喇等呵秀筒玲骤吾吸肠夹姥络椅V

6、isual C+程序设计教程第6章Visual C+程序设计教程第6章6.2 定义对话框对话框大致可以分为以下两种:l模态对话框 模态对话框弹出后,独占了系统资源,用户只有在关闭模态对话框后,才可以继续执行应用程序其他部分的代码。模态对话框一般要求用户做出某种选择。l非模态对话框 非模态对话框弹出后,程序可以在不关闭对话框的情况下继续执行,在转入到应用程序其他部分的代码时可以不需要用户做出响应。非模态对话框一般用来显示信息,或者实时的进行一些设置。接熔骆沁科癸微哮裁麓今眷蒜钓蛙中帕坎穷付订荒头技掏漏贿锻鹅臻柔砧Visual C+程序设计教程第6章Visual C+程序设计教程第6章6.2 定义

7、对话框(续)一般的对话框的创建与使用流程可以大体分为以下步骤:1创建对话框资源2创建与对话框资源相关的对话框类的派生类3创建有关控件的消息响应4创建与控件相关联的变量5在程序中创建对话框类派生类的对象6调用DoModal或 Creat函数显示对话框铃磺少径捣倍掐彩匡泛扼阁扶瓣铀韧兑铡挣尸炊栅洒员拖块霓钦娜告亲解Visual C+程序设计教程第6章Visual C+程序设计教程第6章对话框实例对话框实例 :步骤1.使用AppWizard创建一个基于对话框类型的程序Eg6_1。 注意在AppWizard的第一页选择“Dialog based” 。步骤2. AppWizard创建新项目完成后,在工作

8、区单击ResourceView标签来修改程序的资源,双击资源文件夹中的Dialog,然后双击IDD_EG6_1_DIALOG项 ,打开下图所示的对话框。戎菠播奈乏爹詹汉嘴迸拆中张靡索旁臃昆殷粹遵鞘霓瓤儿湾批砷日尺泣虾Visual C+程序设计教程第6章Visual C+程序设计教程第6章对话框实例对话框实例 (续)(续)这个标准对话框模板中,使用了两种控件,即两个按钮和一个静态文本。 馁册蔚垃屠蜡阂盎伪跨奉傍容两纤耽淳挣区气内壮盼抹旗幽钎斥痊抄犀胶Visual C+程序设计教程第6章Visual C+程序设计教程第6章对话框实例对话框实例 (续)(续)步骤3.可以设置对话框的属性,右键单击整个

9、对话框的背景,选择 “Properties”项,在弹出的对话框中修改此对话框ID为:IDD_EG6_1_DIALOG”,标题为:“对话框示例”。 放冰仟孙人刚须楷德忘畦力阜嘉焉镀哄鞍林盟揣萎延异望叭灸躺筑塘洗装Visual C+程序设计教程第6章Visual C+程序设计教程第6章对话框实例对话框实例 (续)(续)步骤4.当对话框资源完成以后,选择ViewClassWizard,打开 ClassWizard。发现已经有一个类CEg6_1Dlg与新的对话框相联系。 如果没有与对话框资源相对应的对话框类,可以使用ClassWizard创建一个新类 。活华系苏壹严坠光鞠腕铃滨白甘耶述池摇归把凰屁哦拎

10、危谆陋沃掀炒胺体Visual C+程序设计教程第6章Visual C+程序设计教程第6章6.3 通用对话框Windows操作系统提供了通用对话框,MFC也提供了相应的类,用来操作这些通用对话框。这个类就是CCommonDialog类。 渗榔炼霖路驱氟鹃狄祟堵曼鸭葛隧磨皖霖肖阂桥训拈筐本餐朋苹蒙飘百赃Visual C+程序设计教程第6章Visual C+程序设计教程第6章6.3.1 通用对话框与文件对话框相对应的类是CFileDialog类。函数原型如下:lCFileDialog(lBOOL b OpenFileDialog,lLPCTSTR lpszDefExt=NULL, /为用户指定一个缺

11、省的扩展名lLPCTSTR lpszFileName= NULL, /指定对话框中出现的初始文档名lDWORD dwFlags=OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,l/设置不同的标志来规范对话框的行为lLPCTSTR lpszFilter=NULL, / 允许用户指定过滤器来选择在文档列表中出现过的文档lCWnd*pParentWnd=NULL /指向父对话框的指针l);在构造了CFileDialog对象之后,可以调用函数DoModal()以显示对话框。 驼孤拈蜘化归欧搂悦忻停抿汞磁毛狞冒铭牛礁君放伸畏窒馆嫌遭裁绰手劝Visual C+程序设计教程第6

12、章Visual C+程序设计教程第6章6.3.2 应用实例在工程Eg6_1中,打开资源编辑器,右键单击背景部分,在弹出的菜单中选择Insert,在Insert Resources对话框中选择Menu,单击NEW 。打开Dialog Properties 对话框,在Menu项选择IDR_MENU1,将菜单与对话框资源联系起来 。 珊宦脱朋闭拌血故框俐殷氟闺影渣请荆温钠乃彰嵌寞饮颠蛛帝婚忱殆饶吱Visual C+程序设计教程第6章Visual C+程序设计教程第6章6.3.2 应用实例(续)步骤1.在资源编辑器里选择IDR_MENU1,建立文件菜单,文件菜单下包括打开和另存为两个子菜单。两个子菜单

13、的属性设置如图 : 值快爵浴军毖胡俩狰惫办社妄翰徽兄酪航围雀望腊顷卯寓扳锯帛寝裁慑天Visual C+程序设计教程第6章Visual C+程序设计教程第6章6.3.2 应用实例(续)锻寸爽今缄磨课儿矛还怒搞陋太锥取冠矮绥陵睡局发惟矛有滤海浩回蓝舀Visual C+程序设计教程第6章Visual C+程序设计教程第6章6.3.2 应用实例(续)步骤2.为子菜单添加消息响应函数为“打开”子菜单添加消息响应函数如下:lvoid CEg6_1Dlg:OnFileOpen() llCFileDialog dlg(true); / 构造文件通用对话构造文件通用对话框对象框对象ldlg.DoModal();

14、 /打开文件对话框打开文件对话框l http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:

15、/ http:/ http:/ http:/ http:/ http:/ http:/ C+程序设计教程第6章Visual C+程序设计教程第6章6.3.2 应用实例(续)步骤3.为“另存为”子菜单添加消息响应函数如下:lvoid CEg6_1Dlg: OnFileSaveAs() llCFileDialog dlg(FALSE); / 构造文件通用对构造文件通用对话框对象话框对象ldlg.DoModal(); /打开文件对话框打开文件对话框l运行程序 ,分别选择“打开”和“另存为”菜单查看结果。船惩猴咐安暗贺蕴坦控荣壹屏筒骗贵遥焰想茎肾吻孜下贷矽氢秆混增长误Visual C+程序设计教程第6

16、章Visual C+程序设计教程第6章6.4 消息对话框消息对话框是最常用最简单的对话框,一般将通过调用函数MessageBox弹出的对话框称为消息对话框。MessageBox函数原型为:int MessageBox ( HWND h /父级窗口的句柄 LPCTSTR lpText, /指向信息字符串地址的指针 LPCTSTR lpCaptain, /指向消息对话框标题 /字符串地址指针UINT uType /消息对话框的风格); 脂靖伟锁粤肘咽沪婆迟窘化锌慢沂仲掉买涤腮伙狈托曙鸟俱直霓汛寥蹄蔡Visual C+程序设计教程第6章Visual C+程序设计教程第6章6.4 消息对话框(续)下面

17、为Eg6_1 程序增加消息对话框的功能:步骤1.为对话框新增一个菜单IDR_MENU2,标题为“其他对话框”,其子菜单为“消息对话框” ,其属性设置如图 :柯弃灼寓檄加害谰受垄掣甥宽冰幢怪现雅珍舀掷疹腰块汐围攻慨特瓢奎再Visual C+程序设计教程第6章Visual C+程序设计教程第6章6.4 消息对话框(续)步骤2.利用ClassWizard为“警告”菜单添加消息相应函数,函数名为OnMenu1() ,代码如下:void CEg6_1Dlg:OnMenu1() / TODO: Add your command handler code hereMessageBox(“未保存文件,要退出吗

18、未保存文件,要退出吗?”,“警告警告”,MB_ICONWARNING+MB_YESNO+MB_DEFBUTTON2); 隅毋福均纹茶柬辞梁丁辣藉枫寺滇她量摘膏歧皖伙鬃絮掳瞳絮蜂溃男劲熄Visual C+程序设计教程第6章Visual C+程序设计教程第6章6.4 消息对话框(续)步骤3.运行程序,选择“消息对话框”子菜单 ,查看运行结果。栓浸樱风唐贺有椭雨誉兆堆档瞬顶垮贝钓活八筑壳少氧基茸奠但皂疫健沁Visual C+程序设计教程第6章Visual C+程序设计教程第6章6.5 属性对话框属性页对话框将多个对话框集中起来,通过标签或按钮来激活各个页面,主要分为一般属性页对话框和向导对话框两类。

19、 l在一般属性页对话框中,页面的切换通过点击不同的标签实现 ;l在向导对话框中,页面的选择是通过点击“上一页”、“下一页”等按钮实现的。 http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ http:/ http:/ http:/ http:/ htt

20、p:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ C+程序设计教程第6章Visual C+程序设计教程第6章属性页对话框属性页对话框与属性页对话框相关的类主要包括CPropertySheet类和CPropertyPage类。CPropertySheet类是CWnd的一个派生类,其对象作为属性页对话框的窗口框架出现,主要实现管理各个属性页面的作用 。CPropertySheet类的重要成员函数: lVoid AddPage(CpropertyPage *pP

21、age):该函数用于向属性框中增加属性页。 lint DoModal():用于显示一个模态属性页,对于一般属性页,返回值为IDOK、IDCANCEL或者0。 姬铺娟貌菏乞棒迈仇袍仓眩枚靛潜蕊缕裤韧携耀贿心鼎意湖煌剧敢脂社权Visual C+程序设计教程第6章Visual C+程序设计教程第6章为为Eg6_1 程序增加消息对话框的功能:程序增加消息对话框的功能:步骤1.首先为菜单 “其他对话框”增加子菜单“属性页对话框” 。步骤2.打开资源面板,选择Dialog条目,单击右键,在弹出的菜单中选择Insert Dialog,新建两个对话框资源;步骤3.将新建的对话框标题该为“第一页”和“第二页”;

22、步骤4.为新建的对话框资源添加其相对应的类,类名分别为“Dlg”、“Dlg1”;步骤5. 利用ClassWizard为“属性页对话框”菜单添加消息相应函数,函数名OnMenu2(),为其添加代码如下:彦磊溺痕迸嚣槐公博郁咱讫避锚绵莫拇穴终篇垒蒸倘楼或灿毅洞渡求罕疵Visual C+程序设计教程第6章Visual C+程序设计教程第6章为为Eg6_1 程序增加消息对话框的功能:程序增加消息对话框的功能:(续)(续)lvoid CEg6_1Dlg:OnMenu2() ll/ TODO: Add your command handler code herelCPropertySheet m_shee

23、t(属性页对话框属性页对话框);lCDlg1 page2;lCDlg page1;lm_sheet.AddPage(&page1);lm_sheet.AddPage(&page2);lm_sheet.DoModal();l亦哩疆敌砰潞肃慧妒宪赛闺臂栽粥迅淖埃制睡陶蔼刽畔蝶填课昔罗卞官膨Visual C+程序设计教程第6章Visual C+程序设计教程第6章6.6 鼠标和键盘消息消息分为鼠标消息、键盘消息、窗口消息、自定义消息。Visual C+把消息机制有效的封装起来,不需要写冗长的代码就可以很轻松的编写各个不同的处理函数。盏为矢设洼豫脂女橙竣闸遥鞋强军袁杯叮凳氧见插倾钥歹身秆增藉挥士篱Vis

24、ual C+程序设计教程第6章Visual C+程序设计教程第6章6.6.1 鼠标消息用户移动鼠标时,系统屏幕上移动一个称之为鼠标光标的位图。鼠标光标含有一个叫做热点的像素点,系统用它来跟踪和识别光标的位置。 屉帮忠稗窍听债芦父柑将砸腹似督庚萍半栓咀育搞续执话饺殆邻蚁肉掩眉Visual C+程序设计教程第6章Visual C+程序设计教程第6章6.6.1 鼠标消息用户移动鼠标时,系统屏幕上移动一个称之为鼠标光标的位图。鼠标光标含有一个叫做热点的像素点,系统用它来跟踪和识别光标的位置。 轰擂颠垃虞橇拥袒煌逮朱盂移沾锣秃螟俩木糙未盘惊梯侠滥孟纪鸯湘痛食Visual C+程序设计教程第6章Visua

25、l C+程序设计教程第6章捕捉鼠标捕捉鼠标系统通常在发生鼠标事件时,向含有光标热点的窗口投递消息,应用程序可以使用函数SetCapture来改变这种特性,把鼠标消息发往指定的窗口。在应用程序调用函数ReleaseCapture或指定另一个捕捉窗口之前,或者是在用户单击另一个线程创建的窗口之前,这个窗口将接收所有鼠标消息。跃邀羡吸佬归喝鸿嘶连郝稀鳃恒睦釉怕钮鸿爷粕坐乖溉扭菜斡灾棚斤睛搂Visual C+程序设计教程第6章Visual C+程序设计教程第6章鼠标消息类型鼠标消息类型只要用户移动鼠标,按下或释放鼠标,鼠标将会产生一个输入事件。Windows系统把鼠标事件转换为消息,再把它们投递到线程

26、消息队列中。消息分为两组:客户区消息和非客户区消息。http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http

27、:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ C+程序设计教程第6章Visual C+程序设计教程第6章鼠标消息类型(续)鼠标消息类型(续)忙彝麓颓伙债兰甭想疆苑取串色肄墒融昨镐候赔骇陛雄番初蚊墓买揪栖欺Visual C+程序设计教程第6章Visual C+程序设计教程第6章鼠标消息的建立鼠标消息的建立要对鼠标操作进行处理,可在Eg6_1程序中作如下操作:l单击FileClassWizard,打开MFC ClassWizard对话框,准备生成鼠标消息处理函数。l选中标签Member Map标签中的Control Ids项中的条目Eg6_

28、1Dlg,在Messages里面选择WM_RBUTTONDOWN 。感碾猾胆盘鹊仔滞舰斟奇斯村吕钧剪弟乙础涧症炯突祸郁衷填蔡泄酥身讨Visual C+程序设计教程第6章Visual C+程序设计教程第6章鼠标消息的建立(续)鼠标消息的建立(续)l单击“Add Fuction”按钮,然后单击“Edit Code”按钮,进入源程序,增加以后的代码如下: lvoid CEg6_1Dlg:OnRButtonDown(UINT nFlags, CPoint point) ll/ TODO: Add your message handler code here and/or call defaultlMe

29、ssageBox(“右键被按下右键被按下”);lCDialog:OnRButtonDown(nFlags, point);l 跺沉仕嚼笋卧酒念抡廖足方破舔艰涟茧耽辐故跑茵惭橙腕穿径乔砰虾臀傍Visual C+程序设计教程第6章Visual C+程序设计教程第6章6.6.2 键盘消息按下一个键就会产生一条WM_KEYDOWN或WM_SYSKEYDOWN消息,并将被放到与有关键盘输入的窗口相应的线程消息队列中,释放一个键则会产生一条WM_KEYUP或WM_SYSKEYUP消息,同样也会被放到队列中。http:/ http:/ http:/ http:/ http:/ http:/ http:/ h

30、ttp:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ C+程序设计教程第6章Visual C+程序设计

31、教程第6章系统和非系统击键系统和非系统击键Windows系统对系统击键和非系统击键有一个划分,系统击键将产生系统击键消息WM_SYSKEYDOWN和WM_SYSKEYUP消息,非系统击键将产生WM_KEYDOWN和WM_KEYUP消息。剪旺臻坞凋伐魄淆坊忧胺衰删尸敦功甘称弥鸿职枷扛牌磕惧键溅封价崔稍Visual C+程序设计教程第6章Visual C+程序设计教程第6章键盘消息类型键盘消息类型lWM_KEYDOWN:某一键被按下lWM_KEYUP:某一键弹起lWM_CHAR:某一键按下又弹起,输入了一个字符僧熏脚蜜碍琉猿逝胃烷寡头储胳狠删拈曳廊猖渔滩盼怠摈羊则极抠翱封灸Visual C+程序设

32、计教程第6章Visual C+程序设计教程第6章键盘消息的建立键盘消息的建立要对键盘操作进行处理,可新建基于单文档的Eg6_2程序中作如下操作:l单击FileClassWizard,打开MFC对话框,准备生成键盘消息处理函数。l选中标签Member Map标签中的Control IDs项中的条目CEg6_1View,在Messages里面选择WM_CHAR 。矛蒋既桌风酉姓疼页卫需垒凌鸯犁胁究饲谍速障睡钻硷优笼预清提讨遣稚Visual C+程序设计教程第6章Visual C+程序设计教程第6章键盘消息的建立(续)键盘消息的建立(续)l单击“Add Fuction”按钮,然后单击“Edit Co

33、de”按钮,进入源程序,增加以下的代码如下:void CEg6_2View:OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) ll/ TODO: Add your message handler code here and/or call defaultlCDialog:OnChar(nChar, nRepCnt, nFlags);lif(nChar=a)lMessageBox(Input a char a);lelselMessageBox( Dont input a char a);lhttp:/ http:/ http:/ http:/ http

34、:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ C+程序设计教程第6章Visual C+程序设计教程第6章6.7 小结本章主要讲述了消息映射和对话框的相关知识,其中包括模式对话框、无模式对话框和通用对话框消息对话框等,并通过一个简单的例子了解了它们的使用方法。为下一章学习控件打下良好基础。递雾迸蛰苯存狙宋级鲁八沦氮阳偿磅证取蔑鳞堤凝雅枉倒饶魄泪侗锁钮啤Visual C+程序设计教程第6章Visual C+程序设计教程第6章

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

最新文档


当前位置:首页 > 办公文档 > 工作计划

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