1.42k likes | 1.62k Views
Visual C++ 程序设计. 网络技术学院 梁普选. 教学目的. 掌握可视化与面向对象的编程模式 掌握 Windows 平台下软件运作机制及其开发方法. 教学安排. 总学时 (60) = 理论 (40) + 实验 (20). 教学参考书. [1] 马安鹏 《Visual C++ 6 程序设计导学 》 清华大学出版社 [2] 潘爱民译 《Visual C++ 技术内幕 》 清华大学出版社 [3] 侯俊杰 《 深入浅出 MFC》 华中科技大学出版社
E N D
Visual C++ 程序设计 网络技术学院 梁普选
教学目的 • 掌握可视化与面向对象的编程模式 • 掌握Windows平台下软件运作机制及其开发方法
教学安排 总学时(60) = 理论(40) + 实验(20)
教学参考书 [1] 马安鹏《Visual C++ 6 程序设计导学》 清华大学出版社 [2] 潘爱民译《Visual C++技术内幕》 清华大学出版社 [3] 侯俊杰 《深入浅出MFC》 华中科技大学出版社 [4] 许福《Visual C++ 6编程实例与技巧》 电子工业出版社
学习方法 听课看书为先导; 实践环节紧配合; 输入一段程序;编译并投入运行;将运行过程;运行结果;源代码与书本知识联系在一起。 分析总结才能领会软件开发真谛。
教学内容 [1] 微软基础类库MFC与应用程序框架 [2] 对话框与控件编程 [3] 文档视图与框架窗口 [4] 绘图 [5] 数据库编程 [6] 多线程编程 [7] 网络编程
第1讲 C++基础 1.1 类与对象 1.2 数据成员与成员函数 1.3 构造函数与析构函数 1.4 基类与派生类 1.5 单继承与多继承 1.6 函数重载与多态性
2.1 微软基础类库MFC 积微软程序员30余年的心血- Windows平台下的几十万行优化的C++代码、类库的集合,其中主要包含了开发Windows平台所需的软件资源。
微软基础类库MFC CObject CCmdTarget CWinThread CWnd CWinApp CView COleControlModule CFrameView • Application CDocument CDocTemplate user document CSingleDocTemplate CMultiDocTemplate
2.2 Visual C++集成开发环境 1. 内嵌MFC 2. 优质高效的C++编译器 3. 可视化集成开发环境 4. 得心应手的软件开发工具 (1) 应用程序向导AppWizard (2) 类向导工具ClassWizard
Visual C++开发实例 实例: 创建基于对话框的应用程序 功能: 鼠标单击“按钮”,文本框输出字 符串:“Hello VC++!” 掌握要点:AppWizard 和 ClassWizard 的使用
2.3 一个简单的MFC程序 创建窗体(P1) 1. 定义应用类 CHelloApp 2. 创建应用类对象(实例) HelloApp 3. 定义窗口类 CHelloWindow 4. 实现应用类初始化函数 InitInstance() 5. 实现窗口类构造函数
源代码分析: #include < afxwin.h > 作用:将MFC类库包含并加载到当前程序中 class CHelloApp : public CWinApp { public: virtual BOOL InitInstance(); }; 主应用类CHelloApp派生自CWinAp,并重写初始化成员函数InitInstance()。
CHelloApp HelloApp; 创建主应用类对象 class CHelloWindow : public CFrameWnd{ public: CHelloWindow(); }; 定义主窗口类CHelloWindow,派生自MFC中的CFrameWnd。主窗口类中声明了自己的构造函数。
BOOL CHelloApp::InitInstance() { m_pMainWnd = new CHelloWindow(); m_pMainWnd->ShowWindow (m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE; } m_pMainWnd是MFC中定义的主窗口指针; 主窗口指针指向了当前应用程序窗口; 因而调用主窗口指针的ShowWindow函数, 就是显示当前应用程序。
CHelloWindow::CHelloWindow() { Create(NULL,"Hello World!",WS_OVERLAPPEDWINDOW,CRect(0,0,200,200)); } 构造函数中,创建主窗口标题为“”,大小尺寸为200×200;窗口格式为可覆盖、有控制按钮。
向当前窗口中添加标签 实现过程见P4
2.4 消息映射 应用程序窗口中的用户界面对象都具有两种可控制特性: 外观及它响应事件行为的能力。 例如:当鼠标单击【退出】按钮时,应用程序就要结束;当鼠标选择【打开文件】菜单时,弹出文件打开对话框。 消息映射作用: 识别源于系统内部或用户干预应用程序的消息,调用相应的函数实现用户实现的功能
实现步骤 • 声明消息映射宏 • DECLARE_MESSAGE_MAP() • 2. 创建消息映射宏 • BEGIN_MESSAGE_MAP() • END_MESSAGE_MAP() • 消息映射宏定义在MFC中,是Windows应用程序的消息处理过程的入口
3. 定义响应消息的成员函数 (声明在先定义在后 P8) 4. 添加消息入口项 例如:将鼠标单击消息与响应该消息的成员函数建立关联。 见P8 5.创建消息驱动源-控件 见P8
定义按钮标识符资源 #define IDB_BUTTON 100 声明响应鼠标单击消息的成员函数 afx_msg void HandleButton(); 响应鼠标单击消息的成员函数 void CButtonWindow::HandleButton() { AfxMessageBox("Hello, Your Clicked Button1"); }
声明消息映射宏 DECLARE_MESSAGE_MAP() 定义消息映射宏 BEGIN_MESSAGE_MAP(CButtonWindow, CFrameWnd) ON_BN_CLICKED(IDB_BUTTON, HandleButton) END_MESSAGE_MAP() 创建按钮控件 CButton *button; button = new CButton(); button->Create("Push me",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, r, this, IDB_BUTTON);
2.5 Win32 应用程序向导 AppWizard创建基于MFC的三种不同类型的Win32 应用程序。 Win32 应用程序框架结构共性 主应用类;主应用类实例;主框架(窗口)类,文档类,视图类,各司其职。
2.6 使用类向导ClassWizard 作用: (1) 创建用户自定义类; (2) 添加/删除成员变量; (3) 添加/删除成员函数; (4) 添加自定义消息及消息映射项; (5) 导入组件库; 要求熟练掌握
2.7 设计Windows应用程序一般流程 一、设计阶段 (1)提出设计目标及用户需求 (2)确定拟采用的技术方案 (3)划分功能模块 (4)提取模块原型-创建设计模型
二、编码阶段 (1)细化模块流程 (2)攻克技术难点 (3)界面设计 (4)代码设计 (5)代码调试
三、调试阶段 (1) 分步调试 (2) 模块连调 (3) 数据测试 (4) 打包发布 四、用户反馈 (1)修改 (2)测试
2.8 Visual C++常用工具的使用 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,出现下列界面:
在源程序中呈现: // Dialog Data //{{AFX_DATA(CXxxDlg) enum { IDD = IDD_XXX_DIALOG }; CEdit m_Edit1; //}}AFX_DATA
添加鼠标单击按钮消息,并用OnButton1函数来响应用户鼠标的单击事件。添加鼠标单击按钮消息,并用OnButton1函数来响应用户鼠标的单击事件。 void CXxxDlg::OnButton1() { CString temp; m_Edit1.GetWindowText(temp); if(temp=="1234567") MessageBox("口令正确!"); else MessageBox("口令不正确!"); }
实例:向文本框IDC_EDIT1中输入文本,当输入空格时将文本框内容添加到列表框中。实例:向文本框IDC_EDIT1中输入文本,当输入空格时将文本框内容添加到列表框中。 (1)添加列表框IDC_LIST1 (2)为其设置成员变量m_List1 (3)添加文本框内容改变的事件 void CXxxDlg::OnChangeEdit1() { }
void CXxxDlg::OnChangeEdit1() { CString temp; m_Edit1.GetWindowText(temp); if(temp.Right(1)==‘ ') { m_Edit1.SetWindowText(""); m_List1.AddString(temp); } }
3.1 模态对话框与非模态对话框 1. 模态对话框 只有结束对话框的操作,才能进行其他的操作。 消息框是模态对话框 int MessageBox { HWND hWnd, //父级窗口句柄 LPCTSTR lpText, //指向信息字符串的指针 LPCTSTR lpCaption, //指向消息对话框标题的字符串 UINT uType //消息对话框的格式 };
例如: (详见P35) MessageBox( NULL, “设置是否合理?”, “请选择”, MB_ICONWARNING+MB_YESNO+ MB_DEFBUTTON2 );
2.创建模态对话框(P36~P52) (1)添加对话框窗体界面(资源)包括控件 (2)为对话框资源添加编程框架-添加对话框界面的类 (3)创建与控件相关的变量 (4)为控件添加消息函数 (5)加载模态对话框
3. 非模态对话框 非模态对话框工作期间,可与其他窗体、控件交互。 例如:Word中的“查找/替换”对话框 Excel中的图标向导对话框 …
4.创建非模态对话框(P53~P57) • 添加对话框界面资源 • 为对话框资源配置新的对话框派生类 • 定义非模态对话框类指针 • 初始化非模态对话框类指针 • 实例化并创建非模态对话框 • 加载并显示非模态对话框
3.2 通用对话框 MFC提供一组标准库支持通用对话框操作,它们分别为:
通用对话框的应用(P57) • 向VC工程中添加通用对话框类 • 在响应消息的成员函数中 • 加载通用对话框; • 打开并显示通用对话框; • 实现通用对话框的操作。
3.3 对话框集合 对话框集合是多个模态对话框的集合,单击标签可切换不同的对话框页面进行操作。 属性对话框是一种对话框集合模板,通常包含: 一个CPropertySheet类(或派生类)对象 多个CPropertyPage类(或其派生类)的对象
创建属性页对话框(P64) (1) 打开MFC中的组件库 (2) 添加属性页对话框 (3) 给属性页对话框选择一个归宿 (4) 选择属性页对话框页面数 (5) 向指定类中添加成员函数,响应属性页对话框
3.4 使用控件 控件是窗体中的基本元素,接收用户输入 显示用户信息,实现了人机交互功能。 1. 常用的控件类: CButton,CEdit, CComboBox; CTree, CList CPicture, CProgressCtrl
2. 控件的编程方法 • 向对话框中添加控件 • 为控件设置属性(ID标识符) • 添加响应控件消息的成员函数 • 向消息函数中添加代码 • 运行并调试程序