VC++编程基础知识(整理)_第1页
VC++编程基础知识(整理)_第2页
VC++编程基础知识(整理)_第3页
VC++编程基础知识(整理)_第4页
VC++编程基础知识(整理)_第5页
已阅读5页,还剩126页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VC+编程基础(补充)一、Windows应用程序二、VC+编程环境介绍三、VC+交互编程基础四、Windows图形编程1.Windows应用程序的相关概念Windows应用程序设计方法(1)使用Windows提供的Windows API函数 Windows API是Windows系统和Windows应用程序间的标准程序接口,应用程序可以通过此接口访问系统(2)使用Microsoft提供的MFC类库 MFC类库集成了大量已经预先定义好的类,用户可以根据编程的需要调用相应的类,或根据需要自定义有关的类。 2.Windows应用程序的相关概念Windows应用程序开发模式值得注意的几个方面: Mes

2、sage Processing The Windows Graphics Device Interface Resource-Based Programming Memory Management Dynamic Link Libraries The Win32 Application Programming Interface3.Windows应用程序的相关概念Windows应用程序基本结构: 开始执行初始化应用初始化和创建应用窗口进入消息循环并从消息队列得到一个消息当前消息是否“退出”?终止执行程序是否定义了对此消息的处理进行默认处理处理消息4.Windows应用程序的相关概念Window

3、s应用程序以消息为基础,以事件驱动之。 事件驱动程序设计是围绕着消息的产生与处理而展开的。一条消息是关于发生的事件的信息。作为一个Windows程序员,其工作就是对正开发的应用程序所要发出或要接收的消息进行排序和管理。 5.Windows应用程序的相关概念Windows消息的结构MSG:typedef struct tagMSG HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; MSG, *PMSG; 6.Windows应用程序的相关概念Windows消息的处理:MSG msg /定义一个M

4、SG类型的变量while (GetMessage (&msg, NULL, 0, 0) /产生一个消息循环,等待消息的到来 TranslateMessage (&msg) ; /解译消息 DispatchMessage (&msg) ; /将消息传递给窗口函数,以便处理相应的消息7.Windows应用程序的相关概念Windows应用程序中的数据类型及常量 typedefunsigned char BYTEtypedefunsigned short WORDtypedefunsigned long DWORDtypedeflong LONGtypedefchar *PSTRtypedef cha

5、r NEAR *NPSTtypedefchar FAR*LPSTRtypedefvoid VOID#denfineWM_QUIT0X00128.Windows应用程序的相关概念Windows应用程序中的数据类型及常量 类型 说明CS 窗口类的风格(Class Style)IDI 预定义的图标对象的标识符(IDentity of Icon)IDC 预定义的光标对象的标识符(IDentity of Cursor)WS 窗口的风格(Windows Style)CW 创建窗口(Create Windows)WM 窗口消息(Windows Message)DT 绘制文本(Drawing Text)一些常

6、见常量的前缀意义9.Windows应用程序的相关概念Windows应用程序中的数据类型及常量 在变量名的表示方法方面,Windows推荐使用一种称为“匈牙利表示法”的方法。每个变量名用小写字母或描述了变量的数据类型的字母作为前缀,变量的名字紧跟其后,且用大写字母开始的单词(一个或多个单词)表示其含义,这样每个变量都能附加上其数据类型的助记符。例如:WORDwOffset ;/ w表示WORD类型 DWORD dwValue ; / dw表示DWORD类型 10.Windows应用程序的相关概念Windows应用程序中的数据类型及常量 类型 说明b BOOL,布尔类型by BYTE类型c cha

7、r类型dw DWORD类型l LONG类型lp 远(长)指针(long pointer)n 短整型p 指针s 字符串11.VC+编程环境介绍1 Visual C+简介 是Windows环境下最主要的应用开发系统之一 是C+语言的集成开发环境 与Win32紧密相连 强大的调试功能为大型复杂软件的开发提供了有效的排错手段2 可视化 指软件开发阶段的可视化 利用计算机图形技术和方法12.VC+编程环境介绍3 开发环境开发环境是程序员同VC+的交互界面通过它,可以创建工程文件访问资源编辑器使用内部调试器访问程序源代码13.File-New-Files(1) VC+的菜单栏 File菜单Visual C

8、+6.0可以创建的文件类型 文件类型 说明 文件类型 说明 Active Server Page 网页制作 Binary File 创建二进制文件 Bitmap File 创建位图文件 C+ Source File 创建C+源文件 C/C+ Header File 创建C/C+头文件 Cursor File 创建光标文件 HTML Page 创建HTML文件 Icon File 创建图标文件 Resource Script 创建资源脚本文件 Text File 文本文件 Resource Template 创建资源模板文件 SQL Script File 创建SQL脚本文件 14.File-N

9、ew-Projects15.断点作用: 中断程序的执行过程,以便检查程序代码、变量和寄存器值位置断点数据断点消息断点用来设置删除和查看断点(a) Breakpoints选项(2) VC+的菜单栏 Edit菜单16.(b) List Members选项 利用此选项,可减轻输入代码的工作量。如在变量名之后键入“.”或“-”,系统就会自动显示所有有效的成员名供选择(c) Type Info选项 如果在源代码中将鼠标指针停在某一变量或函数上,那么系统将显示所指变量或函数等的语法提供有效的成员名17.(d) Parameter Info选项 当输入代码时,若在输入函数名之后键入左括号,系统将显示该函数的

10、完整原型,并用黑体显示其第一个参数。输入第一个参数之后,接着就会出现第二个参数,依此类推(e) Complete Word选项 系统自动完成当前语句其余部分的输入。如果不能自动完成,则给出适当的提示辅助用户完成18. 在View菜单中可以:改变窗口改变工具栏的显示方式检查源代码激活调试等View-ClassWizard选项(a) ClassWizard选项(3) VC+的菜单栏 View菜单19.(a-1) ClassWizard 中的Message Maps选项卡为窗口、对话框、控件、菜单选项和加速键等对象映射消息创建或删除消息处理函数查看编辑消息处理函数的代码20.(a-2) Member

11、 Variables选项卡: 定义成员变量用于自动初始化其中: Control IDs是映射到成员变量的控件ID值 Type是成员变量的类型 Member是成员变量名21.(b) Resource Symbols选项 该选项将打开资源符号浏览器,从中可以浏览资源编辑符号资源编辑符号是映射到整数值上的一串字符,相当于资源的一个代号,在同一个程序中,资源编辑符号不能重复22.(c) Resource Includes选项 该对话框包含资源符号头文件名和预处理指令。23.(d) Workspace选项 如果工作区没有显示或者不是处于当前状态,则选择该项将显示工作区窗口。(e) Output选项 在输

12、出窗口中显示程序建立过程(如编译、链接等)的有关信息或错误信息,并且显示调试运行时的输出结果。24.(a) New Class选项 该选项用来创建新类并添加到项目中(4) VC+的菜单栏Insert菜单25.(b) New Form选项 该选项用来创建新的表单并添加到项目中(c) Resource选项 该选项将打开Insert Resource对话框,用以创建新的资源或插入资源文件中 (d) Resource Copy选项 要选中该选项必须先选中某个资源,否则呈灰色。该选项用于复制选定的资源26. 使用Project可以创建、修改和存储正在编辑的工程文件 工程文件组合了一个应用程序的所有源文件

13、的组成部分。工程文件包含在扩展名为.MAK的文件中。(5) VC+的菜单栏 Project菜单27.(b) Add To Project选项 选择该选项将打开一个级联子菜单,通过级连子菜单,可以把文件、文件夹、数据链接以及VC组件或控件添加到当前工程文件中(a) Set Active Project选项 设定指定的项目为工作区的活动项目28.(c) Settings选项 选择该选项将弹出Project Settings对话框,其中 General选项卡用来设置基础类用法和目录指出应用程序与MFC的链接方式指出所建立的应用程序的缺省位置为Debug目录输出文件的位置29.Build菜单用于编译、

14、建立和执行应用程序(b) Build选项 对最后修改过的源文件进行编译和链接(a) Compile选项 只编译当前文件而不调用链接器或其它工具。输出窗口将显示编译过程检查出的错误或警告信息,在错误信息处单击鼠标右键,可以得到错误代码的位置(c) Rebuild All选项 该选项允许用户编译所有的源文件,而不管它们何时曾经被修改过(6) V C+的菜单栏Build菜单30.(d) Batch Build选项 该选项能单步重新建立多个工程文件,并允许用户指定要建立的项目类型Win32 Release(发行版)、Win32 Debug(调试版)。VC提供了两种应用程序类型31.(e) Start

15、Debug选项从当前语句开始执行程序直到遇到断点或遇到程序结束单步执行程序,并在遇到函数调用时进入函数内部再从头单步执行使程序在运行到当前光标所在位置时停止(相当于设置一个临时断点)调试过程中直接进入到正在运行的进程中32.(a)Source Browse选项 编译器在建立项目时会创建与项目中每一程序文件信息有关的.SBR文件。BSCMAKE程序将这些.SBR文件汇编为单个浏览信息数据库 选择Source Browse将弹出浏览窗口,它显示与程序中所有符号(类、函数、数据、宏和类型)有关的信息Tools菜单允许用户快速地访问多个不同的开发工具(7) VC+的菜单栏Tools菜单33.在工作区中

16、添加项目: 用File-Open选项可打开已存在的项目;通过New对话框的Projects选项卡创建新的项目,并选择Add to current workspace复选框。 VC以项目工作区的形式来组织文件、项目和项目配置1. 创建新的项目工作区创建新的空工作区步骤:(a) File-New-Workspaces- 输入工作区名字并指定工作区目录34.2. 项目工作区窗口简介 VC项目工作区由ClassView、ResourceView及FileView三个面板组成35. 在VC中,源代码或资源编辑器为了引用资源和用户自定义的其它对象,于是就引入了一种与资源一一对应的符号即资源符号,使之能够以

17、字符串的方式被引用。 资源符号是映射到整数值上的一串字符,是一种标识符。每当创建一个新的资源或资源对象时,系统就会为其提供一个缺省的资源符号名称并赋一个整数值,该定义保存在resource.h文件中。资源图标光标菜单位图对话框资源是一种界面元素,用户可以从中获得信息并在其中执行某个动作资源及资源编辑器36.资源符号的取值范围一般为032767(2) 资源符号定义的常用前缀 37.VC Programmers Guide:VC程序员指南。VC Users Guide:VC用户指南。VC Tutorials:VC教程。MFC and Templates:微软基础类库和模板参考信息。Language

18、s and Libraries for C+:C+语言和库文件信息。VC帮助系统主要提供五个方面内容联机帮助38.VC+交互编程基础 MFC是用来编写Windows应用程序的C+类集,该类集以层次结构组织起来,其中封装了大部分Windows API函数和Windows控件,它所包含的功能涉及到整个Windows操作系统。 MFC不仅为用户提供了 Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件。39.MFC库中的类按层次关系划分类:(1)根类:CObject(2)应用程序体系结构类(3)窗口、对话框和控件类(4)绘图和打印类(5)简单数据类型类(6)数组、列表和映射类(7

19、)文件和数据库类(8)Internet和网络工作类(9)OLE类(10)调试和异常类VC+交互编程基础40.应用程序体系结构类1命令相关类:CCmdTarget类该类是CObject的子类,它是MFC库中所有具有消息映射属性的基类。消息映射规定了当一对象接收到消息命令时,应调用哪一个函数对该消息进行处理2线程基类:CWinThread类所有线程的基类,可直接使用。CWinApp类就是从CWinThread类中派生出来的41.4文档/视类 文档对象由文档模板对象创建,管理应用程序的数据。视对象表示一个窗口的客户区,显示文档数据并允许用户与之交互3窗口应用程序类:CWinApp类 每个应用程序有且

20、只有一个应用程序对象,在运行程序中该对象与其它对象相互协调,该对象从CWinApp类中派生出来。CWinApp类封装了初始化、运行、终止应用程序的代码。应用程序体系结构类42.可视对象类2视类:CView类该类表示框架窗口的客户区和显示文档数据并接收输入的客户区,其派生类主要有如下几种:CScrollView:具有滚动功能的视的基类CFormView:其布局在对话资源中定义的滚动视CEditView:具有文本编辑、查找、替换和滚动功能的视1窗口类:CWnd类CWnd提供了MFC中所有窗口类的基本功能,是CCmdTarget类的子类创建Windows窗口要分两步进行引入构造函数,构造一个CWnd

21、对象调用Create建立Windows窗口,并将它连到CWnd对象上43.3菜单类:CMenu类该类是CObject类的子类,用于管理菜单。它是一个Windows HMenu的封装,提供了与窗口有关的菜单资源建立、修改、跟踪及删除的成员函数。4对话框类:CDialog类由于对话框是一个特殊的窗口,所以该类是从CWnd类中派生出来的。对话框子层次结构包括通用对话框类CDialog以及支持文件选择、颜色选择、字体选择、打印、替换文本的公共对话框子类。可视对象类44.5控件类 控件子层次结构包括若干类,使用这些类可建立静态文本、命令按钮、位图按钮、列表框、组合框、滚动条、编辑框等。这些直观控件为Wi

22、ndows应用程序提供了各种输入和显示界面。6控件条类:CControlBar类 控件条子层次结构为工具条、状态条、对话条和分割窗口建立模型。该类是CToolBar、CStatusBar、CDialogBar的基类,负责管理工具条、状态条、对话条的一些成员函数。控件条指的是连接在主窗口框架的顶部或底部的小窗口可视对象类45.7绘画对象类:CGdiObject类图形绘画对象子层次结构以CGdiObject类为根类,可用于建立绘画对象模型,如画笔、刷子、字体、位图、调色板等。8设备描述表类:CDC类该类及其子类支持设备描述表对象,是CObject类的子类。CDC类是一个较大的类,包括许多成员函数,

23、如映射函数、绘画工具函数、区域函数等,通过CDC对象的成员函数可以完成所有的绘画工作可视对象类46.VC+交互编程基础MFC 中全局函数和全局变量AfxAbort: 无条件终止一个应用程序AfxBeginThread: 创建一个新线程并执行它AfxEndThread: 终止当前正在执行的线程AfxMessageBox: 显示一个Windows消息框AfxGetApp: 返回当前应用程序对象的指针AfxGetInstanceHandle:返回标识当前应用程序对象的句柄AfxRegisterWndClass: 注册用于创建Windows窗口的窗口类theApp 应用程序唯一的全局对象 47.应用程

24、序向导48.应用程序向导49.应用程序向导50.应用程序向导51.应用程序向导52.应用程序向导53.应用程序向导54.应用程序向导55.图形设备接口GDI Windows图形设备接口(GDI)是为与设备无关的图形设计的。所谓设备的无关性,就是操作系统屏蔽了硬件设备的差异,因而设备无关性能使用户编程时无需考虑特殊的硬件设置。 GDI负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上显示图形或文字。56.GDI的一些概念绘图工具对象绘图函数文本的显示图形设备接口GDI57.GDI的一些概念绘图工具对象绘图函数文本和字体图形设备接口GDI58.Windows系统外设直接访问不允许统一的设备

25、环境(DC)提供使应用程序与设备相连用户GDI的一些概念设备环境(上下文)DC59.GDI的一些概念CDC类 CDC类提供与绘图有关的所有操作函数,如:绘图工具对象的选择;绘图属性、映射模式、视口等的设置;提供坐标转换、裁剪和绘制简单图形、显示文本的函数等。 派生自CDC类的还有CPaintDC、 CClientDC、 CWindowDC 、CMetaFileDC。 60.GDI的一些概念CDC类CreateDC、CreateCompatibleDC、DeleteDC Attach、Detach GetCurrentBrush、GetCurrentFont、GetCurrentPalette、

26、GetCurrentPen、GetWindow SelectObject、SelectStockObjectSelectPalette、RealizePaletteGetBkColor、SetBkColor、GetBkMode、SetBkMode、GetPolyFillMode、SetPolyFillMode、GetROP2、SetROP2、GetStretchBltMode、SetStretchBltMode、GetTextColor、SetTextColorGetMapMode、SetMapMode、GetViewportExt、SetViewportExt、GetWindowExt、Se

27、tWindowExtPatBlt、BitBlt、StretchBlt、GetPixel、SetPixel61.图形刷新图形刷新是绘图过程中必须考虑的重要问题刷新请求对刷新请求的响应刷新方法包括(1) 刷新请求 窗口大小的调整窗口移动被覆盖后的恢复GDI的一些概念62.GDI的一些概念(2) 系统对刷新请求的响应 当用户区的内容需要刷新时,系统向应用程序消息队列发送WM_PAINT消息三种刷新窗口移动后的刷新被覆盖区域的刷新对象穿越后的刷新(系统自动完成)用户区移动或显示用户窗口大小改变程序通过滚动条滚动窗口窗口被另一个窗口覆盖的恢复如下拉式菜单关闭等光标穿过用户区图标拖过用户区63.窗口被另一

28、个窗口覆盖的区域称为无效区域。 Windows系统为每个窗口建立了一个PAINTSTRUCT结构,该结构中包含了包围无效区域的一个最小矩形的结构RECT,应用程序可以根据这个无效矩形执行刷新操作。 typedef struct tagPAINTSTRUCT HDC hdc; /设备环境句柄 BOOL fErase; /一般取真值,表示擦除无效矩形的背景 RECT rcPaint;/无效矩形标识 BOOL fRestore; /系统保留 BOOL fIncUpdate;/系统保留 BYTE rgbReserved32;/系统保留 PAINTSTRUCT;GDI的一些概念64.常用的windows

29、应用程序刷新窗口的方法保存副本。刷新时将副本拷贝到相应的窗口中。记录事件。刷新时重新执行这个曾经发生的事件。重新绘制。将图形绘制处理程序放在消息WM_PAINT响应模块中,刷新时重绘图形。(3) 有效的刷新方法GDI的一些概念65.激活刷新的MFC窗口类的函数GDI的一些概念BOOL InvalidateRect( LPCRECT lpRect, BOOL bErase = TRUE );BOOL Invalidate( BOOL bErase = TRUE ); void InvalidateRgn( HRGN hRgn, BOOL bErase = TRUE ); 66.获取设备环境DC的

30、方法 获取设备环境是应用程序输出图形的先决条件,常用的两种方法是调用函数BeginPaint或GetDC 1、应用程序响应WM_PAINT消息进行图形刷新时,主要通过调用BeginPaint函数获取设备环境 hdc=BeginPaint(hwnd,&ps);/ps为PAINTSTRUCT类型结构由BeginPaint函数获取的设备环境要用EndPaint函数释放BOOL EndPaint(HWND hwnd, PAINTSTRUCT &ps)GDI的一些概念67. 2、如果绘图工作并非由WM_PAINT消息驱动,则调用GetDC函数获取设备环境或CClientDC 构造一CDC对象。CWnd:

31、GetDC CDC* GetDC( );CDC* GetWindowDC( ); CClientDC( CWnd* pWnd ); 由GetDC函数获取的设备环境必须用ReleaseDC函数释放。GDI的一些概念68.GDI的一些概念BeginPaint与GetDC的区别项目 函数BeginPaint函数GetDc函数使用环境只用于图形刷新时获取设备环境使用较为广泛操作区域使用BeginPaint函数获取设备环境后,操作区域为无效区域使用GetDC函数获取设备环境后,操作区域为整个用户区释放设备环境所用函数由EndPaint函数释放由ReleaseDC函数释放获取设备环境DC的方法69.映像模

32、式 映像模式定义了将逻辑单位转化为设备的度量单位以及设备的x方向和y方向,程序员可在一个统一的逻辑坐标系中操作而不必考虑输出设备的坐标系。窗口:对应逻辑坐标系上程序员设定的区域视口:对应实际输出设备上程序员设定的区域GDI的一些概念70.GDI的一些概念窗口视区变换通常解决下面几个方面的问题:(1)窗口逻辑坐标与视区设备坐标之间的转换。(2)用户坐标系到屏幕坐标系,坐标轴方向可能改变,还有坐标原点的映射问题;(3)用户坐标系中窗口区的图形坐标转换到视图区上的坐标需要取整。(4)如果视图区水平分辨率和垂直分辨率不同,为了保持图形不变形,还要进行比例变换。 71.缺省的映射模式将窗口中的对称图形映

33、射到视口时仍为对称图形按照窗口和视口的坐标比例进行映射GDI的一些概念72. 应用程序可获取设备环境的当前映像模式,并根据需要设置映像模式。GDI的一些概念CDC:GetMapModeCDC:SetMapModeint GetMapMode( ) const;virtual int SetMapMode( int nMapMode ); 73.图形设备接口GDIGDI的一些概念绘图工具对象绘图函数文本的显示74.CGdiObject 绘图工具对象75.1. 画笔(CPen )画笔的创建CPen( int nPenStyle, int nWidth, COLORREF crColor );CPe

34、n( int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL );BOOL CreatePen( int nPenStyle, int nWidth, COLORREF crColor );BOOL CreatePen( int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL );画笔的操作创建画笔

35、将画笔选入设备环境删除画笔绘图工具对象PS_DASHPS_DASHDOTPS_DASHDOTDOTPS_DOTPS_INSIDEFRAMEPS_NULLPS_SOLID76.创建画笔后,必须调用SelectObject函数将其选入设备环境。不再使用当前画笔时,需删除画笔,以免占内存DeleteObject(hP);绘图工具对象 CPen pen(0,width,color);CPen* oldPen = pDC-SelectObject(&pen);绘图操作pDC-SelectObject(oldPen);77.2.画刷(CBrush )CBrush( COLORREF crColor );C

36、Brush( int nIndex, COLORREF crColor );CBrush( CBitmap* pBitmap );BOOL CreateSolidBrush( COLORREF crColor ); BOOL CreateHatchBrush( int nIndex, COLORREF crColor ); BOOL CreateBrushIndirect( const LOGBRUSH* lpLogBrush );BOOL CreatePatternBrush( CBitmap* pBitmap ); BOOL CreateDIBPatternBrush( HGLOBAL h

37、PackedDIB, UINT nUsage );BOOL CreateDIBPatternBrush( const void* lpPackedDIB, UINT nUsage );BOOL CreateSysColorBrush( int nIndex ); 绘图工具对象78.CBrush brush; brush.CreateSysColorBrush(COLOR_BTNFACE); / Select the brush into the device context. CBrush* pOldBrush = (CBrush*)pDC-SelectObject(&brush); / Dr

38、aw. CRect rect(50, 50, 150, 150); pDC-Rectangle(rect); / Reselect the original brush. pDC-SelectObject(pOldBrush); 绘图工具对象2.画刷(CBrush )79.BOOL CreatePalette( LPLOGPALETTE lpLogPalette ); BOOL CreateHalftonePalette( CDC* pDC ); UINT GetPaletteEntries( UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY

39、 lpPaletteColors ) const; UINT SetPaletteEntries( UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors ); 绘图工具对象3.调色板(CPalette )typedef struct tagPALETTEENTRY BYTE peRed; BYTE peGreen; BYTE peBlue; BYTE peFlags; PALETTEENTRY; typedef struct tagLOGPALETTE WORD palVersion; WORD palNumEnt

40、ries; PALETTEENTRY palPalEntry1; LOGPALETTE; 80.BOOL CreateRectRgn( int x1, int y1, int x2, int y2 ); BOOL CreateRectRgnIndirect( LPCRECT lpRect ); BOOL CreateEllipticRgn( int x1, int y1, int x2, int y2 ); BOOL CreateEllipticRgnIndirect( LPCRECT lpRect ); BOOL CreatePolygonRgn( LPPOINT lpPoints, int

41、 nCount, int nMode ); BOOL CreatePolyPolygonRgn( LPPOINT lpPoints, LPINT lpPolyCounts, int nCount, int nPolyFillMode ); BOOL CreateRoundRectRgn( int x1, int y1, int x2, int y2, int x3, int y3 ); int CombineRgn( CRgn* pRgn1, CRgn* pRgn2, int nCombineMode ); 绘图工具对象4. CRgn81.图形设备接口GDIGDI的一些概念绘图工具对象绘图函数

42、文本的显示82.CDC的绘图函数:CPoint GetCurrentPosition( ) const; CPoint MoveTo( int x, int y );CPoint MoveTo( POINT point );BOOL LineTo( int x, int y );BOOL LineTo( POINT point );BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd );绘图函

43、数(x1,y1)(x2,y2)(x3,y3)(x4,y4)所画曲线83.CDC的绘图函数:BOOL AngleArc( int x, int y, int nRadius, float fStartAngle, float fSweepAngle ); BOOL LineTo( int x, int y );BOOL Polyline( LPPOINT lpPoints, int nCount ); BOOL PolyPolyline( const POINT* lpPoints, const DWORD* lpPolyPoints, int nCount ); BOOL PolyBezier

44、( const POINT* lpPoints, int nCount ); BOOL DrawIcon( int x, int y, HICON hIcon );void DrawDragRect( LPCRECT lpRect, SIZE size, LPCRECT lpRectLast, SIZE sizeLast, CBrush* pBrush = NULL, CBrush* pBrushLast = NULL );void Draw3dRect( LPCRECT lpRect, COLORREF clrTopLeft, COLORREF clrBottomRight );绘图函数84

45、.CDC的绘图函数:BOOL Chord( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );BOOL Chord( LPCRECT lpRect, POINT ptStart, POINT ptEnd );BOOL Pie( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );BOOL Pie( LPCRECT lpRect, POINT ptStart, POINT ptEnd );绘图函数(x1,y1)(x2,y2)(x3,y3)(

46、x4,y4)所填区域85.CDC的绘图函数:BOOL Ellipse( int x1, int y1, int x2, int y2 );BOOL Ellipse( LPCRECT lpRect );BOOL Polygon( LPPOINT lpPoints, int nCount ); int SetPolyFillMode( int nPolyFillMode ); BOOL PolyPolygon( LPPOINT lpPoints, LPINT lpPolyCounts, int nCount ); BOOL Rectangle( int x1, int y1, int x2, in

47、t y2 );BOOL Rectangle( LPCRECT lpRect );void DrawFocusRect( LPCRECT lpRect ); BOOL RoundRect( int x1, int y1, int x2, int y2, int x3, int y3 );BOOL RoundRect( LPCRECT lpRect, POINT point );绘图函数86.图形设备接口GDIGDI的一些概念绘图工具对象绘图函数文本和字体87.文本和字体 使用定义好的与设备无关的字体集, Windows就能维护它的设备无关性,提供“所见即所得”的好处,即屏幕所见与设备输出的文本是

48、一样的。文本操作先要获得文本句柄设置字体、字符大小、字符颜色等有关属性将这些属性选入设备环境88.文本和字体逻辑字体定义的字符集是设备无关的,它可以精确标度,因此得到广泛应用物理字体是为特殊设备设计的,因而是设备相关的字体 说明ANSI_FIXED ANSI标准的固定宽度的字体ANSI_VAR ANSI标准的可变宽度的字体DEFAULT_GUI当前GUI的缺省字体OEM_FIXED 由标准原设备制造商(OEM)提供DEVICE_DEFAULT当前图形设备的字体SYSTEM_FIXEDWindows的标准固定宽度的字体SYSTEM Windows提供的可变宽度的字体Windows 系统提供了七种

49、基本字体89.文本和字体CFont类BOOL CreateFontIndirect(const LOGFONT* lpLogFont ); BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily,

50、 LPCTSTR lpszFacename ); BOOL CreatePointFont( int nPointSize, LPCTSTR lpszFaceName, CDC* pDC = NULL ); BOOL CreatePointFontIndirect( const LOGFONT* lpLogFont, CDC* pDC = NULL ); 90.文本和字体typedef struct tagLOGFONT LONG lfHeight; LONG lfWidth; /字体高度、宽度 LONG lfEscapement; LONG lfOrientation; /字体角度LONG

51、lfWeight; /字体粗细度BYTE lfItalic; /字体是否倾斜BYTE lfUnderline; /字体是否有下划线BYTE lfStrikeOut; /字体是否有中划线BYTE lfCharSet; /字体所属字符集BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; TCHAR lfFaceNameLF_FACESIZE; /字体名 LOGFONT, *PLOGFONT; 91.文本和字体CFont类CClientDC dc(this); CFont font;VER

52、IFY(font.CreatePointFont(120, Arial, &dc); CFont* def_font = dc.SelectObject(&font); dc.TextOut(5, 5, Hello, 5); dc.SelectObject(def_font); font.DeleteObject(); 92.文本和字体设置字体和背景颜色(CDC)virtual COLORREF SetBkColor( COLORREF crColor ); int SetBkMode( int nBkMode ); virtual COLORREF SetTextColor( COLORRE

53、F crColor ); 输出文字(CDC)virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount );BOOL TextOut( int x, int y, const CString& str );virtual int DrawText( LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat );int DrawText( const CString& str, LPRECT lpRect, UINT nFormat );93.GDI编程的几个问

54、题CRgn类位图相关知识映射模式与窗口-视口变换MFC中的MVC模式编程实例解析94.CRgn类CRgn类的主要方法:1、创建各类多边形区域:BOOL CreateRectRgn( int x1, int y1, int x2, int y2 ); BOOL CreateEllipticRgn( int x1, int y1, int x2, int y2 ); BOOL CreateRoundRectRgn( int x1, int y1, int x2, int y2, int x3, int y3 ); BOOL CreatePolygonRgn( LPPOINT lpPoints, i

55、nt nCount, int nMode ); BOOL CreatePolyPolygonRgn( LPPOINT lpPoints, LPINT lpPolyCounts, int nCount, int nPolyFillMode ); BOOL CreateFromPath( CDC* pDC ); BOOL CreateFromData( const XFORM* lpXForm, int nCount, const RGNDATA* pRgnData ); 95.CRgn类CRgn类的主要方法:2、用于多边形区域的交互拾取:BOOL PtInRegion( int x, int y

56、 ) const; BOOL RectInRegion( LPCRECT lpRect ) const; CRgn类还用于CDC类的裁剪操作:int SelectClipRgn( CRgn* pRgn, int nMode ); virtual BOOL PtVisible( int x, int y ) const; virtual BOOL RectVisible( LPCRECT lpRect ) const;virtual int OffsetClipRgn( int x, int y ); int ExcludeUpdateRgn( CWnd* pWnd ); 96.CRgn类CRg

57、n用于多边形区域的交互拾取例子鼠标当前位置 构造线段的选择矩形区域直线的交互拾取97.CRgn类CRgn用于多边形区域的交互拾取例子椭圆的交互拾取实例代码BOOL CGDI_ExeDoc:GetEllipseAt(CRect& rect, CPoint point)int num = m_ellipseObj.GetSize();CRect rectObj;CRect rectT(point, CSize(1, 1);for(int i = 0; i CreateCompatibleBitmap(&dc, nBmpWidth, nBmpHeight);110.位图相关知识位图应用实例void

58、C*View:OnDraw(CDC* pDC)CDC* pMemDC = new CDC;if (!pMemDC-CreateCompatibleDC(pDC) return;CBitmap* pOldBmp = pMemDC-SelectObject(m_pMapBmp);if(m_bEnableUpDateClientWindow = TRUE)BeginWaitCursor();m_GMDataManage.GMF_ShowWorkSpace(pMemDC, rClient);EndWaitCursor();m_bEnableUpDateClientWindow = FALSE;pDC-

59、BitBlt(0, 0, rClient.Width(), rClient.Height(), pMemDC, 0, 0, SRCCOPY);pMemDC-SelectObject(pOldBmp);delete pMemDC;111.映射模式与窗口-视口变换 窗口-视口变换通常完成逻辑坐标系和设备坐标系之间的坐标变换,在GIS软件中通常是地理坐标系(或高斯直角坐标系)与设备坐标系之间的变换。坐标变换与映射模式有着直接的关联。112.映射模式与窗口-视口变换CDC类中关于坐标变换的函数:/设备坐标到逻辑坐标void DPtoLP( LPPOINT lpPoints, int nCount =

60、1 ) const;void DPtoLP( LPRECT lpRect ) const;void DPtoLP( LPSIZE lpSize ) const;/设备坐标到逻辑坐标void LPtoDP( LPPOINT lpPoints, int nCount = 1 ) const;void LPtoDP( LPRECT lpRect ) const;void LPtoDP( LPSIZE lpSize ) const; 113.映射模式与窗口-视口变换CDC类中关于坐标变换的函数:void DPtoHIMETRIC( LPSIZE lpSize ) const; void HIMETRI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论