C++程序设计教程
MFC简介
用 VC++做习题的几个注意事项
1,先建 console工程,再进行编程。
2,不要改动原工程的 main函数的入口参数。
3,创建新类应创建新文件,用 New的方式添加新文件。
4,H文件开头要加保护,以防重复编译。例如,
#ifndef DATE1_H
#define DATE1_H
… … // the boder of header
#endif
5,CPP的第一个有效语句应该是 #include,stdafx.h”
(称为预编译头文件 precompile file)。
6,交作业时 删除 Debug和 Release目录,然后将整个工
程目录压缩打包。
VC++简介
? VC++分为 API和 MFC两部分
? Win32 API(Application Programming
Interface)类似于 C语言的库函数,提供诸如
strcpy(),memset(),fopen()等函数。
? MFC ( Microsoft Foundation Class )
微软基本类库,提供窗口( Windows)式程序编
程框架。
? 通过 MFC,我们可以构造基于窗口的应用程序,
如对话框( Dialog)、单文档( Single
Document)和多文档( Multiply Document)
应用软件。
MFC的基本数据类型
1,int 是特殊的数据类型,它等同于操作系统的
位数。如 32位系统( Win32) int就是 32位。
2,重新定义数据类型是为了可移植性。
3,数据类型:(整型)
1,BOOL 布尔类型 ( int型)
2,INT,UINT 与 int有关类型
3,CHAR,(UCHAR)BYTE 与 char有关类型 8bit
4,SHORT,(USHORT)WORD 与 short有关类型 16bit
5,LONG,(ULONG)DWORD 与 long有关类型 32bit
6,LONGLONG,ULONGLONG 64bit类型
4,数据类型:(浮点型)
1,FLOAT, 类型 float 32bit
2,DOUBLE, 类型 double 64bit
程序的可读性
? 好的程序体现在下面几个方面,
? 正确性、可读性、健壮性、可维护性
? VC++中关于提高可读性的几项基本要求,
? 要遵循模块化缩进的原则。
? 工程、类、变量等等的名称一律用英文。
? 变量起名要有意义,让人容易理解其含义。
采用英文,不要用汉语拼音。
? 不大容易理解的地方应及时加注释。
? 变量写法遵循匈牙利记法。
变量名的匈牙利记法
Hungarian notation
BOOL, bVariable
int,INT, nVariable
UINT, uVariable
char,CHAR, chVariable
BYTE, byVariable
SHORT, sVariable
WORD, wVariable
LONG, lVariable
DWORD, dwVariable
FLOAT, fltVariable
DOUBLE, dblVariable
CHAR[], szVariable
1,MFC C++类库 Microsoft Foundation Class Library
CObject,
1) 在运行时识别对象所属的类,IsKindOf()
2) 支持串行化,Serialize()
3) 在运行时打印诊断信息,AssertValid()
CRuntineClass, 建立运行程序链表
CCmdTarget, 向菜单、对话框、工具栏、状态栏等发送消息。
应用程序结构类,CWinApp,CDocument,CDocTemplate
窗口类,CFrameWnd,CView,CDialog,CTreeCtrl等
?1 MFC类库简介
2,预定义宏、全局变量和全局函数
无符号整数,
BYTE, 8位,WORD, 16位,DWORD, 32位
有符号整数,
CHAR, 8位,SHORT, 16位,LONG, 32位
与平台有关的整型,int, 16位系统为 SHORT,32位系统为 LONG
逻辑类型,BOOL
指针类型,例:字符串指针 LPTSTR,LPCTSTR // C的意思是 const
LPCRECT,LPVOID,LPBYTE,LPWORD,LPDWORD等。
全局函数,AfxGetApp,AfxGetResourceHandle,AfxGetMainWnd等。
AfxMeesageBox
宏,DECLARE_DYNAMIC / IMPLEMENT_DYNAMIC 用于在运行时获取消息
ASSERT 用于诊断 TRACE 用于输出
?1 MFC类库简介
1,使用 AppWizard 生成应用程序的框架
2,常用的 MFC类简介
1) 应用程序类 CWinApp
2) 文档模板类 CDocTemplate
3) 文档类 CDocument
4) 边框窗口类 CFrameWnd
5) 视图类 CView
6) 对话框类 CDialog
7) 图形输出类 CDC
8) 集合类和简单值类 CPoint,CSize,CRect,CString,CTime,
?2 应用程序基本框架
1,资源编辑器
2,资源符号 IDD_,IDC_,IDI_,IDB_,IDM_
3,对话框编辑器
4,菜单编辑器
5,图形编辑器
?3 图形用户界面设计
1,消息处理和消息映射的概念
鼠标键盘等交互操作 系统输入行为和显示打印等输出行为称为
事件 event。
每一事件都会产生一个或一系列消息 message。
CCmdTarget 建立消息映射 (MessageMaping)
2,消息的种类
消息有三种类型
1) Windows消息 WM_ 传给窗口和视图处理的消息
2) 控件通知 由控件传给父窗口的通知消息
3) 命令消息 ID_ 专指用户界面消息 WM_COMMAND,如菜单、
加速键、工具栏按钮等。
?4 消息处理与交互式绘图
3,消息处理函数
Windows消息和控件通知的处理函数
CWnd的派生类,如,
WM_PAINT的处理函数,afx_msg void OnPaint();
命令消息的处理函数
如菜单项 ID_FILE_OPEN,afx_msg void OnFileOpen();
4,消息的映射
BEGIN_MESSAGE_MAP(CTextEditApp,CWinApp)
ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew)
……
END_MESSAGE_MAP()
?4 消息处理与交互式绘图
5,消息的发送和接收
? Windows是以消息为基础,事件为驱动。
? 应用程序入口是 CWinApp的派生类
? CWinApp启动后将运行一个消息循环,将各种消息
发送到指定的窗口进行处理。
? 一直到遇到 WM_QUIT消息后结束程序
6,用户界面对象的更新
7,ClassWizard的使用
?4 消息处理与交互式绘图
? class CObject,
? 1) 一般诊断 AssertValid
? 2) 运行期识别 RuntimeClass
? 3) 串行化 Serialize
? 4) 动态创建
DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC
? class CCmdTarget, public CObject
? 1) 消息发送
? BEGIN_MESSAGE_MAP(CMyView,Cview)
? ON_COMMAND(ID_FILE_OPEN,OnFileOpen)
? … …
? END_MESSAGE_MAP()
? 2) 等待光标
? 3) 支持自动化 IDispatch COM
? class CWinApp, public CCmdTarget
? 1) 获取应用程序的信息。
? 2) 支持注册表 RegistryKey
? 3) 支持文档 Document Template
? class CWnd, public CCmdTarget
? 1) 注册新窗口类。
? 2) 创建和使用窗口 Create,CreateEx;
? class CFrameWnd, public CWnd
? 标题栏、系统菜单、边框、最小 /最大化
? class CView, public CWnd
? 1) 显示 /打印的处理 OnDraw()
? 2) 与用户进行交互操作 (鼠标 /键盘 )
? OnLButtonDown/OnLButtonUp
? OnKeyDown … …
? 3) 系统重画 Invalidate(); UpdateWindow();
? class CDocument, public CCmdTarget
? 1) 文档的输入 /输出。
OpenDocument/SaveDocument
? 2) 数据的保存和更新;
? 3) View的维护。
?