VisualC基础教程.ppt
Visual C+开发基础,Visual C+是如何诞生的?C语言和C+语言是如何诞生的?C语言和C+语言究竟有什么关系?C语言、C+语言和Java语言、C#语言有什么关系?,几个与历史有关的问题,最适用的语言才是最好的语言,高级程序设计语言的发展历史,B.Stroustrup,J.Gosling,A.Hejlsberg,三个影响历史的关键人物,C语言来自与B语言,B语言是BCPL语言的简化,而BCPL语言又简化自CPL语言C语言的发明者是贝尔实验室的D.Ritchie1978年有了以K&RC语言程序设计一书为代表的非官方标准。K&R指的是B.Kernighan和D.Ritchie1989年ANSI颁布了ANSI版的C语言标准,即C891999年,ISO/ANSI发布了C语言的最新标准,即C99直到今天,C语言仍然是一种年轻的和不断进步的语言,仍然是具有最强的系统描述能力的语言,C语言的演化,1979年,C+语言的雏形,CPre诞生,这种语言也叫“带类的C”1983年底,C+得名1984年拥有了非官方的标准C841989年非官方标准演化成带标注的C+参考手册,即著名的ARMC+语言的官方标准直到1998年9月才正式发布。在国际标准化组织(ISO)的档案库里,C+标准的代号是ISO/IEC 14882:1998C+是一中多范例的语言C+并不是100%和C语言保持兼容,丹麦人B.Stroustrup说:“C+是一种通用程序设计语言,其设计目的就是为了使真正的程序员更多地感受到编程的快乐。”,C+语言的演化,一门完整的程序设计语言必须具备的要素,#include#include#include using namespace std;void main()string s;cout s;cout d;cout setw(20)setprecision(2)setiosflags(ios:fixed)d endl;,一个使用C+Standard Library的C+程序例子,程序中的数据究竟存储在什么位置?下面这些数据的存储位置相同吗?全局变量局部变量动态分配的变量空间什么是虚拟存储空间?什么是线性地址?什么是内存交换文件?,几个问题,计算机是处理数据的自动机。程序运行时,数据的存储位置有3个:静态存储区、堆、栈,数据的存储位置,class Xpublic:int m;class Ypublic:int n;void foo(int n)for(int i=0;i n=n;,Y yes;void main()Y*no=new Y();yes.foo(10);no-foo(20);delete no;,一个使用了静态存储、堆和栈的C+程序例子,什么是编译?什么是连接?为什么要编译和连接?,几个问题,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+开发动态连接库的方法,用Visual C+开发控制台程序,WIN 32GUI程序的要素 进程 线程 窗口 资源 窗口类 窗口属性 窗口函数 消息 消息队列 消息处理 对话框,WIN32是基于DLL的运行环境kernel32.dlluser32.dllgdi32.dll演示Microsoft Depends的用法,什么是WIN32环境?什么是GUI程序?,演示Visual C+资源编辑器的用法DIALOGICONMENUBITMAPSTRINGVERSION,消息:由一个消息ID,一个wParam(32位)参数和一个lParam(32位)参数组成typedef struct tagMSG msg HWND hwnd;UINTmessage;WPARAM wParam;LPARAM lParam;DWORDtime;POINTpt;MSG;消息分类消息队列消息循环消息和线程的关系,WIN32窗口系统的核心:消息管理,演示Microsoft Spy+的用法Processes ListThreads ListWindows ListWindow Class PropertiesMessage Logging,基本的WIN32程序包含两个主要函数,WinMain和WndProc:WinMain函数注册窗口类创建窗口显示窗口消息循环WndProc回调函数处理消息未处理消息传给DefWindowProc,开发一个简单的WIN32窗口程序,主消息循环代码的写法while(GetMessage(,#include WinMain()/Instance/WNDCLASS;/CreateWindow();/Main Message Loop WndProc()/switch()/WM_CREATE/WM_PAINT/WM_SIZE/WM_CLOSE/WM_DESTROY,DeviceContextPaintDCMemoryDCGDIObject:Pen Brush Drawing Functions:,开发一个简单的WIN32窗口程序,User InputsMouse EventsKeyboard EventsFocus,Child Windows在WM_CREATE消息中创建子窗口创建一个包含图形元素的子窗口创建一个按钮子窗口WM_SIZE的处理WM_PAINT的处理WM_CLOSE的处理WM_DESTROY的处理,WIN32 ControlsStaticEditButtonRadioButtonCheckBoxListComboBoxProgressScollBars,开发一个简单的WIN32窗口程序,#include WinMain()/DialogBox();DialogProc()/switch()/WM_INITDIALOG/EndDialog();,Dialog模式对话框无模式对话框,开发一个简单的WIN32对话框程序,MFC是Microsoft提供的类库,包含了以下功能用户界面开发(对话框,单窗口和多窗口)基本文件I/O数据库开发网络编程(TCP/IP,FTP,Internet)OLE支持(OLE容器,客户端,复合文档)ActiveX支持(用户控件、自动化对象)容器类(数据结构、基本算法)调试、跟踪、测试支持,什么是MFC?,MFC的类结构:CObject是其中最基本的类,向导生成的是源代码的框架,MFC的应用程序向导,使用Visual C+提供的ClassWizard工具(该工具的使用方式在Visual Studio.NET中略有变化)在ClassWizard中添加消息处理过程在ClassWizard中添加新类使用Visual C+提供的类视图工具,使用MFC开发对话框程序,演示ClassWizard的用法新建类添加类成员类的继承关系多态、重载的实现消息处理控件-变量对应关系,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_MAPEND_MESSAGE_MAP(),理解MFC生成的框架代码的结构,Visual C+的文档-视结构,使用MFC开发窗口程序,Visual C+的文档-视结构4个关键类:CDocTemplate、CDocument、CFrameWnd、CViewCSingleDocTemplate*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开发窗口程序,MFC下图形对象、控件的用法,OnDraw()使用CPaintDC和CDCCPenCBrushCFont,CMenuCButtonCProgressCtrlCListBoxCListView/CListCtrlCTreeView/CTreeCtrl,管理文档-视结构,CDoucment:OnNewDocument()OnOpenDocument()Serialize()UpdateAllViews()IsModified()SetModifiedFlag(),CView:PreCreateWindow()OnDraw()GetDocument()OnUpdate(),CFrameWnd:GetActiveFrame()GetActiveView()GetActiveDocument()LoadFrame(),使用Visual C+开发数据库访问程序,访问数据库的不同方式数据库软件本身的接口API嵌入式C语言代码ODBCDAORDOADO(面向对象的ODBC).NET类库中的数据库访问模块Visual C+中支持ODBC的类是CDatabase系列支持DAO的是CDaoDatabase系列支持ADO的办法是使用ActiveX自动化对象,基于网络连接的数据库访问基础,数据库服务 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,应用程序,网络连接,网络通信技术概览,基于消息的通信技术UDP、TCP、COM、Named Pipes消息队列:MQ基于成熟应用协议的通信技术FTPMailHttp(Web Access)基于远程过程调用的通信技术RPC:远程过程调用CORBA:面向对象的远程过程调用Java RMI:Java语言面向对象的远程过程调用Web Services(XML/SOAP):依靠Web和XML实现的,面向对象的远程过程调用,网络通信编程涉及的相关概念,通信协议/协议族地址/端口/端点服务端/客户端后台服务程序/连接数侦听/连接同步/异步打包/解包编码/解码发送/接收会话/进程/线程交易/队列/负载平衡,