Upload
durin
View
224
Download
5
Embed Size (px)
DESCRIPTION
Visual C++ 开发基础. 几个与历史有关的问题. Visual C++ 是如何诞生的? C 语言和 C++ 语言是如何诞生的? C 语言和 C++ 语言究竟有什么关系? C 语言、 C++ 语言和 Java 语言、 C# 语言有什么关系?. 高级程序设计语言的发展历史. 最适用的语言才是最好的语言. 三个影响历史的关键人物. B. Stroustrup. J. Gosling. A. Hejlsberg. C 语言的演化. C 语言来自与 B 语言, B 语言是 BCPL 语言的简化,而 BCPL 语言又简化自 CPL 语言 - PowerPoint PPT Presentation
Citation preview
Visual C
++ V
isual C++
开发基础开发基础
成稿 2002 年 9 月 7 日修订 2002年 9月 8日 ~2002年 10 月
11 日撰稿人 王咏刚
主讲 王咏刚
Visual C++ 开发基础
Visual C
++ V
isual C++
开发基础开发基础
Visual C++ 是如何诞生的?C 语言和 C++ 语言是如何诞生的?C 语言和 C++ 语言究竟有什么关系?C 语言、 C++ 语言和 Java 语言、 C# 语言有什么关系?
几个与历史有关的问题
Visual C
++ V
isual C++
开发基础开发基础
最适用的语言才是最好的语
最适用的语言才是最好的语
言言
高级程序设计语言的发展历史
Visual C
++ V
isual C++
开发基础开发基础
B. Stroustrup J. Gosling A. Hejlsberg
三个影响历史的关键人物
Visual C
++ V
isual C++
开发基础开发基础
C 语言来自与 B 语言, B 语言是 BCPL 语言的简化,而 BCPL 语言又简化自 CPL 语言C 语言的发明者是贝尔实验室的 D. Ritchie
1978 年有了以 K&R 《 C 语言程序设计》一书为代表的非官方标准。 K&R 指的是 B. Kernighan 和 D. Ritchie
1989 年 ANSI 颁布了 ANSI 版的 C 语言标准,即 C891999 年, ISO/ANSI 发布了 C 语言的最新标准,即C99
直到今天, C 语言仍然是一种年轻的和不断进步的语言,仍然是具有最强的系统描述能力的语言
C 语言的演化
Visual C
++ V
isual C++
开发基础开发基础
1979 年, C++ 语言的雏形, CPre 诞生,这种语言也叫“带类的 C”1983 年底, C++ 得名1984 年拥有了非官方的标准 C841989 年非官方标准演化成《带标注的 C++ 参考手册》,即著名的 ARM
C++ 语言的官方标准直到 1998 年 9 月才正式发布。在国际标准化组织( ISO )的档案库里, C++ 标准的代号是ISO/IEC 14882:1998
C++ 是一中多范例的语言C++ 并不是 100% 和 C 语言保持兼容
丹麦人 B. Stroustrup 说:“ C++ 是一种通用程序设计语言,其设计目的就是为了使真正的程序员更多地感受到编程的快乐。”
C++ 语言的演化
Visual C
++ V
isual C++
开发基础开发基础
语法词法 C++ 的源代码已可以适应 ASC II 以外的字符集文法 C++ 具备上下文无关文法的所有特征语义 C++ 是多范例的语言
运行环境
操作系统 C++ 几乎适用于所有操作系统编译或解释环境
GNU C++Borland C++ BuilderMicrosoft Visual C++
Microsoft Visual C++ .NET
运行时间库Standard C++ Library(STL)
Cross-platform component library(CLX)MFC & ATL
一门完整的程序设计语言必须具备的要素
Visual C
++ V
isual C++
开发基础开发基础
#include <iostream>#include <string>#include <iomanip>
using namespace std;
void main(){ string s; cout << "What's your name? "; cin >> s; cout << "Hello, " + s << endl;
double d; cout << "Input a float number: "; cin >> d; cout << setw(20) << setprecision(2) << setiosflags( ios::fixed ) << d << endl;}
一个使用 C++ Standard Library 的 C++ 程序例子
Visual C
++ V
isual C++
开发基础开发基础
程序中的数据究竟存储在什么位置?下面这些数据的存储位置相同吗?全局变量局部变量动态分配的变量空间什么是虚拟存储空间?什么是线性地址?什么是内存交换文件?
几个问题
Visual C
++ V
isual C++
开发基础开发基础
计算机是处理数据的自动机。
程序运行时,数据的存储位置有3
个:
静态存储区、堆、栈
数据的存储位置
Visual C
++ V
isual C++
开发基础开发基础
class X{public:
int m;};
class Y{public: int n; void foo(int n) { for(int i = 0; i < 5; i++) n += n / 2; this->n = n; }};
Y yes;
void main(){
Y* no = new Y();yes.foo(10);no->foo(20);delete no;
}
一个使用了静态存储、堆和栈的 C++ 程序例子
Visual C
++ V
isual C++
开发基础开发基础
什么是编译?什么是连接?为什么要编译和连接?
几个问题
Visual C
++ V
isual C++
开发基础开发基础
C++
代码的编译和连接
Visual C
++ V
isual C++
开发基础开发基础
Visual C++ 来源于 Microsoft C/C++目前 Visual C++ 的最新版本是 Visual Studio .NET 7.0中的 Visual C++ .NET 7.0实际开发中常用到 Visual Studio 6.0 中的 Visual C++ 6.0 ( Visual Studio 6.0 最新的 Service Pack 版本是SP5 )
Visual C++ 中的用户界面和基本概念解决方案( Workspace )项目( Project )生成( Make )编译( Build )编译方式( Build Type/Build Configuration )项目设置( Project Setting ) : 编译 /连接 /调试选项
Visual C++ 简介
Visual C
++ V
isual C++
开发基础开发基础
演示 Visual C++ 开发控制台程序的方法扼要演示 Visual C++ 开发静态连接库的方法扼要演示 Visual C++ 开发动态连接库的方法
用 Visual C++ 开发控制台程序
Visual C
++ V
isual C++
开发基础开发基础
WIN 32GUI 程序的要素 进程 线程 窗口 资源 窗口类 窗口属性 窗口函数 消息 消息队列 消息处理 对话框
WIN32 是基于 DLL 的运行环境kernel32.dlluser32.dllgdi32.dll演示Microsoft Depends 的用法
什么是 WIN32 环境?什么是 GUI 程序?
演示 Visual C++资源编辑器的用法DIALOGICONMENUBITMAPSTRINGVERSION
Visual C
++ V
isual C++
开发基础开发基础
消息:由一个消息 ID ,一个 wParam(32位 ) 参数和一个lParam(32位 ) 参数组成typedef struct tagMSG {
msg HWND hwnd;UINT message;WPARAM wParam;LPARAM lParam;DWORD time;POINT pt;
} MSG;
消息分类消息队列消息循环消息和线程的关系
WIN32窗口系统的核心:消息管理
演示Microsoft Spy++ 的用法Processes ListThreads ListWindows ListWindow Class PropertiesMessage Logging
Visual C
++ V
isual C++
开发基础开发基础
基本的 WIN32 程序包含两个主要函数, WinMain和 WndProc :WinMain 函数注册窗口类创建窗口显示窗口消息循环
WndProc 回调函数处理消息未处理消息传给 DefWindowProc
开发一个简单的 WIN32窗口程序
主消息循环代码的写法while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);DispatchMessage(&msg);
}
Visual C
++ V
isual C++
开发基础开发基础
#include <windows.h>
… WinMain(…){ // Instance… // WNDCLASS …; // CreateWindow(…); // Main Message Loop}… WndProc(…){ // switch(…) // WM_CREATE // WM_PAINT // WM_SIZE // WM_CLOSE // WM_DESTROY}
DeviceContext
PaintDCMemoryDCGDIObject: Pen Brush …Drawing Functions: …
开发一个简单的 WIN32窗口程序
User Inputs
Mouse EventsKeyboard Events
Focus
Visual C
++ V
isual C++
开发基础开发基础
Child Windows
在 WM_CREATE 消息中创建子窗口创建一个包含图形元素的子窗口创建一个按钮子窗口WM_SIZE 的处理WM_PAINT 的处理WM_CLOSE 的处理WM_DESTROY 的处理
WIN32 Controls
StaticEditButtonRadioButtonCheckBoxListComboBoxProgressScollBars
开发一个简单的 WIN32窗口程序
Visual C
++ V
isual C++
开发基础开发基础
#include <windows.h>
… WinMain(…){ // DialogBox(…);}… DialogProc(…){ // switch(…) // WM_INITDIALOG // EndDialog();}
Dialog
模式对话框无模式对话框
开发一个简单的 WIN32对话框程序
Visual C
++ V
isual C++
开发基础开发基础
MFC 是 Microsoft提供的类库,包含了以下功能 用户界面开发(对话框,单窗口和多窗口) 基本文件 I/O 数据库开发 网络编程( TCP/IP, FTP, Internet… ) OLE支持( OLE 容器,客户端,复合文档) ActiveX支持(用户控件、自动化对象) 容器类(数据结构、基本算法) 调试、跟踪、测试支持
什么是 MFC ?
Visual C
++ V
isual C++
开发基础开发基础
MFC 的类结构: CObject 是其中最基本的类
Visual C
++ V
isual C++
开发基础开发基础
向导生成的是源代码的框架MFC 的应用程序向导
Visual C
++ V
isual C++
开发基础开发基础
使用 Visual C++提供的 ClassWizard工具(该工具的使用方式在 Visual Studio .NET 中略有变化)在 ClassWizard 中添加消息处理过程在 ClassWizard 中添加新类使用 Visual C++提供的类视图工具
使用 MFC 开发对话框程序
演示 ClassWizard 的用法新建类添加类成员类的继承关系多态、重载的实现消息处理控件 - 变量对应关系
Visual C
++ V
isual C++
开发基础开发基础
CWinApp 类 CDialog 类 CFrameWnd 类虚函数的作用:重新实现 CDialog 或 CWnd 的特性消息循环在 MFC 中的实现:BEGIN_MESSAGE_MAP(CTttDlg, CDialog)
//{{AFX_MSG_MAP(CTttDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)//}}AFX_MSG_MAP
END_MESSAGE_MAP()
理解 MFC 生成的框架代码的结构
Visual C
++ V
isual C++
开发基础开发基础
Visual C++ 的文档 -视结构使用 MFC 开发窗口程序
Visual C
++ V
isual C++
开发基础开发基础
Visual C++ 的文档 -视结构4 个关键类:
CDocTemplate 、 CDocument 、 CFrameWnd 、 CView
CSingleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,RUNTIME_CLASS(CTttDoc),RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(CTttView));
AddDocTemplate(pDocTemplate);
CCommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);
if (!ProcessShellCommand(cmdInfo))return FALSE;
使用 MFC 开发窗口程序
Visual C
++ V
isual C++
开发基础开发基础
MFC 下图形对象、控件的用法OnDraw()使用 CPaintDC 和 CDC
CPenCBrushCFont……
CMenuCButtonCProgressCtrlCListBoxCListView/CListCtrlCTreeView/CTreeCtrl……
Visual C
++ V
isual C++
开发基础开发基础
管理文档 -视结构
CDoucment:
OnNewDocument()OnOpenDocument()Serialize()UpdateAllViews()IsModified()SetModifiedFlag()
CView:
PreCreateWindow()OnDraw()GetDocument()OnUpdate()
CFrameWnd:
GetActiveFrame()GetActiveView()GetActiveDocument()LoadFrame()
Visual C
++ V
isual C++
开发基础开发基础
使用 Visual C++ 开发数据库访问程序访问数据库的不同方式1. 数据库软件本身的接口 API2. 嵌入式 C 语言代码3. ODBC4. DAO5. RDO6. ADO (面向对象的 ODBC )7. .NET 类库中的数据库访问模块Visual C++ 中支持 ODBC 的类是 CDatabase 系列支持 DAO 的是 CDaoDatabase 系列支持 ADO 的办法是使用 ActiveX 自动化对象
Visual C
++ V
isual C++
开发基础开发基础
基于网络连接的数据库访问基础
数据库服务 Database Server
服务端交易环境 ( 数据库脚本语言 ) :存储过程 / 触发器 / 外部存储过程T-SQL in SQL Server, PL/SQL in Oracle
操作系统 OS
服务端通信模块
客户端通信模块
公共数据库接口ODBC, ADO, …
特定数据库接口DB Library in SQL Server,
Pro C/OCI in Oracle
应用程序开发接口MFC, VB Controls, …
应用程序
网络连接
Visual C
++ V
isual C++
开发基础开发基础
网络通信技术概览基于消息的通信技术
UDP 、 TCP 、 COM 、 Named Pipes消息队列: MQ基于成熟应用协议的通信技术FTPMailHttp (Web Access)基于远程过程调用的通信技术RPC :远程过程调用CORBA :面向对象的远程过程调用Java RMI : Java 语言面向对象的远程过程调用Web Services (XML/SOAP) :依靠Web 和 XML 实现的,面向对象的远程过程调用
Visual C
++ V
isual C++
开发基础开发基础
网络通信编程涉及的相关概念通信协议 /协议族地址 /端口 /端点服务端 /客户端后台服务程序 /连接数侦听 /连接同步 /异步打包 / 解包编码 / 解码发送 /接收会话 / 进程 / 线程交易 /队列 /负载平衡