网络技术学院梁普选VisualC++程序设计1.掌握可视化与面向对象的编程模式2.掌握Windows平台下软件运作机制及其开发方法教学目的总学时(60)=理论(40)+实验(20)教学安排教学参考书[1]马安鹏《VisualC++6程序设计导学》清华大学出版社[2]潘爱民译《VisualC++技术内幕》清华大学出版社[3]侯俊杰《深入浅出MFC》华中科技大学出版社[4]许福《VisualC++6编程实例与技巧》电子工业出版社学习方法听课看书为先导;实践环节紧配合;输入一段程序;编译并投入运行;将运行过程;运行结果;源代码与书本知识联系在一起。分析总结才能领会软件开发真谛。[1]微软基础类库MFC与应用程序框架[2]对话框与控件编程[3]文档视图与框架窗口[4]绘图[5]数据库编程[6]多线程编程[7]网络编程教学内容第1讲C++基础1.1类与对象1.2数据成员与成员函数1.3构造函数与析构函数1.4基类与派生类1.5单继承与多继承1.6函数重载与多态性第2讲MFC与应用程序框架2.1微软基础类库MFC积微软程序员30余年的心血-Windows平台下的几十万行优化的C++代码、类库的集合,其中主要包含了开发Windows平台所需的软件资源。微软基础类库MFCCDocumentCObjectCCmdTargetCWinThreadCWinAppCOleControlModuleApplicationuserdocumentCDocTemplateCSingleDocTemplateCMultiDocTemplateCViewCWndCFrameView2.2VisualC++集成开发环境1.内嵌MFC2.优质高效的C++编译器3.可视化集成开发环境4.得心应手的软件开发工具(1)应用程序向导AppWizard(2)类向导工具ClassWizardVisualC++开发实例实例:创建基于对话框的应用程序功能:鼠标单击“按钮”,文本框输出字符串:“HelloVC++!”掌握要点:AppWizard和ClassWizard的使用2.3一个简单的MFC程序创建窗体(P1)1.定义应用类CHelloApp2.创建应用类对象(实例)HelloApp3.定义窗口类CHelloWindow4.实现应用类初始化函数InitInstance()5.实现窗口类构造函数源代码分析:#includeafxwin.h作用:将MFC类库包含并加载到当前程序中classCHelloApp:publicCWinApp{public:virtualBOOLInitInstance();};主应用类CHelloApp派生自CWinAp,并重写初始化成员函数InitInstance()。CHelloAppHelloApp;创建主应用类对象classCHelloWindow:publicCFrameWnd{public:CHelloWindow();};定义主窗口类CHelloWindow,派生自MFC中的CFrameWnd。主窗口类中声明了自己的构造函数。BOOLCHelloApp::InitInstance(){m_pMainWnd=newCHelloWindow();m_pMainWnd-ShowWindow(m_nCmdShow);m_pMainWnd-UpdateWindow();returnTRUE;}m_pMainWnd是MFC中定义的主窗口指针;主窗口指针指向了当前应用程序窗口;因而调用主窗口指针的ShowWindow函数,就是显示当前应用程序。CHelloWindow::CHelloWindow(){Create(NULL,HelloWorld!,WS_OVERLAPPEDWINDOW,CRect(0,0,200,200));}构造函数中,创建主窗口标题为“”,大小尺寸为200×200;窗口格式为可覆盖、有控制按钮。向当前窗口中添加标签实现过程见P42.4消息映射应用程序窗口中的用户界面对象都具有两种可控制特性:外观及它响应事件行为的能力。例如:当鼠标单击【退出】按钮时,应用程序就要结束;当鼠标选择【打开文件】菜单时,弹出文件打开对话框。消息映射作用:识别源于系统内部或用户干预应用程序的消息,调用相应的函数实现用户实现的功能实现步骤1.声明消息映射宏DECLARE_MESSAGE_MAP()2.创建消息映射宏BEGIN_MESSAGE_MAP()END_MESSAGE_MAP()消息映射宏定义在MFC中,是Windows应用程序的消息处理过程的入口3.定义响应消息的成员函数(声明在先定义在后P8)4.添加消息入口项例如:将鼠标单击消息与响应该消息的成员函数建立关联。见P85.创建消息驱动源-控件见P8实例:鼠标单击按钮,弹出消息框。P9定义按钮标识符资源#defineIDB_BUTTON100声明响应鼠标单击消息的成员函数afx_msgvoidHandleButton();响应鼠标单击消息的成员函数voidCButtonWindow::HandleButton(){AfxMessageBox(Hello,YourClickedButton1);}声明消息映射宏DECLARE_MESSAGE_MAP()定义消息映射宏BEGIN_MESSAGE_MAP(CButtonWindow,CFrameWnd)ON_BN_CLICKED(IDB_BUTTON,HandleButton)END_MESSAGE_MAP()创建按钮控件CButton*button;button=newCButton();button-Create(Pushme,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,r,this,IDB_BUTTON);2.5Win32应用程序向导AppWizard创建基于MFC的三种不同类型的Win32应用程序。Win32应用程序框架结构共性主应用类;主应用类实例;主框架(窗口)类,文档类,视图类,各司其职。作用:(1)创建用户自定义类;(2)添加/删除成员变量;(3)添加/删除成员函数;(4)添加自定义消息及消息映射项;(5)导入组件库;要求熟练掌握2.6使用类向导ClassWizard一、设计阶段(1)提出设计目标及用户需求(2)确定拟采用的技术方案(3)划分功能模块(4)提取模块原型-创建设计模型2.7设计Windows应用程序一般流程二、编码阶段(1)细化模块流程(2)攻克技术难点(3)界面设计(4)代码设计(5)代码调试三、调试阶段(1)分步调试(2)模块连调(3)数据测试(4)打包发布四、用户反馈(1)修改(2)测试2.8VisualC++常用工具的使用1.属性对话框用于设置控件及对话框的属性2.控件常用属性(1)ID:控件标识符,是该控件在程序中的符号化的表示。例如:文本框控件标识符:IDC_EDIT1按钮控件标识符:IDC_BUTTON1(2)Caption:控件标题,表示显示在控件表面的字符串信息。例如:静态文本控件的Caption设置为“姓名”,则显示:3.ClassWizard类向导工具(1)用于设置控件所表示的信息(2)实现对源程序编辑、修改。3.1打开类向导的操作方法:(1)选中操作目标(2)Ctrl+W例如:为IDC_EDIT1添加变量m_Edit1,具体方法:选中对话框界面中的文本编辑框IDC_EDIT1,出现下列界面:接着按“添加成员变量”按钮,出现:在源程序中呈现://DialogData//{{AFX_DATA(CXxxDlg)enum{IDD=IDD_XXX_DIALOG};CEditm_Edit1;//}}AFX_DATA添加鼠标单击按钮消息,并用OnButton1函数来响应用户鼠标的单击事件。voidCXxxDlg::OnButton1(){CStringtemp;m_Edit1.GetWindowText(temp);if(temp==1234567)MessageBox(口令正确!);elseMessageBox(口令不正确!);}实例:向文本框IDC_EDIT1中输入文本,当输入空格时将文本框内容添加到列表框中。(1)添加列表框IDC_LIST1(2)为其设置成员变量m_List1(3)添加文本框内容改变的事件voidCXxxDlg::OnChangeEdit1(){}voidCXxxDlg::OnChangeEdit1(){CStringtemp;m_Edit1.GetWindowText(temp);if(temp.Right(1)==‘'){m_Edit1.SetWindowText();m_List1.AddString(temp);}}3.1模态对话框与非模态对话框1.模态对话框只有结束对话框的操作,才能进行其他的操作。消息框是模态对话框intMessageBox{HWNDhWnd,//父级窗口句柄LPCTSTRlpText,//指向信息字符串的指针LPCTSTRlpCaption,//指向消息对话框标题的字符串UINTuType//消息对话框的格式};例如:(详见P35)MessageBox(NULL,“设置是否合理?”,“请选择”,MB_ICONWARNING+MB_YESNO+MB_DEFBUTTON2);2.创建模态对话框(P36~P52)(1)添加对话框窗体界面(资源)包括控件(2)为对话框资源添加编程框架-添加对话框界面的类(3)创建与控件相关的变量(4)为控件添加消息函数(5)加载模态对话框3.非模态对话框非模态对话框工作期间,可与其他窗体、控件交互。例如:Word中的“查找/替换”对话框Excel中的图标向导对话框…4.创建非模态对话框(P53~P57)(1)添加对话框界面资源(2)为对话框资源配置新的对话框派生类(3)定义非模态对话框类指针(4)初始化非模态对话框类指针(5)实例化并创建非模态对话框(6)加载并显示非模态对话框3.2通用对话框MFC提供一组标准库支持通用对话框操作,它们分别为:类用途CColorDialog允许用户选择或创建颜色CFileDialog允许用户打开或保存一个文件CFindReplaceDialog允许用户用一个字符串替换文本中另一个字符串CPageSetupDialog允许用户输入页面参数CFontDialog允许用户从列出的字体中选择一种字体CPrintDialog允许用户设置打印机并打印文档通用对话框的应用(P57)(1)向VC工程中添加通用对话框类(2)在响应消息的成员函数中加载通用对话框;打开并显示通用对话框;实现通用对话框的操作。3.3对话框集合对话框集合是多个模态对话框的集合,单击标签可切换不同的对话框页面进行操作。属性对话框是一种对话框集合模板,通常包含:一个CPropertySheet类(或派生类)对象多个CPropertyPage类(或其派生类)的对象创建属性页对话框(P64)(1)打开MFC中的组件库(2)添加属性页对话框(3)给属性页对话框选择一个归宿(4)选择属性页对话框页面数(5)向指定类中添加成员函数,响应属性页对话框3.4使用控件控件是窗体中的基本元素,接收用户输入显示用户信息,实现了人机交互功能。1.常用的控件类:CButton,CEdit,CComboBox;CTree,CListCPicture,CProgressCtrl2.控件的编程方法(1)向对话框中添加控件(2)为控件设置属性(ID标识符)(3)添加响应控件消息的成员函数(4)向消息函数中添加代码(5)运行并调试程序3.对话框综合实例(P87)第4讲文档与视图4.1文档-视图结构创建基于MFC的Win32应用程序框架中包含:文档类:派生自CDocument类视图类:派生自CView类主框架类:派生自CFrameWnd类4.2用户数据的三种形态文档类:用于用户数据的组织和保存视图类:与界面结合,接受并显示数据主框架类:将文档/视图类组装在窗体中(1)文档数据:定义在文档类中,体现了用户数据结构(2)界面数据:定义在视类或