34
Visual C++ Visual C++ 开开 2002 开 9 开 7 开 开开 2002 开 9 开 8 开 ~2002 开 10 开 11 开 开开开 开开开 开开 开开开 Visual C++ 开开开开

Visual C++ 开发基础

  • 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

Page 1: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

成稿 2002 年 9 月 7 日修订 2002年 9月 8日 ~2002年 10 月

11 日撰稿人 王咏刚

主讲 王咏刚

Visual C++ 开发基础

Page 2: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

Visual C++ 是如何诞生的?C 语言和 C++ 语言是如何诞生的?C 语言和 C++ 语言究竟有什么关系?C 语言、 C++ 语言和 Java 语言、 C# 语言有什么关系?

几个与历史有关的问题

Page 3: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

最适用的语言才是最好的语

最适用的语言才是最好的语

言言

高级程序设计语言的发展历史

Page 4: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

B. Stroustrup J. Gosling A. Hejlsberg

三个影响历史的关键人物

Page 5: Visual C++  开发基础

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 语言的演化

Page 6: Visual 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++ 语言的演化

Page 7: Visual 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

一门完整的程序设计语言必须具备的要素

Page 8: Visual C++  开发基础

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++ 程序例子

Page 9: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

程序中的数据究竟存储在什么位置?下面这些数据的存储位置相同吗?全局变量局部变量动态分配的变量空间什么是虚拟存储空间?什么是线性地址?什么是内存交换文件?

几个问题

Page 10: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

计算机是处理数据的自动机。

程序运行时,数据的存储位置有3

个:

静态存储区、堆、栈

数据的存储位置

Page 11: Visual C++  开发基础

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++ 程序例子

Page 12: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

什么是编译?什么是连接?为什么要编译和连接?

几个问题

Page 13: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

C++

代码的编译和连接

Page 14: Visual 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++ 简介

Page 15: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

演示 Visual C++ 开发控制台程序的方法扼要演示 Visual C++ 开发静态连接库的方法扼要演示 Visual C++ 开发动态连接库的方法

用 Visual C++ 开发控制台程序

Page 16: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

WIN 32GUI 程序的要素 进程 线程 窗口 资源 窗口类 窗口属性 窗口函数 消息 消息队列 消息处理 对话框

WIN32 是基于 DLL 的运行环境kernel32.dlluser32.dllgdi32.dll演示Microsoft Depends 的用法

什么是 WIN32 环境?什么是 GUI 程序?

演示 Visual C++资源编辑器的用法DIALOGICONMENUBITMAPSTRINGVERSION

Page 17: Visual C++  开发基础

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

Page 18: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

基本的 WIN32 程序包含两个主要函数, WinMain和 WndProc :WinMain 函数注册窗口类创建窗口显示窗口消息循环

WndProc 回调函数处理消息未处理消息传给 DefWindowProc

开发一个简单的 WIN32窗口程序

主消息循环代码的写法while(GetMessage(&msg, NULL, 0, 0)){

TranslateMessage(&msg);DispatchMessage(&msg);

}

Page 19: Visual C++  开发基础

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

Page 20: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

Child Windows

在 WM_CREATE 消息中创建子窗口创建一个包含图形元素的子窗口创建一个按钮子窗口WM_SIZE 的处理WM_PAINT 的处理WM_CLOSE 的处理WM_DESTROY 的处理

WIN32 Controls

StaticEditButtonRadioButtonCheckBoxListComboBoxProgressScollBars

开发一个简单的 WIN32窗口程序

Page 21: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

#include <windows.h>

… WinMain(…){ // DialogBox(…);}… DialogProc(…){ // switch(…) // WM_INITDIALOG // EndDialog();}

Dialog

模式对话框无模式对话框

开发一个简单的 WIN32对话框程序

Page 22: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

MFC 是 Microsoft提供的类库,包含了以下功能 用户界面开发(对话框,单窗口和多窗口) 基本文件 I/O 数据库开发 网络编程( TCP/IP, FTP, Internet… ) OLE支持( OLE 容器,客户端,复合文档) ActiveX支持(用户控件、自动化对象) 容器类(数据结构、基本算法) 调试、跟踪、测试支持

什么是 MFC ?

Page 23: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

MFC 的类结构: CObject 是其中最基本的类

Page 24: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

向导生成的是源代码的框架MFC 的应用程序向导

Page 25: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

使用 Visual C++提供的 ClassWizard工具(该工具的使用方式在 Visual Studio .NET 中略有变化)在 ClassWizard 中添加消息处理过程在 ClassWizard 中添加新类使用 Visual C++提供的类视图工具

使用 MFC 开发对话框程序

演示 ClassWizard 的用法新建类添加类成员类的继承关系多态、重载的实现消息处理控件 - 变量对应关系

Page 26: Visual C++  开发基础

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 生成的框架代码的结构

Page 27: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

Visual C++ 的文档 -视结构使用 MFC 开发窗口程序

Page 28: Visual C++  开发基础

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 开发窗口程序

Page 29: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

MFC 下图形对象、控件的用法OnDraw()使用 CPaintDC 和 CDC

CPenCBrushCFont……

CMenuCButtonCProgressCtrlCListBoxCListView/CListCtrlCTreeView/CTreeCtrl……

Page 30: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

管理文档 -视结构

CDoucment:

OnNewDocument()OnOpenDocument()Serialize()UpdateAllViews()IsModified()SetModifiedFlag()

CView:

PreCreateWindow()OnDraw()GetDocument()OnUpdate()

CFrameWnd:

GetActiveFrame()GetActiveView()GetActiveDocument()LoadFrame()

Page 31: Visual C++  开发基础

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 自动化对象

Page 32: Visual C++  开发基础

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, …

应用程序

网络连接

Page 33: Visual C++  开发基础

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 实现的,面向对象的远程过程调用

Page 34: Visual C++  开发基础

Visual C

++ V

isual C++

开发基础开发基础

网络通信编程涉及的相关概念通信协议 /协议族地址 /端口 /端点服务端 /客户端后台服务程序 /连接数侦听 /连接同步 /异步打包 / 解包编码 / 解码发送 /接收会话 / 进程 / 线程交易 /队列 /负载平衡