340 likes | 668 Views
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 语言
E N D
几个与历史有关的问题 Visual C++是如何诞生的? C语言和C++语言是如何诞生的? C语言和C++语言究竟有什么关系? C语言、C++语言和Java语言、C#语言有什么关系?
高级程序设计语言的发展历史 最适用的语言才是最好的语言
三个影响历史的关键人物 B. Stroustrup J. Gosling A. Hejlsberg
C语言的演化 C语言来自与B语言,B语言是BCPL语言的简化,而BCPL语言又简化自CPL语言 C语言的发明者是贝尔实验室的D. Ritchie 1978年有了以K&R《C语言程序设计》一书为代表的非官方标准。K&R指的是B. Kernighan和D. Ritchie 1989年ANSI颁布了ANSI版的C语言标准,即C89 1999年,ISO/ANSI发布了C语言的最新标准,即C99 直到今天,C语言仍然是一种年轻的和不断进步的语言,仍然是具有最强的系统描述能力的语言
C++语言的演化 1979年,C++语言的雏形,CPre诞生,这种语言也叫“带类的C” 1983年底,C++得名 1984年拥有了非官方的标准C84 1989年非官方标准演化成《带标注的C++参考手册》,即著名的ARM C++语言的官方标准直到1998年9月才正式发布。在国际标准化组织(ISO)的档案库里,C++标准的代号是 ISO/IEC 14882:1998 C++是一中多范例的语言 C++并不是100%和C语言保持兼容 丹麦人B. Stroustrup说:“C++是一种通用程序设计语言,其设计目的就是为了使真正的程序员更多地感受到编程的快乐。”
一个使用C++ Standard Library的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; }
几个问题 程序中的数据究竟存储在什么位置? 下面这些数据的存储位置相同吗? 全局变量 局部变量 动态分配的变量空间 什么是虚拟存储空间? 什么是线性地址? 什么是内存交换文件?
数据的存储位置 计算机是处理数据的自动机。 程序运行时,数据的存储位置有3个: 静态存储区、堆、栈
一个使用了静态存储、堆和栈的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; }
几个问题 什么是编译? 什么是连接? 为什么要编译和连接?
Visual 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++开发控制台程序的方法 扼要演示Visual C++开发静态连接库的方法 扼要演示Visual C++开发动态连接库的方法
什么是WIN32环境?什么是GUI程序? • WIN 32GUI程序的要素 • 进程 • 线程 • 窗口 • 资源 • 窗口类 • 窗口属性 • 窗口函数 • 消息 • 消息队列 • 消息处理 • 对话框 WIN32是基于DLL的运行环境 kernel32.dll user32.dll gdi32.dll 演示Microsoft Depends的用法 演示Visual C++资源编辑器的用法 DIALOG ICON MENU BITMAP STRING VERSION
WIN32窗口系统的核心:消息管理 消息:由一个消息ID,一个wParam(32位)参数和一个lParam(32位)参数组成 typedef struct tagMSG { msg HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; 消息分类 消息队列 消息循环 消息和线程的关系 演示Microsoft Spy++的用法 Processes List Threads List Windows List Window Class Properties Message Logging
开发一个简单的WIN32窗口程序 基本的WIN32程序包含两个主要函数,WinMain和WndProc: WinMain函数 注册窗口类 创建窗口 显示窗口 消息循环 WndProc回调函数 处理消息 未处理消息传给DefWindowProc 主消息循环代码的写法 while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }
开发一个简单的WIN32窗口程序 #include <windows.h> … WinMain(…) { // Instance… // WNDCLASS …; // CreateWindow(…); // Main Message Loop } … WndProc(…) { // switch(…) // WM_CREATE // WM_PAINT // WM_SIZE // WM_CLOSE // WM_DESTROY } DeviceContext PaintDC MemoryDC GDIObject: Pen Brush … Drawing Functions: … User Inputs Mouse Events Keyboard Events Focus
开发一个简单的WIN32窗口程序 WIN32 Controls Static Edit Button RadioButton CheckBox List ComboBox Progress ScollBars Child Windows 在WM_CREATE消息中创建子窗口 创建一个包含图形元素的子窗口 创建一个按钮子窗口 WM_SIZE的处理 WM_PAINT的处理 WM_CLOSE的处理 WM_DESTROY的处理
开发一个简单的WIN32对话框程序 #include <windows.h> … WinMain(…) { // DialogBox(…); } … DialogProc(…) { // switch(…) // WM_INITDIALOG // EndDialog(); } Dialog 模式对话框 无模式对话框
什么是MFC? • MFC是Microsoft提供的类库,包含了以下功能 • 用户界面开发(对话框,单窗口和多窗口) • 基本文件I/O • 数据库开发 • 网络编程(TCP/IP, FTP, Internet…) • OLE支持(OLE容器,客户端,复合文档) • ActiveX支持(用户控件、自动化对象) • 容器类(数据结构、基本算法) • 调试、跟踪、测试支持
MFC的应用程序向导 向导生成的是源代码的框架
使用MFC开发对话框程序 使用Visual C++提供的ClassWizard工具(该工具的使用方式在Visual Studio .NET中略有变化) 在ClassWizard中添加消息处理过程 在ClassWizard中添加新类 使用Visual C++ 提供的类视图工具 演示ClassWizard的用法 新建类 添加类成员 类的继承关系 多态、重载的实现 消息处理 控件-变量对应关系
理解MFC生成的框架代码的结构 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++的文档-视结构
使用MFC开发窗口程序 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下图形对象、控件的用法 OnDraw() 使用CPaintDC和CDC CPen CBrush CFont …… CMenu CButton CProgressCtrl CListBox CListView/CListCtrl CTreeView/CTreeCtrl ……
管理文档-视结构 CFrameWnd: GetActiveFrame() GetActiveView() GetActiveDocument() LoadFrame() CDoucment: OnNewDocument() OnOpenDocument() Serialize() UpdateAllViews() IsModified() SetModifiedFlag() CView: PreCreateWindow() OnDraw() GetDocument() OnUpdate()
使用Visual C++开发数据库访问程序 • 访问数据库的不同方式 • 数据库软件本身的接口API • 嵌入式C语言代码 • ODBC • DAO • RDO • ADO(面向对象的ODBC) • .NET类库中的数据库访问模块 • Visual C++中支持ODBC的类是CDatabase系列 • 支持DAO的是CDaoDatabase系列 • 支持ADO的办法是使用ActiveX自动化对象
基于网络连接的数据库访问基础 应用程序 应用程序开发接口 MFC, VB Controls, … 公共数据库接口 ODBC, ADO, … 特定数据库接口 DB Library in SQL Server, Pro C/OCI in Oracle 客户端通信模块 网络连接 服务端通信模块 服务端交易环境 (数据库脚本语言): 存储过程/触发器/外部存储过程 T-SQL in SQL Server, PL/SQL in Oracle 数据库服务 Database Server 操作系统 OS
网络通信技术概览 基于消息的通信技术 UDP、TCP、COM、Named Pipes 消息队列:MQ 基于成熟应用协议的通信技术 FTP Mail Http (Web Access) 基于远程过程调用的通信技术 RPC:远程过程调用 CORBA:面向对象的远程过程调用 Java RMI:Java语言面向对象的远程过程调用 Web Services (XML/SOAP): 依靠Web和XML实现的, 面向对象的远程过程调用
网络通信编程涉及的相关概念 通信协议/协议族 地址/端口/端点 服务端/客户端 后台服务程序/连接数 侦听/连接 同步/异步 打包/解包 编码/解码 发送/接收 会话/进程/线程 交易/队列/负载平衡