C++程序设计及互动多媒体开发 课件 第5章 MFC对话框应用程序_第1页
C++程序设计及互动多媒体开发 课件 第5章 MFC对话框应用程序_第2页
C++程序设计及互动多媒体开发 课件 第5章 MFC对话框应用程序_第3页
C++程序设计及互动多媒体开发 课件 第5章 MFC对话框应用程序_第4页
C++程序设计及互动多媒体开发 课件 第5章 MFC对话框应用程序_第5页
已阅读5页,还剩94页未读 继续免费阅读

下载本文档

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

文档简介

C++程序设计第5章MFC对话框应用程序第1节Windows编程基础第2节基于对话框的应用程序第3节静态文本框、按钮与编辑框第4节框架、单选按钮、复选框第5节列表框和组合框*第6节滚动条第7节综合举例第1节Windows编程基础Windows应用程序的特点使用API函数使用MFC类库1.1Windows应用程序的特点具有标准的图形用户界面具有与硬件无关的特性采用“消息传递,事件驱动”的运行机制微软提供的C++Windows应用程序开发方法使用WindowsAPI函数API:ApplicationProgrammingInterface应用程序接口使用MFC类库MFC:MicroSoftFoundationClasses微软基础类库1.2使用WindowsAPI函数用VC6建立一个使用WindowsAPI函数开发的Window应用程序使用VS2022建立WindowsAPI函数开发的Window应用程序主函数IntAPIENTRYwWinMain(_In_HINSTANCEhInstance,_In_opt_HINSTANCEhPrevInstance,_In_LPWSTRlpCmdLine,_In_intnCmdShow){UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);

//TODO:在此处放置代码。

//初始化全局字符串

LoadStringW(hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING);LoadStringW(hInstance,IDC_MYWIN32PROGRAM19,szWindowClass,MAX_LOADSTRING);MyRegisterClass(hInstance);

//执行应用程序初始化:if(!InitInstance(hInstance,nCmdShow)){returnFALSE;}HACCELhAccelTable=LoadAccelerators(hInstance,MAKEINTRESOURCE(IDC_MYWIN32PROGRAM19));MSGmsg;

//主消息循环:while(GetMessage(&msg,nullptr,0,0)){if(!TranslateAccelerator(msg.hwnd,hAccelTable,&msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}return(int)msg.wParam;}1.3使用MFC用VC6建立一个使用MFC开发的Window应用程序单文档应用程序多文档应用程序基于对话框的应用程序用VS2022建立一个使用MFC开发的Window应用程序MFC标准样式资源管理器样式VisualStudio样式Office样式单文档应用程序多文档应用程序基于对话框的应用程序多个顶层文档的应用程序后续章节着重介绍基于对话框的应用程序(第五章)和MFC样式的单文档应用程序(第六章)第2节基于对话框的应用程序开发过程HelloDlg程序举例几种常用控件的类关系结构2.1基于对话框的应用程序的开发过程(1)建立应用程序框架;(2)放置控件;(3)设置控件属性;(4)为控件连接变量;(5)添加、编写消息处理函数例5-1编写对话框程序,点击按钮出现HelloDialog字样。如右图。(VS2022)(1)创建基于对话框的程序框架目前一句代码都还没写,就已经有一个可以运行的对话框程序了。VS为我们搭好了一个程序框架。如果我们想修改对话框和程序的功能,我们只需在这个框架中找到对应的地方加入或修改代码即可。对话框程序框架中的类结构HelloDialog中,从类视图可看到以下三个类:CAboutDlg——关于对话框(点击对话框标题条中的程序图标,

在菜单中点击“关于HelloDialog(A)”)CHelloDlgApp(C***App)——应用程序类,负责程序的启动、结束等进程管理事务。CHelloDlgDlg(C***Dlg)——主对话框类,负责主对话框中内容的显示、交互等事务。提示:MFC代码框架中已有不少微软写的代码。如果这些代码暂时看不懂,不必强迫自己看,强迫自己看可能会产生心理压力。可以暂时不看,暂时不看这些框架代码也可以完成初级工作。可以随着学习的深入和经验的增加而对这些框架代码慢慢理解和最终搞懂。(2)增、删、修改主对话框中的控件(3)继续修改界面内容,并调整各控件的位置,如图(4)为文本框添加变量,起名为m_sInfo打开CHelloDlgDlg.h看一看classCHelloDlgDlg:publicCDialogEx{//构造public:CHelloDlgDlg(CWnd*pParent=nullptr);//标准构造函数//对话框数据……//实现……//生成的消息映射函数

virtualBOOLOnInitDialog();afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);afx_msgvoidOnPaint();afx_msgHCURSOROnQueryDragIcon();DECLARE_MESSAGE_MAP()public:

CStringm_sInfo;};VS中常用的几个窗口和视图类视图

显示程序所有的类和类中的成员解决方案资源管理器

显示了程序中所有的文件资源视图

显示了程序中所有的资源,如对话框、图标、菜单、位图等工具箱

摆放着VS支持的常用控件属性窗口

显示程序中的每个控件或资源的属性(5)为按钮添加消息响应函数▶方法一:使用类向导▶方法二:直接在属性窗口中设置事件响应在HelloDlgDlg.cpp可看到新增的消息映射和消息响应函数……BEGIN_MESSAGE_MAP(CHelloDlgDlg,CDialogEx)……ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BUTTON1,&CHelloDlgDlg::OnClickedButton1)//消息映射END_MESSAGE_MAP()……voidCHelloDlgDlg::OnClickedButton1()//消息响应函数定义{

//TODO:在此添加控件通知处理程序代码}在HelloDlg.h头文件中可看到新增的消息响应函数声明classCHelloDlgDlg:publicCDialogEx{……DECLARE_MESSAGE_MAP()public:CStringm_sInfo;

afx_msgvoidOnClickedButton1();//消息响应函数声明};我们所要做的事情就是在这里增加代码,实现所需的功能修改CHelloDlgDlg::OnClickedButton1()的代码

voidCHelloDlgDlg::OnClickedButton1(){//TODO:在此添加控件通知处理程序代码

m_sInfo="Hellodialogapplication!";UpdateData(FALSE);//由变量更新界面}UpdateData函数形式:BOOLUpdateData(BOOLbSaveAndValidate=TRUE)功能:当参数bSaveAndValidate为TRUE时,界面的新内容或新值保存到

所关联的变量中。当参数bSaveAndValidate为FALSE时,由变量的内容或值更新所关

联的界面元素。编译运行OK!2.3MFC类库结构见下页图2.4几种常用控件的类结构CStatic类对象:静态文本框 框架CButton类对象:命令按钮单选按钮

复选框CEdit类对象:编辑框

CListBox类对象:编辑框

CComboBox类对象:组合框

第3节静态文本框、按钮与编辑框静态文本框按钮文本编辑框3.1静态文本框(StaticText)一般不需要连接变量,不需要消息处理函数缺省ID为IDC_STATIC重要属性:Caption(标题)3.2按钮(Button)重要属性:Caption(标题)不需要连接变量重要消息:BN_CLICKED3.3文本编辑框(EditControl)1.重要属性

Multiline:定义该编辑框为多行文本框。

Number:限定输入的字符只能是数字字符。

Border:为控件创建边界。

Read-only:编辑框成为只读的,禁止用户编辑。2.CEdit类重要成员函数从CWnd类继承的成员函数(1)将编辑框中的内容复制出来

//复制到CString对象

voidGetWindowText(CString&rString)const;e.g.CStringch;m_e.GetWindowText(ch);//复制到数组

intGetWindowText(LPTSTRlpszStringBuf,intnMaxCount)const;e.g.charch[80];m_e.GetWindowText(ch,80);(2)设置编辑框中的内容

voidSetWindowText(LPCTSTRlpszString);e.g.charch[20]="abcdefg";m_e.SetWindowText(ch);连接变量Control类型:只能是CEdit类型

Value类型:CStringintdouble……例5-2输入一元二次方程ax2+bx+c=0的系数a、b、c,计算并输出两个根x1、x2(1)建立应用程序框架

建立基于对话框的应用程序框架,步骤参看2.1(1)。程序命名为Equation。完成后如图。(2)放置控件,布置界面▶放置6个静态文本、5个文本编辑框和1个按钮▶删除原来“确定”和“取消”按钮▶调整对话框大小结果如图(3)设置控件属性按下表修改各控件的属性控件属性值编辑框1IDIDC_EDT_ANumberTrue编辑框2IDIDC_EDT_BNumberTrue编辑框3IDIDC_EDT_CNumberTrue编辑框4IDIDC_EDT_X1NumberTrueDisabledTrue编辑框5IDIDC_EDT_X2NumberTrueDisabledTrue按钮IDIDC_BTN_CALCCaption计算对话框Caption解方程(4)连接变量为5个编辑框添加变量,数据类型和变量名参照下表。添加变量的方法参见2.1(4)小节控件(ID)类别变量类型名称IDC_EDT_A值intm_nAIDC_EDT_B值intm_nBIDC_EDT_C值intm_nCIDC_EDT_X1值doublem_dX1IDC_EDT_X2值doublem_dX2完成后在类视图中双击CEquation类打开Equation.h(也可以在解决方案管理器中双击Equation.h),可看到CEquation类定义中新增的成员变量代码:classCEquationDlg:publicCDialogEx{……afx_msgHCURSOROnQueryDragIcon();DECLARE_MESSAGE_MAP()public:intm_nA;intm_nB;intm_nC;doublem_dX1;doublem_dX2;};另外VS在构造函数CEquationDlg()和数据交换函数DoDataExchange()中也加入了与这些新增变量相关的代码(5)添加消息响应函数为按钮添加BN_CLICKED事件添加响应函数。方法参见2.1(5)小节voidCEquationDlg::OnBnClickedBtnCalc(){//TODO:在此添加控件通知处理程序代码}为OnBnClickedBtnCalc()添加代码:voidCEquationDlg::OnBnClickedBtnCalc(){//TODO:在此添加控件通知处理程序代码

UpdateData(TRUE);//用界面内容更新变量inta=m_nA;intb=m_nB;intc=m_nC;m_dX1=(-b+sqrt(b*b-4*a*c))/(2*a);m_dX2=(-b-sqrt(b*b-4*a*c))/(2*a);UpdateData(FALSE);//用变量更新界面内容}编译运行

OK!第4节框架、单选按钮、复选框框架单选按钮复选框4.1框架作用:标识一组控件不需要连接变量,不需要处理消息。缺省ID:IDC_STATIC重要属性:Caption(标题)提示:可使用菜单“格式”中的“对齐”、“使大小相同”、“均匀隔开”能功能协助控件的排布。4.2单选按钮1.设计要求同一组按钮:必须连续放入,中间不能插入其他控件 第一个按扭要选中Group属性类向导的成员变量选项卡中第一个按钮显示ID2.重要属性

ID:如IDC_RADIO1

标题:右边显示的文本信息

Group:一组中第一个按钮选中该属性3.消息

BN_CLICKED4.重要函数▶设定单选按钮选中状态初始时使用voidCheckRadioButton(intnIDFirstButton,intnIDLastButton,intnIDCheckButton);-nIDFirstButton:一组中第一个单选按钮的ID-nIDLastButton:一组中最后一个单选按钮的ID-nIDCheckButton:初始时设置为选中状态的单选按钮ID▶判定是否被选定UINTIsDlgButtonChecked(intnIDButton)const;返回值:true:选定false:没有选定5-3一个选课的对话框示例程序,如图,点击确定按钮后用AfxMessageBox消息框来显示已选信息(1)创建基于对话框的程序框架建立基于对话框的应用程序框架,步骤参看2.1(1)。程序命名为Radio(2)放置控件按题目的效果要求放置入静态文本框、文本编辑框、左边2个单选按钮(注意需连续放入)、右边3个单选按钮(注意需连续放入)、2个框架;并按图改变各个控件的Caption。删除“取消”按钮,留下“确定”按钮。(3)设置控件属性按下表设置各个控件的属性(4)连接变量

为文本编辑框添加变量:CStringm_sName;控件IDCaptionGroup文本编辑框IDC_EDT_NAME单选按钮1IDC_RADIO1计算机图形学True单选按钮2IDC_RADIO2软件工程False单选按钮3IDC_RADIO3游戏设计基础True单选按钮4IDC_RADIO4动画交互技术False单选按钮5IDC_RADIO5动态网页技术False(5)添加消息响应函数▶在类视图中找到CRadioDlg类的OnInitDialog(),添加以下代码:BOOLCRadioDlg::OnInitDialog(){…………//TODO:在此添加额外的初始化代码

CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);CheckRadioButton(IDC_RADIO3,IDC_RADIO5,IDC_RADIO3);returnTRUE;//除非将焦点设置到控件,否则返回TRUE}添加按钮的消息响应函数右击按钮,点“类向导”,在类向导对话框中,对按钮IDOK的BN_CLICKED消息添加处理程序。

然后在VS在RadioDlg.cpp中就添加了如下函数:voidCRadioDlg::OnBnClickedOk(){//TODO:在此添加控件通知处理程序代码

CDialogEx::OnOK();}在OnBnClickedOk()中加入代码:voidCRadioDlg::OnBnClickedOk(){//TODO:在此添加控件通知处理程序代码

UpdateData(TRUE);CStrings;s=s+m_sName+_T(",您选择了");if(IsDlgButtonChecked(IDC_RADIO1))s=s+_T("计算机图形学、");elses=s+_T("软件工程、");if(IsDlgButtonChecked(IDC_RADIO3))s=s+_T("游戏设计基础。");elseif(IsDlgButtonChecked(IDC_RADIO4))s=s+_T("动画交互技术");elses=s+_T("动态网页技术");AfxMessageBox(s);

//CDialogEx::OnOK();}OK!4.3复选框1.重要属性ID:如IDC_CHECK1标题:右边显示的文本信息2.连接变量一般连接到Value类别BOOL类型的变量3.消息BN_CLICKED例5-4修改前例,把右边的课程改为复选框,可多选。(1)打开前例程序(2)放置控件删除右边的单选按钮,并在CRadioDlg::OnInitDialog()中去除上例添加的两句CheckRadioButton(…)代码加入三个复选框按钮(3)修改控件属性按照图中修改3个复合框的标题(即Caption)(4)连接变量在类向导中为三个复选框添加三个变量,都选择值类型,BOOL类型。最后RadioDlg.h中可看到:classCRadioDlg:publicCDialogEx{……BOOLm_bCourse1;BOOLm_bCourse2;BOOLm_bCourse3;};修改按钮点击的响应函数OnBnClickedOk()voidCRadioDlg::OnBnClickedOk(){//TODO:在此添加控件通知处理程序代码

UpdateData(TRUE);CStrings;s=s+m_sName+_T(",您选择了");if(IsDlgButtonChecked(IDC_RADIO1))s=s+_T("计算机图形学");elses=s+_T("软件工程");

//if(IsDlgButtonChecked(IDC_RADIO3))if(m_bCourse1)s=s+_T("、游戏设计基础");

//elseif(IsDlgButtonChecked(IDC_RADIO4))

if(m_bCourse2)s=s+_T("、动画交互技术");//if(IsDlgButtonChecked(IDC_RADIO3))if(m_bCourse1)s=s+_T("、游戏设计基础");//elseif(IsDlgButtonChecked(IDC_RADIO4))if(m_bCourse2)s=s+_T("、动画交互技术");//elseif(m_bCourse3)s=s+_T("、动态网页技术");s=s+_T("。");AfxMessageBox(s);//CDialogEx::OnOK();}OK!第5节列表框和组合框列表框组合框5.1列表框1.重要属性Selection:选择方式

Single──单项选择

Multiple──多项选择,但是忽略Ctrl和Alt键。

Extended──允许使用Ctrl和Alt进行多项选择,

None──禁止选择Sort:排序2.CListBox成员函数

添加:intAddString(LPCTSTRlpszItem);

示列:m_l.AddString(“张三");

删除:intDeleteString(UINTnIndex);示例:m_l.DeleteString(4); //删除第5个说明:下标从0开始

获取当前选定项的序号格式:intGetCurSel()const;示例:inti=m_l.GetCurSel();

获取指定项intGetText(intnIndex,LPTSTRlpszBuffer)const;voidGetText(intnIndex,CString&rString)const;示例:

chars1[20];CStrings2;,

m_l.GetText(3,s1); //读入数组

m_l.GetText(3,s2); //读入CString对象例5-5操作列表框,使用对应按钮对列表框内容进行修改(1)创建程序框架

创建基于对话框的MFC程序框架(2)放置控件

使用工具箱,放入1个列表框、1个文本编辑框、4个按钮。按图修改四个按钮的标题。(3)修改控件属性

按有图修改控件属性控件ID列表框IDC_LST_COURSE文本编辑框IDC_EDT_TEXT“添加”按钮IDC_BTN_ADD“删除”按钮IDC_BTN_DEL“取值”按钮IDC_BTN_GET“修改”按钮IDC_BTN_MOD(4)连接变量在类向导中为列表框和文本编辑框添加变量完成后在主对话框类定义中可见:CStringm_sText;CListBoxm_lbCourse;(5)修改、添加相关消息响应函数修改主对话框类的OnInitDialog()BOOLCEx5Dlg::OnInitDialog(){…………//TODO:在此添加额外的初始化代码

m_lbCourse.AddString(_T("数字媒体基础"));m_lbCourse.AddString(_T("C++程序设计"));m_lbCourse.AddString(_T("Java程序设计"));m_lbCourse.AddString(_T("游戏开发技术"));returnTRUE;//除非将焦点设置到控件,否则返回TRUE}使用类向导为四个按钮添加消息响应函数

使用类视图或解决方案管理器找到刚刚添加的四个按钮消息响应函数,修改它们的代码voidCEx5Dlg::OnClickedBtnAdd(){//TODO:在此添加处理程序代码

UpdateData(TRUE);m_lbCourse.AddString(m_sText);m_sText="";UpdateData(FALSE);}voidCEx5Dlg::OnClickedBtnDel(){//TODO:在此添加处理程序代码

intn=m_lbCourse.GetCurSel();m_lbCourse.DeleteString(n);}voidCEx5Dlg::OnClickedBtnGet(){//TODO:在此添加处理程序代码

CStrings;intn=m_lbCourse.GetCurSel();m_lbCourse.GetText(n,s);m_sText=s;UpdateData(FALSE);}voidCEx5Dlg::OnClickedBtnMod(){//TODO:在此添加处理程序代码

UpdateData(TRUE);intn=m_lbCourse.GetCurSel();m_lbCourse.DeleteString(n);m_lbCourse.InsertString(n,m_sText);m_sText="";UpdateData(FALSE);}OK!5.2组合框1.重要属性▶Type:组合框形式Simple:列表始终展开,文本框可编辑DropDown:点击下拉箭头时列表才展开,文本框可编辑

下拉列表:点击下拉箭头列表才展开,只能选择,文本框不能编辑▶Data:输入列表框初始数据,以英文分号“;”分隔。2.CComboBox重要函数▶获得文本框的字符串intGetLBText(intnIndex,LPTSTRlpszText)const;voidGetLBText(intnIndex,CString&rString)const;重要消息CBN_SELECTCHANGE:选项改变CBN_EDITCHANGE:编辑框中文本改变例5-6点击确定按钮,则用MessageBox显示选择的信息(1)创建基于对话框的MFC应用程序框架(2)放置控件

放入2个静态文本、一个组合框、一个文本编辑框、一个按钮。按图设置静态文本和按钮控件的标题(3)设置控件属性控件IDTypeData组合框IDC_CBO_BRAND下拉列表华为;小米;三星;苹果文本编辑框IDC_EDT_NUM按钮IDC_BTN_OK(4)连接变量使用类向导为组合框和文本框添加变量,变量类型和名称如图(5)添加消息响应函数▶使用类向导为按钮添加点击的消息响应函数▶在新增的消息响应函数中添加代码voidCEx6Dlg::OnClickedBtnOk(){//TODO:在此添加控件通知处理程序代码UpdateData(TRUE);CStrings;s="您计划采购的手机品牌:";s=s+m_sBrand;s=s+_T("\n");s=s+_T("数量:");s=s+m_sNumber;MessageBox(s);}OK!*第6节滚动条滚动条滚动条1.CScrollBar重要函数▶设置最大值和最小值voidSetScrollRange(intnMinPos,//最小值intnMaxPos,//最大值BOOLbRedraw=TRUE);//TRUE时重画▶设置滑块的位置intSetScrollPos(intnPos,//滑块的位置BOOLbRedraw=TRUE);//TRUE时重画2.相关消息滚动条没有消息对话框却能接收到WM_Hscroll(WM_Vscroll)voidCTESTDlg::OnHScroll(UINTnSBCode,//用户正在进行的操作,每个值的含义如下表UINTnPos,//滑块当前位置CScrollBar*pScrollBar)//指向用户正在操作的滚动条{ //TODO:Addyourmessagehandlercodehereand/orcalldefault……此处加入新代码…… CDialog::OnHScroll(nSBCode,nPos,pScrollBar);}nSBCode值含义(用户正在进行的操作)SB_THUMBTRACK拖动滑块SB_LINELEFT/SB_LINEUP单击向上(左)的箭头SB_LINERIGHT/SB_LINEDOWN单击向下(右)的箭头SB_PAGELEFT/SBPAGEUP单击向上(左)箭头与滚动块之间的区域SB_PAGERIGHT/SBPAGEDOWN单击向上(左)箭头与滚动块之间的区域例5-7实现如下功能:滚动条最小值为0,最大值为100,单击滚动条两端箭头时滑块移动的增量值为1,单击滚动条中的空白处(滑块与两端箭头之间的区域)时滑块移动的增量值为10。另有一个只读的编辑框,显示了滑块当前位置所代表的值。(1)创建基于对话框的MFC应用程序框架(2)放置控件放置1个滚动条和1个文本编辑框(3)修改控件属性控件IDDisabled滚动条IDC_SCR_BARFalse文本编辑框IDC_EDT_NUM(4)连接变量(5)添加消息响应函数▶在OnInitDialog()中完成初始化BOOLCScrollBarDlg::OnInitDialog(){……//TODO:在此添加额外的初始化代码

m_scrBar.SetScrollRange(0,100);//设置滚动条最大最小值

m_scrBar.SetScrollPos(50);//设置滑块位置

m_nVal=50;//初始时,编辑框显示50

UpdateData(FALSE);//更新编辑框显示的内容

returnTRUE;//除非将焦点设置到控件,否则返回TRUE}▶在类向导里为对话框添加WM_HSCROLL的消息响应函数OnHScroll()▶对OnHScroll()添加代码:voidCScrollBarDlg::OnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar){//TODO:在此添加消息处理程序代码和/或调用默认值

if(pScrollBar==&m_scrBar){intnCurrentPos;switch(nSBCode){caseSB_THUMBTRACK://拖动滚动滑块时

m_scrBar.SetScrollPos(nPos);m_nVal=nPos;break;caseSB_LINELEFT://单击滚动条向左的箭头

nCurrentPos=m_scrBar.GetScrollPos();nCurrentPos-=1;if(nCurrentPos<0)nCurrentPos=0;m_scrBar.SetScrollPos(nCurrentPos);m_nVal=nCurrentPos;break;caseSB_LINERIGHT://单击滚动条向右的箭头

nCurrentPos=m_scrBar.GetScrollPos();nCurrentPos+=1;if(nCurrentPos>100)nCurrentPos=100;m_scrBar.SetScrollPos(nCurrentPos);m_nVal=nCurrentPos;break;caseSB_PAGELEFT://单击左箭头和滑块之间区域

nCurrentPos=m_scrBar.GetScrollPos();nCurrentPos-=10;if(nCurrentPos<0)nCurrentPos=0;m_scrBar.SetScrollPos(nCurrentPos);m_nVal=nCurrentPos;break;caseSB_PAGERIGHT://单击右箭头和滑块之间区域

nCurrentPos=m_scrBar.GetScrollPos();nCurrentPos+=10;if(nCurrentPos>100)nCurrentPos=100;m_scrBar.SetScrollPos(nCurrentPos);m_nVal=nCurrentPos;break;}}UpdateData(FALSE);CDialogEx::OnHScroll(nSBCode,nPos,pScrollBar);}OK!第7节综合举例备忘提醒器例5-8如图所示,编写一个基于对话框的备忘录。勾选当前时间的复选框可以控制日期和时间显示。填写好提醒时间和提醒内容后,点击按钮启动提醒功能。到了提醒时间,程序弹出对话框进行备忘提醒。步骤:(1)建立基于对话框的应用程序框架程序取名为Memo(2)按题图要求放置控件并设置好标题(3)设置控件属性控件ID标题MinimizeBoxDisableMultilineAutoHScrollAutoVScrollVetricalScroll对话框备忘提醒器True文本框3IDC_EDT_INFOTrueFalseTrueTrue文本框1IDC_EDT_NOWTrue文本框2IDC_EDT_ATIME复选框IDC_CHK_SHOW显示日期时间按钮IDCANCEL退出程序按钮IDOK启动提醒(4)为控件连接变量在类向导中操作,在主对话框类中为以下控件添加变量控件ID所属类变量类型变量名称复选框IDC_CHK_SHOWCMemoDlgBOOLm_bShowTime文本框1IDC_EDT_NOWCMemoDlgCStringm_sNow文本框2IDC_EDT_ATIMECMemoDlgCStringm_sAlarmTime文本框3IDC_EDT_INFOCMemoDlgCStringm_sInfo按钮IDOKCMemoDlgCButtonm_btnStart(5)添加消息响应函数为复选框和启动提醒按钮添加两个消息响应函数命令ID/消息消息响应函数名IDC_CHK_SHOWBN_CLICKEDOnClickedChkShowIDC_OKBN_CLICKEDOnBnClickedOk为OnClickedChkShow()添加代码//该函数功能为:勾上复选框,下面的文本框就显示当前日期时间voidCMemoDlg::OnClickedChkShow(){//TODO:在此添加控件通知处理程序代码

UpdateData(TRUE);if(m_bShowTime==TRUE){CTimetime=CTime::GetCurrentTime();

//构造“YYYY-MM-DD”形式的日期字符串和“HH:MM:SS”的时间字符串

m_sNow=time.Format("%Y-%m-%d%H:%M:%S");}elsem_sNow="";UpdateData(FALSE);}CTime类封装了日期和时间静态成员GetCurrentTime()返回系统当前的日期和时间。为OnBnClickedOk()函数添加代码先了解设计思路:按下“启动提醒”按钮,就进入一个无限循环,程序每隔5秒中检查一下时间是否已到。如果时间已到,就弹出消息框提醒。voidCMemoDlg::OnBnClickedOk(){//TODO:在此添加控件通知处理程序代码m_btnStart.EnableWindow(FALSE);//禁用按钮,使其变灰色

UpdateData(TRUE);if(m_sAlarmTime.IsEmpty())return;

//从文本框2中取出字符串,转成CTime格式CTimetmAlarm;USES_CONVERSION;//(4)char*pBuf=T2A(m_sAlarmTime);//(3)

intY,M,D,h,m,s;sscanf_s(pBuf,"%d-%d-%d%d:%d:%d",&Y,&M,&D,&h,&m,&s);//(2)tmAlarm=CTime(Y,M,D,h,m,s);//(1)句CTimetmNow;while(1){tmNow=CTime::GetCurrentTime();if(tmNow>tmAlarm){CStringsAlarm;sAlarm.Format(_T("时间到!\n%s"),m_sInfo);AfxMessageBox(sAlarm);m_btnStart.EnableWindow(TRUE);//按钮再启用,可以继续设置提醒

break;}Sleep(5000);//程序暂停5秒,不要老是占着CPU}//删除CDialogEx::OnOK();//注释掉这句,否则对话框会退出}OK!例5-9编写一个文字录入速度测试程序。仿照给定文章快速录入文字,提交后使用录入正确的文字计算出文字录入速度。录入第一个错误处对文字进行选中点亮以作提示。程序编写步骤(1)建立基于对话框的应用程序框架程序取名为InputTest(2)按题图要求放置控件并设置好标题。(3)设置控件属性控件IDMinimizeBoxDisableMultilineAutoHScrollAutoVScrollVetricalScrollTypeData对话框True文本框1IDC_EDT_EXAMCARD文本框2IDC_EDT_NAME文本框3IDC_EDT_QUETEXTTrueTrueFalseTrueTrue文本框4IDC_EDT_INPUTTEXTTrueTrueFalseTrueTrue组合框IDC_CBO_QUEID下拉列表Q001;Q002;按钮IDC_BTN_BEGIN按钮IDC_BTN_SUBMIT按钮IDCANCEL(4)为控件连接变量(5)添加消息响应函数为组合框的选择变化消息、“开始测试”按钮的点击消息、“提交”按钮的点击消息、录入文本框的编辑变化消息添加响应函数为OnSelchangeCboQueid()添加代码//当组合框选择不同题号时,题目文字文本框会出现不同的文章voidCInputTestDlg::OnSelchangeCboQueid(){//TODO:在此添加控件通知处理程序代码

温馨提示

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

评论

0/150

提交评论