6vc对话框与控件课件_第1页
6vc对话框与控件课件_第2页
6vc对话框与控件课件_第3页
6vc对话框与控件课件_第4页
6vc对话框与控件课件_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

6vc对话框与控件1、舟遥遥以轻飏,风飘飘而吹衣。2、秋菊有佳色,裛露掇其英。3、日月掷人去,有志不获骋。4、未言心相醉,不再接杯酒。5、黄发垂髫,并怡然自乐。6vc对话框与控件6vc对话框与控件1、舟遥遥以轻飏,风飘飘而吹衣。2、秋菊有佳色,裛露掇其英。3、日月掷人去,有志不获骋。4、未言心相醉,不再接杯酒。5、黄发垂髫,并怡然自乐。第六章对话框与控件河北经贸大学信息技术学院VC++系统开发2本章导读本章通过开发一个计算器和口令对话框程序,掌握Button、EditBox和StaticText控件的使用方法其他常用控件的使用技巧,如ListControl基于对话框的应用程序的编程技术模式对话框、非模式对话框和通用对话框的设计与调用。3目前,初三中考一轮复习工作正在如火如荼地开展,如何提高复习课的有效性,追求一种“让书本知识活起来,让学生在课堂中动起来,让学生所学知识用得来”的高效课堂,让学生从“学会”实现“会学”的转变是所有教师、教学研究人员研究的课题。前几天,围绕这个话题,我们区开展了一次物理主题研训活动,以课例为抓手开展研究,活动中呈现了一节《压强》复习课,结合这节课的两个环节,本人谈谈自己的看法。环节一:展示交流这节课围绕固体压强的相关知识进行复习,展示交流环节主要是对学生自主复习的情况进行反馈,教师设计了预习学案,主要包括两个方面的内容:一是知识梳理,以填空的形式呈现;二是对“探究影?压力作用效果的因素”的实验的复习,是这样设计的:实验探究:探究“压力作用效果与哪些因素有关”,请补充方案一,完成方案二。课堂上,教师利用投影展示了一位学生的预习学案,并请学生介绍了所设计的两种方案,是利用压力小桌、沙槽和重锤探究压力和受力面积对压力作用效果的影响,教师按照方案在磁性黑板上摆放器材,没有利用实物演示。完了之后,问:有没有不同方案?另一学生回答了用海绵、装有水的瓶子进行实验的方案,还上去在磁性黑板上用器材的模型进行了演示,完了之后,教师问:对探究性实验应关注哪些方面?通过学生的回答和教师的补充,要求学生从实验方法、实验目的、实验步骤、实验现象、实验结论对实验进行理解。讲完之后,教师又投影展示了一位学生的预习学案,叫其他学生看看有没有问题,结束后,才进行下一环节的课堂教学,这一环节大约用时16分钟。这一环节,我的思考:有效的做法:1.教师精心设计预习学案,有的放矢。利用学案,引导学生回顾基础知识、重点实验,提高了课堂的利用率,也锻炼了学生的自主学习能力。在探究活动的学案设计中,方案一教师给出了提示语句,方案二没给,这样的设计能帮助学生抓住探究实验的重点,有效解决了学生表述时的困难。2.注意方法的点拨。在实验的复习中,提醒学生要从实验方法、实验目的、实验步骤、实验现象、实验结论这几个方面进行,关注实验过程,真正理解实验。需改进之处:1.本环节的教学节奏把握不是太好,用时太长。该班级是一个基础很好的班级,在“探究影响压力的作用效果的因素”的实验复习中,第一位学生汇报很好,第二位学生就不用再上去汇报了,只需将他的预习学案投影展示一下就行了。另外,在小结之后,发现了一位学生的学案做的有个小问题,又投影讲评了一下,费了时间,显得有点拖沓了。2.实验的拓展不够,这是一个好的班级,可以在学生对实验进行了自主复习,已经掌握不错的情况下,进行拓展,借助近两年相关的中考题考查学生的能力,提高教学的深度。3.本环节只展示了学生对探究实验的自主复习情况,而对基础知识的复习情况未顾及。我认为,大部分学生对基础知识的掌握存在问题,为了提高课堂的利用率,教师可以课前对学生基础知识的掌握情况进行了解,通过批改预习学案,发现问题,课堂利用很短的时间展示有问题的学案反馈一下即可。环节二:知识整合应用教师根据刚才的活动情境,编制如下例题,学生应用知识解决问题。例题:重锤的质量m1为0.3kg,底面积S1为8cm2,放在水平放置的桌面面积S2为100cm2的四钉小桌上。四钉小桌的质量m2为0.125kg,一个钉脚的底面积S3为12mm2,(g取10N/kg)(1)计算重锤的重力G1;(2)计算重锤对四钉小桌的压力F1和压强p1,并画出重锤对四钉小桌的压力示意图;(3)计算四钉小桌对沙子的压力F和压强p。学生完成例题,教师巡视指导,并选择做得较快较好的一位学生的学案投影讲评,学生做得基本没有问题,不过还是没来得及做完,教师根据学生做的情况进行了评价,在评价过程中,教师用实物演示,强调了如何判断受力面积。完了后,请学生小结:压强计算时要注意什么问题?学生回答:单位换算。教师就把1cm2=10-4m2,1mm2=10-6m2板书在黑板上,然后提醒学生还要注意受力面积和压力大小的判断,在水平面上F=G,若放在斜面上,F≠G,讲完之后,学生接着思考下面问题:(4)若将重锤沿水平方向切去一半,则剩下的一半对四钉小桌的压强如何变化?沿竖直方向切去一半呢?由(4)问,过渡到下一知识点的复习:如何改变压强。学生小结方法后,教师给出了课本上的图片,由学生判断是用什么方法?如何改变压强的?完成了中考指导书上的相关题目,还给出了这样一个例题让学生判断对错。这一环节,我的思考:有效的做法:1.精心设计例题,呈现方式自然。例题的设计有梯度,思维有含量,考查的知识点全面,环环相扣,起到承上启下的作用。2.抓住重点,有效突破难点。教学中,抓住学生容易出问题的地方,如,压力大小和受力面积的判断、单位的换算等,通过提问和演示活动的方式加以强调,并及时小结。3.有效利用物理课本。复习中,教师展示课本图片让学生判断压强的变化情况,抓住课本资源,这种做法值得借鉴。需改进之处:给学生思维的空间不够。可能是前面一个环节的耽误,教师在给学生完成例题时,比较仓促,较快的学生都没做好就讲评了。讲评中,一些注意点的提炼,未给学生充分的时间思考、回答,基本以教师为主。通过这节课的学习反思,再结合自己多年在初三教学一线的经验,对如何提高物理一轮复习的有效性,有这样的一些思考:1.重视课本。在一轮复习中,教师要重视物理课本,有效利用课本中的资源。经常看到一些教师上复习课时课本也不带,就不要说用了,实际上教师的行为潜移默化地影响着学生,你轻视一分,学生就会轻视十分,如果你在上课的过程中经常展示利用一下课本中的图片、题目、实验等,学生自然而然地就会回归到课本了。2.激发兴趣。教师要激发学生的学习兴趣,对学生来说,中考复习过程是一个很辛苦的过程,压力大,任务重,每天重复着差不多相同的事:上课、写作业、考试,很容易厌倦,失去学习的热情,所以,作为一个老师,复习中就不能一成不变,要善于“玩花样”,多学习,多动脑,根据不同的内容,创设不同的情境,每天有点新意,让学生每天能耳目一新,就能激起学生的兴趣了,学生有了兴趣,学习就能主动,课堂的效率自然就高了。3.精选好题。一轮复习要在较短的时间内完成十八章内容,时间紧,内容多,所以我们没有时间搞题海战术,唯一能做的就是提高课堂效率,虽然课堂的长度我们不能增加,但我们能增加课堂的宽度,精心编选好题、典型题让学生练习,通过一题多练、一题多变而实现一题多效。4.敢于放手。复习课相对新授课来说,更应该让学生成为主角,所以教师要敢于放手,课堂上,教师要惜字如金。练习中的错误要让学生自己找出来,需注意的问题要让学生讲出来,方法规律要学生自己提炼出来,从学生嘴里说出来的东西,比教师喋喋不休地讲几遍效果都好,所以,教师要认清这个事实,放手让学生“自己的课堂自己做主”,相信给学生一个舞台,他们会还我们一个精彩!0092-01在初中语文教学过程中培养学生的自主学习能力是现代教育的要求。目前,课堂教学效率低下仍然是语文教学中的常见现象,要想改变这种局面,就要重视学生自主学习能力的培养。自主学习能力的培养需要师生共同协作,改变传统的教学方式,在民主基础上建立和谐、融洽的课堂教学环境,充分调动学生学习的积极性和主动性,运用多种评价方式促进学生全面发展。一、给予自主学习时间自主学习相对于我们平时课堂中常见的机械学习来说具有更大的灵活性。教师应该把课堂交给学生,让学生有更多的机会与作者对话,与主人公交流。教师作为教学活动的引导者,要引导学生提高学习的自觉性,掌握语文学习规律,养成良好的自主学习习惯。教师要保障学生的自主学习时间。在课堂教学中,并非是教师讲授得越多,学生掌握得就越多,这两者之间实际上并没有太大的联系。学习是知识体系构建的过程,让学生自主地学习、独立地思考、创新性地解决问题,能取得事半功倍的教学效果。改变教育观念不能只停留在口头上,而应该放手让学生去做,相信学生,最大限度地激发学生的求知欲。例如,在教学一篇课文前,教师不要过多地干涉学生,而要让学生在课前通过搜集资料等方式了解作者的生平与文章的写作背景,在课堂上给予学生充足的时间通读全文、提出问题、发表见解,随后教师再带领学生更深入地学习课文。二、营造自主学习氛围在教学活动中,积极向上的学习氛围能在很大程度上激发学生的学习兴趣。教师应营造自由和谐的学习环境,帮助学生在和谐的学习氛围中自主地学习,进而有效地提升学生的学习效率。教师应如何营造自主学习氛围呢?首先,教师要充分了解每一名学生的个体差异,根据学生的特点设计符合学生实际学习能力的学习内容。其次,教师应根据学习内容创设科学合理的教学情境,难度要适当,给予学生足够的表现机会,最大限度地激发学生的求知欲与想象力。同时,教师要鼓励学生大胆地质疑,引导学生针对教学内容提出问题,并进行大胆的思考与讨论,产生思维的碰撞。最后,教师要给予学生足够的课堂时间,让学生以小组的形式讨论探究。不论学生的回答是否到位,思考是否全面,教师首先都应该予以鼓励。三、培养自主学习习惯教育的最终目的是为了培养学生的学习能力,培养学生自主学习的习惯尤为重要。教师要着重培养学生课前预习、合作讨论、课后预习的良好学习习惯。课前预习是教学成功的第一步,在让学生进行预习的过程中,教师应要求学生通过搜集相关资料了解作者生平与本篇课文的写作背景,通读课文,将课文中的生字词标注出来,通过查阅字典或与同学讨论等方式理解课文,大致理解文章的中心思想,并将自己的疑问记录下来。其次,鼓励学生合作讨论,可以整理全班学生在预习过程中的疑惑,筛选出有价值的问题,让学生分小组进行讨论或进行独立思考。最后,复习是巩固、深化所学知识的重要环节,尤其是对于一些需要背诵的课文来说,课后复习更是不可缺少。教师要让学生养成良好的复习习惯,引导学生对已学过的知识进行整理总结,构建起知识体系。四、提升自主学习能力古语有云:“授人以鱼不如授人以渔。”也就是说,方法远比结果重要。教师既要将知识传授给学生,又要将学习方法交给学生。在教学中,教师出了多大的力,讲授了多少知识并不是最重要的,最重要的是学生在学习中实际上掌握了多少知识,是否掌握了学习方法。而在一堂语文课中,教师需要做的就是引导好学生,把握课堂教学节奏,让学生自主探索,学会举一反三。在阅读教学中,教师不要过多地干涉学生,应先让学生对课文进行通读,并让学生从不同的角度发表自己的看法。在写作训练的过程中,教师要鼓励学生多阅读一些文学著作,提升自身的文学底蕴,在平时的阅读过程中随时记下自己的感悟,而对于文笔好的学生可以多鼓励其投稿。总之,教师应给予学生足够的独立思考的时间与空间,创设自由和谐的教学情境,让学生自主学习,让学生在语文课堂上学到真正有用的知识。(责编秦越霞)第六章

对话框与控件河北经贸大学信息技术学院VC++系统开发2本章导读本章通过开发一个计算器和口令对话框程序,掌握Button、EditBox和StaticText控件的使用方法其他常用控件的使用技巧,如ListControl基于对话框的应用程序的编程技术模式对话框、非模式对话框和通用对话框的设计与调用。3本章主要内容通用对话框常用控件介绍MyCalculator程序开发MyCalculator程序口令对话框46.1对话框概述对话框对话框编辑器对话框编程控件的创建与使用56.1.1对话框P154可视化的界面,包含:按钮、文本框、复选框等。对话框是一个窗口,控件也是一个窗口对话框的两种消息:

WM_INITDIALOG:数据成员的初始化

WM_COMMAND:控件的消息MFC对对话框的支持:对话框从CDialog基类中派生一个类,MFC的CDialog类封装了用于对话框的显示、关闭等常用操作的许多功能函数;MFC程序框架;ClassWizard类向导公共对话框:P154表6-1对话框控件及其CWnd成员函数表6-2/表6-3模式对话框和无模式对话框6对话框的类型P1561.模式对话框

弹出后,用户必须作出相应得操作,否则不可以继续。用途广。2.无模式对话框

弹出后,一直保留在屏幕上,其他操作可继续,用的时候激活对话框即可。两者的终止函数不一样:Cdialog::EndDialog模式CWnd::DestroyWindow无模式

所占内存空间不同:模式对话框:由系统自动分配内存,当对话框退出时,对话框对象自动删除。无模式对话框:则需要用户来指定内存,退出时用户删除对话框对象76.1.2使用对话框编辑器添加、选取、删除对话框控件;改变控件的Tab键次序;利用基准线、标尺及布局工具进行控件的布局;测试所编辑的对话框的性能。

8对话框编程步骤

p160-164添加对话框资源在单文档项目MyHello中,Insert-〉resourc(ctrl+R)-〉Dialog编辑对话框属性向对话框内添加控件

——添加/选取/控件的布局/测试对话框使用ClassWizard,为对话框资源创建一个新类CMyDlg,为控件进行消息映射

afx_msgvoidOnButton1();//向导完成

ON_BN_CLICKED(IDC_BUTTON1,OnButton1)//向导完成在OnButton1()中添加用户代码MessageBox("欢迎进入对话框的设计!");在程序(MyHello.cpp)中使用模式对话框

#include“MyDlg.h”

CMyDlgDlg;//MyHelloApp::InitInstance()Dlg.DoModal();96.1.4控件的创建与使用p164-168步骤如下:将控件添加到对话框模板中在对话框类中增加与控件相关联的数据成员根据需要在对话框类中定义处理这些数据的成员变量在对话框的OnInitDialog函数体中,为控件设置一些初始条件m_MyBtn.SetWindowText("欢

迎");在对话框的控件消息处理函数中,添加控件处理代码

10访问控件P168关联变量ClassWizard添加

控件变量——控件类对象,一个窗口对象

m_MyBtn.SetWindowText(“这是一个命令按钮”);

值变量——普通类型CString、int…DDX对话数据交换与DDV对话数据验证

UpdateData(TRUE);//对于值变量,控件中的值传递变量UpdateData(FALSE);控件窗口指针CEdit*pEdFirst=(CEdit*)GetDlgItem(ID_FIRSTNAME);例如 DDX_Text(pDX,IDC_PASSWORD_EDIT,m_password)11综合示例一模式对话框与无模式对话框的编程(口令对话框)为MyHello程序添加”口令”对话框121.对话框类型无模式对话框模式对话框不允许用户在关闭对话框之前切换到应用程序的其他窗口允许用户在该对话框与应用程序其他窗口之间的切换预备知识对话框是实现人机交互的重要手段,对话框不但可以接收消息,而且可以被移动和关闭.13创建对话框资源,并添加各种所需控件;创建对话框类(CDialog)的派生类,并将其与已创建的对话框资源相连接;在派生类中添加所需的数据成员变量、数据交换函数(DDX)和数据验证函数(DDV);为对话框各控件添加消息响应函数,编写程序代码;为对话框的调用者添加对话框的调用。对话框设计方法14对话框的工作原理Public:数据成员文档对象xxxxxxxxxxxxxxxxxxxxxxxxxxxx创建对话框模板1数据交换和验证2定义对话框类和公有成员变量3运行对话框,修改文档对象4

休息对话框设计方法15调用模式对话框CPasswordDialogm_Dlg;//声明对话框对象m_Dlg.DoModal();//显示模态对话框用户必须单击”确定(OK)“或”取消(Cancel)”才能切换到其它窗口或对话框。对话框的调用16调用非模式对话框在视图类的头文件中添加CPasswordDialog的指针变量:

CPasswordDialog*m_Dlg;//指针

在视图类的构造函数中将其初始化

m_Dlg=NULL;

在调用函数中添加如下代码

if(m_Dlg==NULL)

{m_Dlg=newCPasswordDialog;//动态创建

m_Dlg->Create(IDD_PASSWORD_DIALOG,this);

}

m_Dlg->ShowWindow(SW_SHOW);//显示非模态对话框对话框的调用17编辑对话框资源ButtonID:IDOK;Caption:确认ButtonID:IDCANCEL;Caption:取消StaticText:ID:IDC_STATICCaption:请输入口令:18创建对话框类右键单击对话框→ClassWizard→AddingClass对话框→Createanewclass

Name:CPasswordDialog

Baseclass:CDialog

DialogID:IDD_PASSWORD_DIALOG

创建“口令”对话框类类向导创建了一个类(CPasswordDialog),两个文件(PasswordDialog.h和PasswordDialog.cpp)19“MemberVariable”标签页

Classname:CPasswordDialog

ControlIDs:IDC_PASSWORD_EDIT单击”AddVariable……”,显示AddMemberVariable对话框Variablename:m_PasswordCategory:ValueVariabletype:CString为编辑框引入变量创建: DDX_Text(pDX,IDC_PASSWORD_EDIT,m_password)20修改应用程序类的InitInstance()函数BOOLCMyHelloApp::InitInstance(){ ……CPasswordDialogDlg;//声明CPasswordDialog类的对象if(Dlg.DoModal()!=IDOK)returnfalse;//用户按下的不是"确认"按钮if(Dlg.m_Password!="123456")

//口令设为字符串"123456" {AfxMessageBox("口令错误,确认后将退出程序"); returnfalse; }returnTRUE;}调用“口令”对话框在MyHello.cpp头部加入包含语句

#include”PasswordDialog.h”模式对话框的调用21例如,在MyHello程序中,添加一菜单项,当点击该菜单项时,将口令对话框以非模式显示:显示非模式对话框编辑菜单

ID:ID_MODALLESS

Caption:非模式对话框22在视图类的头文件中添加CPasswordDialog的指针变量CPasswordDialog*m_pModallessDlg;需要在MyHelloView.h中加入:#include"PasswordDialog.h"构造函数:m_pModallessDlg=NULL;//初始化指针析构函数:if(m_pModallessDlg!=NULL)deletem_pModallessDlg;//释放空间修改视图类的构造函数和析构函数

if(m_pModallessDlg!=NULL){

m_pModallessDlg->DestroyWindow();m_pModallessDlg=NULL;}或者:23编写调用非模式对话框代码“View/ClassWizard/MFCClassWizard”ObjectIDS:ID_NOMODALLESSClassname:CMyHelloViewMessages:COMMAND添加了消息响应函数”OnModalless()”,单击”EditCode”编写代码如下:if(m_pModallessDlg==NULL){m_pModallessDlg=newCPasswordDialog;//动态创建

m_pModallessDlg->Create(IDD_DIALOG1,this);}m_pModallessDlg->ShowWindow(SW_SHOW);//显示非模态对话框24对话框控件和相关MFC类(P155,表6-2)用于对话框控件的CWnd成员函数(P155,表6-3)对话框编辑器控件工具箱:”右击工具栏/control”

“Tools/Customize…/ToolsBars/Control”修改控件的Tab键次序:”编排(Layout)/TabOrder”;或Ctrl+D按新的次序依此用鼠标单击各个控件,新的Tab键次序即可生成.控件布局工具栏:P159,图6-5,设置Layout/GuideSetings测试对话框:Ctrl+T技术要点总结:25改变对话框属性

(P161)为控件设置初始条件(P165(4))

在对话框的OnInitDialog函数体中,为控件设置初始条件按钮控件的属性说明(P167)技术要点消息对话框(P204)对话框左上角在父窗口中的坐标(居中)266.2windows标准控件CStatic类控件的使用CEdit类控件的使用CButton类控件的使用CListBox类控件的使用CComBox类控件的使用27windows标准控件属性方法事件对话框类的成员变量-控件关联变量valueControl28访问控件的两种方法采用控件关联变量值变量m_iA=10;UpdateData(false);

控件变量m_EditA.SetWindowText(“10”);获取控件窗口指针

CEdit*pEditName=GetDlgItem(IDC_NAME);

pEditName->SetWindowText(“ZHANG”);

SetDlgItemText(IDC_NAME,m_Name);GetDlgItemText(IDC_NAME,m_Name);291.CStatic类控件的使用StaticText:静态文本——作为标签GroupBox:分组框——框架Pictrue:静态图片——显示位图或分割其他控件默认ID为IDC_STATIC

只有CStatic类控件的ID号可以重复详见P16930为对话框添加背景图片使用Picture控件:方法简单,一定保证TabOrder为1映射WM_CTLCOLOR消息,在OnCtlColor函数中返回一个图形刷子:映射WM_PAINT消息,在OnPaint函数中选入位图为对话框设置一幅背景图(Bitmap)有几种最常用的方法:31Picture控件WM_CTLCOLORWM_PAINT32HBRUSHCBitmapBKDlg::OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor){if(nCtlColor==CTLCOLOR_DLG)return(HBRUSH)m_BKBrush.GetSafeHandle();returnCDialog::OnCtlColor(pDC,pWnd,nCtlColor);}CBitmapBKDlg::CBitmapBKDlg(CWnd*pParent/*=NULL*/):CDialog(CBitmapBKDlg::IDD,pParent){ …….. CBitmap*pBitmap=newCBitmap; //ASSERT(pBitmap); pBitmap->LoadBitmap(IDB_BACKGROUD);

m_BKBrush.CreatePatternBrush(pBitmap); deletepBitmap;}利用对话框的OnCtlColor()CTLCOLOR_BTNCTLCOLOR_DLGCTLCOLOR_EDITCTLCOLOR_LISTBOXCTLCOLOR_MSGBOXCTLCOLOR_SCRLLBARCTLCOLOR_STATICPrivate:CBrushm_BKBrush33voidCxxxDlg::OnPaint(){ CPaintDCdc(this);//devicecontextforpainting CRectrc; GetClientRect(&rc);//获取客户窗口区域 CBitmap*BackBitmap=newCBitmap;//背景位图 BackBitmap->LoadBitmap(IDB_BITMAP1);

CDC*m_dc=newCDC;//内存设备环境 m_dc->CreateCompatibleDC(&dc);//兼容 m_dc->SelectObject(BackBitmap);//位图选入环境 dc.BitBlt(0,0,rc.right,rc.bottom,m_dc,0,0,SRCCOPY); deletem_dc;//释放deleteBackBitmap;//释放}利用对话框的OnPaint()34CDC绘图操作CDC::BitBlt

从源设备环境拷贝一幅位图到当前设备环境BOOLBitBlt(intx,inty,intnWidth,intnHeight,CDC*pSrcDC,intxSrc,intySrc,DWORDdwRop);CDC::StretchBlt

从源设备环境(矩形)拷贝一幅位图到当前设备环境(矩形),如果必要,延伸或压缩BOOL

StretchBlt(

int

x,

int

y,

int

nWidth,

int

nHeight,

CDC*

pSrcDC,

int

xSrc,

int

ySrc,

int

nSrcWidth,

int

nSrcHeight,

DWORD

dwRop

);352.CEdit类控件的使用用来输入和编辑文本单行文本多行文本Multiline口令详见P17036CEdit类控件的属性MultilineNumberWantreturnPasswordRead-onlyUppercaseLowercase37CEdit类控件的方法口令设置:

SetPasswordChar(#);选择文本输入/输出文本DDX技术,为编辑框添加值变量,通过使用UpdateData()完成控件与变量之间的数据传送。

定义CEdit类的对象或对象指针(P168)CWnd::SetWindowText();CWnd::GetWindowText();38CEdit类控件的方法CanUndo()Clear()Copy()Cut()EmptyUndoBuffer()GetFirstVisibleLine()GetModify()GetPasswordChar()GetRect()GetSel()LimitText()LineFromChar()LineLength()LineScroll()Paste()ReplaceSel()SetModify()SetPasswordChar()SetReadOnly()SetSel()Undo()39CEdit类控件的事件(P171表6-11)EN_CHANGEEN_ERRSPACEEN_HSCROLLEN_KILLFOCUSEN_MAXTEXTEN_SETFOCUSEN_UPDATEEN_VSCROLL403.CButton类控件的使用(P171)命令按钮(Pushbuttons)单选按钮(Radiobuttons)复选按钮(Checkboxes)41命令按钮

事件:BN_CLICKED方法:SetWindowText(字符串)ShowWindow(SW_SHOW/SW_HIDE);EnableWindow(false/true);

例6-1p17242一元二次方程求解voidCEx6_2Dlg::OnButton1(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData();intdisc;doublere,im;disc=m_B*m_B-4*m_A*m_C;re=(double)-m_B/(2*m_A);im=(double)sqrt(abs(disc))/(2*m_A);if(disc>=0){m_X1.Format("X1=%6.2f",re+im);m_X2.Format("X2=%6.2f",re-im);}

else{

m_X1.Format("X1=%6.2f+%6.2fi",re,im);m_X2.Format("X2=%6.2f-%6.2fi",re,im);} UpdateData(FALSE);}43单选按钮属性:Group:与Taborder管理一组控件事件BN_CLICKED检查是否选中的方法(1)IsDlgButtonChecked(ID)(2)连接变量的值:0,1,2,3.....注意事项:P172(1)(2)(3)44复选框属性事件检查是否选中的方法(1)IsDlgButtonChecked(ID)(2)连接变量的值:true/false例6-2(P174)45

一个简单的整数运算计算器(演示)综合示例二一个简单的整数计算器46编辑框与按钮类控件作业

一个功能较丰富的计算器程序设计

休息演示47开发MyCalculator程序创建工程:使用MFCAppWizard创建应用程序的基本框架;可视化设计:制做Windows风格的图形用户界面和各种控件;编写程序代码。用VC++6.0编写MFC应用程序,一般有三个步骤:48“File/New/Projects/MFCAppWizard[exe]/工程名:MyCalculator,位置:E:\MyVC\ch6”“选择Dialogbased/Next,标题:计算器“,其它接受默认设置;”Finish”完成一、创建工程49“ProjectWorkspace”窗口,选择“ResourceView”标签,双击Dialog下的“IDD_MYCALCULATOR_DIALOG”从“IDD_MYCALCULATOR_DIALOG”对话框删除“OK”和“Cancel”及“TODO文本”

。弹出控件工具箱(右击工具栏,选择Controls);向对话框添加按钮(Button)控件;右击Button1,选择属性二、可视化设计50类似方法按右表定义,编辑对话框资源。设计结果如下图:对象ID属性Caption属性ButtonIDC_BUTTON00ButtonIDC_BUTTON11………………ButtonIDC_BUTTON99ButtonIDC_BUTTON_POINT.ButtonIDC_BUTTON_SIGN+/-ButtonIDC_BUTTON_ADD+ButtonIDC_BUTTON_MINUS-ButtonIDC_BUTTON_MUTIPLY*ButtonIDC_BUTTON_DIV/ButtonIDC_BUTTON_CLEARCButtonIDC_BUTTON_SQRTsqrtButtonIDC_BUTTON_RECI1/xButtonIDC_BUTTON_EQUAL=EditBoxIDC_DISPLAY(只读)Edit1.可视化设计51“View/ClassWizard/MemberVariable”Classname:CMyCalculatorDlgCtrolIDS:IDC_DISPLAYCategory:Value单击Addvariable…进行如下设置2.为编辑框“IDC_DISPLAY”引入变量52添加变量

在“CMyCalculatorDlg.h”中,为CMyCalculatorDlg类加入四个变量(protected):3.为CMyCalculatorDlg类添加数据成员

doublem_first;//存储一次运算的第一个操作数及一次运算的结果doublem_second;//存储一次运算的第二个操作数CStringm_operator;//存储运算符doublem_coff;//存储小数点的系数权值53在构造函数中初始化成员变量CMyCalculatorDlg::CMyCalculatorDlg(CWnd*pParent/*=NULL*/):CDialog(CMyCalculatorDlg::IDD,pParent){ //{{AFX_DATA_INIT(CMyCalculatorDlg) m_display=_T("0.0"); m_first=0.0; m_second=0.0; m_operator=_T("+"); m_coff=1.0; //}}AFX_DATA_INIT //NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32 m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);}注此函数在“CMyCalculatorDlg.cpp”中54用向导添加

“View/ClassWizard/MessageMaps”

Classname:CMyCaculatorDlgObjectIDS:IDC_BUTTON0Message:BN_CLICKED

单击”AddFunction”4.为Button按钮的BN_CLICKED事件添加响应函数BEGIN_MESSAGE_MAP(CMyCalculatorDlg,CDialog) //{{AFX_MSG_MAP(CMyCalculatorDlg) ……

ON_BN_CLICKED(IDC_BUTTON0,OnButton0) …… //}}AFX_MSG_MAPEND_MESSAGE_MAP()直接在MyCalculatorDlg.cpp中添加,如下

55在”MFCClassWizard”对话框的”MessageMaps”标签页,选中消息响应函数,单击“EditCode”三、编写程序代码在工作区的”ClassView”下,CMyCalculatorDlg类中双击相应的响应函数。直接在MyCalculatorDlg.cpp文件中填写对应函数的函数体。程序代码见演示添加响应函数后,在

MyCalculatorDlg.cpp文件中进行了函数的定义,函数体为空,可用以下几种方法填写代码。56数字”N”的消息响应函数(N=0,1,…9)voidCMyCalculatorDlg::OnButtonN(){ if(m_coff==1.0) m_second=m_second*10+N;//作为整数输入数字时 else {m_second=m_second+N*m_coff;//作为小数输入数字 m_coff*=0.1; } UpdateDisplay(m_second);//更新编辑框的数字显示}编写程序代码57如数字”8”的消息响应函数voidCMyCalculatorDlg::OnButton8()

{ if(m_coff=1.0)

m_second=m_second*10+8;

else

{m_second=m_second+m_coff*8;

m_coff*=0.1;

}

UpdateDisplay(m_second);}编写程序代码输入123.1231*10+2=1212*10+3=123

.0.11123+0.1*1=123.1123.1+0.01*2=123.12123.12*0.001*3=123.12358运算符按钮的消息响应函数:将前一次数据与当前数据进行运算,作为下次的第一操作数,并在编辑框显示。算法如下:

m_first与m_second作m_operator运算后→

m_first;0→

m_second;m_first→m_display当前点击的运算符→

m_operator;将小数的权值变量m_coff置1.0.详见演示59如”+”运算符voidCMyCalculatorDlg::OnButtonAdd(){Calculate();m_operator="+";}

voidCMyCalculator::Calculate(){switch(m_operator.GetAt(0)){case'+':m_first+=m_second;break;case'-':m_first-=m_second;break;case'*':m_first*=m_second;break;右击”CMyCalculatorDlg”类,选择”AddMemberFunction”注:Calculate();类的成员函数60如”+”运算符case'/':if(fabs(m_second)<=0.000001){m_display="除数不能为0";UpdateData(false);return;}m_first/=m_second;break;}m_second=0.0;m_coff=1.0;UpdateDisplay(m_first);//更新编辑框显示内容}需要在MyCalculatorDlg.cpp中添加math.h文件61UpdateDisplay()添加方法同上voidCMyCalculatorDlg::UpdateDisplay(doublelVal){m_display.Format(_T("%f"),lVal);inti=m_display.GetLength();//格式化输出,将输出结果后的零截去

while(m_display.GetAt(i-1)=='0'){m_display.Delete(i-1,1);i--;}UpdateData(false);//更新编辑框变量m_display}

62为”=“按钮的消息响应函数添加代码:算法如下:

m_first与m_second作m_operator运算后→

m_first;m_first→m_display(显示)0→

m_second;

0→

m_second;0→m_first;将小数的权值变量m_coff置1.0.输入的运算符→m_operator详见演示为其它按钮的消息响应函数添加代码:见演示63为“。”按钮添加消息处理函数voidCMyCalculatorDlg::OnButtonReciprocal()//1/x按钮的消息处理函数{if(fabs(m_second)<0.000001){m_display="除数不能为零";UpdateData(false);return; }m_second=1.0/m_second;UpdateDisplay(m_second); }voidCMyCalculatorDlg::OnButtonPoint(){m_coff =0.1;

}64关于UpdateData函数:

CDialog的基类CWnd的成员函数,函数原型

BOOLUpdateData(BOOLbSaveAndValidate=TRUE);一般在对话框的派生类中,利用UpdateData()进行控件和相应变量之间的数据传递

UpdateData(TRUE);//将控件中的数据传递给相应的变量UpdateData(FALSE);//将变量中的数据传递给相应的控件技术要点65关于消息响应函数:用MFCClassWizard为对话框中某按钮的BN_CLICKED事件添加消息处理函数时,MFCClassWizard作了三件事:

(1)在类的定义MyCalculatorDlg.h中添加了消息响应函数的函数原型;

(2)在类的实现文件MyCalculatorDlg.cpp中,添加了函数体;

(3)在类的实现文件MyCalculatorDlg.cpp中,添加了消息映射。

技术要点66数据交换和校验:对话框数据交换(DDX)可以实现对话框中控件数值的初始化和获取用户的数据输入。对话框数据校验(DDV)可以实现对对话框中数值进行校验。如为IDC_DISPLAY的EditBox控件创建了m_display变量,数据类型为CString,则ClassWizard自动在文件MyCalculatorDlg.cpp中创建了相应的对话框数据交换代码:技术要点67数据交换和校验:voidCMyCalculatorDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyCalculatorDlg) DDX_Text(pDX,IDC_DISPLAY,m_display); //}}AFX_DATA_MAP}技术要点在代码中,利用CWnd::UpdateData()进行控件和相应变量之间的数据传递

UpdateData(TRUE);//将控件中的数据传递给相应的变量UpdateData(FALSE);//将变量中的数据传递给相应的控件68字符串CString类:

CString类中的字符是TCHAR类型的。构造函数:

CString();//产生一个空的CString对象CString(constCString&stringSrc);

//用另一个CString对象的值初始化对象.CString(TCHARch,intnRepeat=1);//重复字符CString(LPCTSTRlpch,intnLength);

//字符数组指定长度CString(constunsignedchar*psz);

//无符号字符指针CString(LPCWSTRlpsz);

//Unicode字符串CString(LPCSTRlpsz);

//ANSI字符串技术要点69常用成员函数:

intGetLength()const;//测试长度BOOLIsEmpty()const;

//测试为空voidEmpty();

//置空TCHARGetAt(intnIndex)const;

获取指定位置处字符voidSetAt(intnIndex,TCHARch);设定字符MakeUpper();变为大写MakeLower();变为小写intCompare(LPCTSTRlpsz)const;字符串比较intCompareNoCase(LPCTSTRlpsz)const;字符串比较,忽略大小写技术要点70例1

CStringm_str1=“下午”,m_str2=“好!”;CStringm_str3=m_str1+m_str2;例2CStringm_str1=“a”,m_str2=“b!”;intresult=m_str1.Compare(m_str2);字符串比较if(result==0)AfxMessageBox(“两者相同”);elseif(result>0)AfxMessageBox(“m_str1>m_str2”);elseAfxMessageBox(“m_str1<m_str2”);技术要点71利用ON_COMMAND_RANGE宏,可以处理一系列控件对同一消息处理函数的响应,用以下方法修改程序:优化MyCalculator程序

(1)在MyCalculatorDlg.h中“{{AFX_MSG(CMyCalculatorDlg)”与”}}AFX_MSG”之间添加下面语句:

afx_msgvoidOnOperandInput(UINTnID);

(2)在MyCalculatorDlg.cpp中

“{{AFX_MSG_MAP(CMyCalculatorDlg)”与”}}AFX_MSG_MAP”间添加下面语句ON_COMMAND_RANGE(IDC_BUTTON0,IDCBUTTON9,OnOperandInput);

(3)在Resource.h文件中定义

#defineIDC_BUTTON01000……#defineIDC_BUTTON91009起始值结束值消息响应函数72优化MyCalculator程序voidCCalculatorDlg::OnOperandInput(UINTnID){intn=nID%10;if(m_coff=1.0)m_second=m_second*10+n;else{m_second=m_second+m_coff*n;m_coff*=0.1; }UpdateDisplay(m_second);}73完成计算器的设计优化MyCalculator程序操作练习744.列表类控件

CListBox/CListCtrlCListBox控件单选/多选列表框P177-180

只能显示一个字段CListCtrl控件:类似于资源管理器的显示

可以显示一条记录75CListBox类控件属性Sort:列表框项目排序multi-column:有水平滚动条的多列列表框Horizontalscroll:创建水平滚动条verticalscrollwantkeyinput:向父窗口发送消息disablenoscroll列表框控件提供一个项目列表,用户可以从中选择一个或多个项目。见P178表6-1876CListBox控件的常用操作AddString()InsertString()DeleteString()ResetContent()FindString()FindStringExact()SelectString()添加列表项删除列表项查找列表项77列表框的单项选择函数(P179)GetCurSel()返回列表框中当前选择字符串的基于0的索引SetCurSel()设定选中列表项字符串78列表框多项选择函数GetSelCount()返回多选列表框中当前选择的字符串的数目GetSetItems():SetSel()79CListBox类控件事件P180表6-19LBN_DBLCLKLBN_ERRSPACELBN_KILLFOCUSLBN_SELCANCELLBN_SELCHANGELBN_SETFOCUS80单选列表框获取数据intnSelection=m_ListBox.GetCurSel()m_ListBox.GetText(nSelection,m_Text);其中:int型获得选择项序号CString型获得选择项文本项例6-3(P180)单选列表框的使用81多选列表框获取数据intnSelection=m_ListBox.GetSelCount();intitems[20];//索引号数组Stringstr[20];//字符串数组m_ListBox.GetSelItems(items);for(inti=0;i<nSelection;i++){m_ListBox.GetText(items[i],str[i]);82CListCtrl控件的用法Windows资源管理器中的“查看”标签下的“大图标、小图标、列表、详细资源”就是一个列表控件的典型应用。显示记录列表控件的风格列表控件的2个数据结构列表控件的常用操作列表控件的消息列表控件的具体编程83CListCtrl示例CListCtrl详解845.CComBox控件P183-185编辑框+列表框

用户可以通过在组合框中输入文本来选定项目,也可以直接从列表框中选定项目。如果项

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论