《c语言学习》PPT课件.ppt

上传人:za****8 文档编号:14488693 上传时间:2020-07-21 格式:PPT 页数:166 大小:1.17MB
返回 下载 相关 举报
《c语言学习》PPT课件.ppt_第1页
第1页 / 共166页
《c语言学习》PPT课件.ppt_第2页
第2页 / 共166页
《c语言学习》PPT课件.ppt_第3页
第3页 / 共166页
点击查看更多>>
资源描述
作业提交地址:yg_,1,2,第一章 Visual C+集成开发环境简介,3,项目的创建与编译、链接过程,4,Visual C+ IDE功能组成,编辑: AutoComplete、IntelliSense 编译: 预编译头文件(stdafx.h),可以加快编译速度 链接: 增量式链接、ProjectSettingsLinkLink Incrementally 调试:Edit ,16,显示一个字符串,绘制设备上下文 BeginPaint() EndPaint(),17,添加资源,菜单 对话框,18,SDK程序向MFC程序转变,第一步:WinMain改造为CWinApp 第二步:窗口函数改造为消息映射,19,Win32 API应用程序的修改,InitApplication InitInstance 消息映射结构体,20,为什么使用MFC,是微软提供的Windows编程接口 使应用程序的结构标准化 使应用程序小而且快(DLL) Visual C+降低编码复杂程度 MFC库具有丰富的特性,21,第三章 用AppWizard创建的第一个MFC程序,目的:如何编制一个具有一定功能的MFC类库应用程序(引入简单的视图/文档概念) 什么是视图 用户角度:与其他Windows窗口一样的窗口 程序员:从MFC的Cview类派生的类的一个对象 单文档界面和多文档界面 单文档:一次只能打开一个文档(NotePad) 多文档:一次能打开多个文档(Word),22,应用程序的主要元素 WinMain函数 CMyApp类-theApp CMyApp:InitInstance(); CMyApp:Run() ;/CMyApp:OnIdle() CMyFrame类 CMyFrame:OnLButtonDown、CMyFrame:OnPaint()、CMyFrame:OnDraw() 关闭主画面窗口后关闭应用程序。,23,MFC库消息映射,MFC库对Windows消息映射不采用虚拟函数,而通过宏把特定的消息映射到派生类成员函数。主要是为避免大量的vtable开支。 菜单命令消息和按扭消息的处理与Windows消息一样。 一个MFC消息处理程序需要一个函数原型、一个函数体和一个在消息映射中的项。,24,MFC库消息映射,afx_msg void OnLButtonDown(UINT nFlags,Cpoint point) CMyFrame:OnLButtonDown(UINT nFlags,CPoint point) BEGIN_MESSAGE_MAP(CMyFrame,CFrameWnd) ON_WM_LBUTTONDOWN() END_MESSAGE_MAP(),25,文档和视图,文档-代表数据模型,基类是CDocument 视图-代表用户接口,基类是Cview,26,第一个MFC程序,什么是视图 用户角度:与其他Windows窗口一样的窗口 程序员:从MFC的Cview类派生类的一个对象 单文档界面和多文档界面 单文档:一次只能打开一个文档(NotePad) 多文档:一次能打开多个文档(Word) 在窗口中绘图 通过响应OnDraw()函数来完成绘图 设备上下文 图形设备对象,27,资源编辑器 ex03a.rc包含 afxres.h(只读符号) afxres.rc(通用组件) resource.h(自定义符号) Debug与Release目标 启用诊断宏(C:WINNTafx.ini TraceEnabled=1) Tools/MFC Tracer/enable tracing 予编译头文件(stdafx.cpp stdafx.h),28,在视图窗口中绘图,通过修改OnDraw()函数来完成绘图 是CView类的虚拟成员函数,每次视图重画时调用(WM_PAINTOnPaintOnDraw) 如果程序的数据被改变,则可以调用视图的Invalidate()成员函数,并最终调用OnDraw() InvalidateWM_PAINTOnDraw() 对视图窗口的重画不要过于频繁 画图过程中涉及的MFC类 设备上下文 其他图形设备对象,29,设备上下文,Windows系统不允许直接操作显示硬件,而是通过一个抽象层设备上下文来进行通讯 MFC编程中,设备上下文是CDC及其派生类的对象 添入代码:,30,资源,资源编辑器 ex03a.rc包含 加速器、对话框、图标、菜单、字符串、工具条、版本信息 afxres.h(只读符号),通用的MFC库资源 afxres.rc(通用组件),通用的MFC库资源 resource.h(自定义符号),31,Debug与Release目标,分两个版本:发行版和调试版 区别:源码调试、诊断宏、链接库、编译优化等方面不同 启用诊断宏(C:WINNTafx.ini TraceEnabled=1) Tools/MFC Tracer/enable tracing 予编译头文件(stdafx.cpp stdafx.h) /Yc(stdafx.cpp)、/Yu(复用)、/Fp(pch文件路径)编译开关,32,第四章 基本事件处理、映射模式,MFC类库中有很多On-函数由框架调用,完成对事件的响应。 他们不是虚拟函数,必须通过消息映射结构,使应用框架和我们的代码关联 消息映射 当用户在视图中按下鼠标,Windows发送WM_LBUTTONDOWN消息给视图窗口,视图窗口必须有一个OnLButtonDown(UINT nFlags,CPoint point)成员函数来响应该消息,头文件中加入消息处理函数原型afx_msg void OnLButtonDown(UINT nFlags,CPoint point),通过消息映射宏将框架和函数关联,将消息和消息的响应函数连接的过程称为消息映射。,33,消息映射的步骤:,定义函数:void CMyView:OnLButtonDown(UINT nFlags,CPoint point) 函数原型:afx_msg void OnLButtonDown(UINT nFlags,CPoint point) 消息映射宏 BEGIN_MESSAGE_MAP() ON_WM_LBUTTONDOWN END_MESSAGE_MAP() 头文件中添加: DECLARE_MESSAGE_MAP(),34,保存视图的状态,通过一些状态的变化反映事件,在引入文档类之前,存放在视图的数据成员中 CRect m_rectEllipse;UINT m_nColor 数据成员初始化:放在视图的构造函数中 CEx04aView:CEx04aView():m_rectEllipse(0,0,200,200),m_nColor(GRAY_BRUSH),35,如何反映事件,鼠标点击不会引起重画,需要调用: CWnd:InvalidateRect(LPRECT rect); 视图的客户区: CRect,CSize,Cpoint及其相互运算 如何判断点在矩形内部 CRect rect; if(rect.PtInRect(point). 如何判断点在区域内部 CRgn rgn; rgn.CreateEllipticRgnIndirect(m_rectEllipse); if(rgn.PtInRegion(point). 实例,36,映射方式,为使显示与显示分辨率无关,应使用不同于以像素为单位的坐标系统 设备坐标-以像素表示的坐标值。 逻辑坐标-当前映射方式下的坐标值。 映射方式-逻辑坐标和设备坐标之间的比例关系。 Windows映射方式,映射方式逻辑单位 MM_LOENGLISH 0.01 inch MM_HIENGLISH 0.001 inch MM_LOMETRIC 0.1 mm MM_HIMETRIC 0.01 mm MM_TWIPS 1/1440 inch MM_TEXT1pixel,37,MM_TEXT映射方式,逻辑坐标和设备坐标1:1 坐标X向右增加,坐标Y向下增加 通过调用CDC的SetWindowOrg,SetViewportOrg改变原点 CMyView:OnDraw(CDC* pDC) pDC-SetMapMode(MM_TEXT); pDC-SetWindowOrg(CPoint(100,100); /将逻辑坐标(100,100)设置为窗口原点 ,38,自定义映射方式一:固定缩放的映射方式,向右X增加,向下Y减少,39,自定义映射方式二: 缩放可变的映射方式,可以改变缩放因子和原点 MM_ISOTROPIC和MM_ANISOTROPIC MM_ISOTROPIC纵横比始终是1;1 MM_ANISOTROPIC可以分别改变X和Y缩放因子,40,坐标转换,一些重要的规则: CDC的成员函数使用逻辑坐标 CWnd的成员函数使用设备坐标 在设备坐标系中进行击键测试如(CRect:PtInRect) 用逻辑坐标存储长期的值。 CDC的函数LPtoDP和DPtoLP负责两个系统之间的转换。 在CView:OnPrepareDC()中完成映射方式设定。 编程示例,41,滚动窗口,当窗口比屏幕大时,可能需要滚动视口。 通过从CScrollView中派生视图类可以实现。 在OnInitialUpdate()中定义逻辑大小和映射方式。 见举例,42,第五章 图形设备接口,所有与绘制有关的操作都要用到GDI元素 设备上下文是最重要的GDI元素,代表某个具体的物理设备,43,设备上下文类,基类是CDC,每个设备上下文对象有一个Windows设备上下文,由32位HDC句柄标识 CDC类的虚拟性是应用框架的一个重要特性。 显示器上下文类:CClientDC、CWindowDC等,44,构造和销毁,构造设备上下文对象后,应及时销毁,Windows限制可获取设备上下文的数量。 构造的两种方法,45,设备上下文的状态,使用CDC对象绘图时,屏幕上的内容依赖于设备上下文的当前状态: 绘图需要的相关对象:笔、刷子、字体 映射方式 其他方面(文本对齐方式、填充方式等),46,CPaintDC类,重写了OnPaint函数后,需要用到CPaintDC类 OnPaint用正确设置的CPaintDC调用OnDraw();,47,图形设备接口对象,CBitmap CBrush CFont CPalatte CPen CRgn,48,如何构造和销毁,一步构造 CPen newPen(PS_DASHDOTDOT, 2, (COLORREF) 0); 先定义对象,再创建 CFont font; font.CreateFont(30, 10, 0, 0, 400, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_MODERN, Courier New); / TrueType 如何断开其与设备上下文的关系 先选出设备上下文,然后析构 库存GDI对象自动析构,49,Windows颜色映射,Windows图形设备接口提供独立于硬件的颜色接口 程序中的绝对颜色代码由图形设备接口映射到视频卡的某种或某几种颜色的组合。 VGA模式下提供16种标准纯色 256色视频卡提供20种标准纯色 16位颜色视频卡,可以显示32768中颜色。 24位真彩色。,50,字体,字体是GDI对象 字体的选择 与设备无关的True Type字体和与设备有关的字体(Windows系统显示字体和LaserJet LinePrinter字体) MFC提供选择准确的打印机字体和大小,然后尽力使显示最好。 打印字体 以磅来度量 显示字体 显示字体和打印字体一般不能严格匹配,除非使用MM_TEXT方式。,51,计算字符高度,52,计算字符高度,字体高度=tmHeight-tmInternalHeight(点数) 行高=tmHeight+tmExternalLeading 对应TEXTMETRIC和GetTextMetrics(,53,举例1,54,举例2,55,举例3,56,第六章 模态对话框和Windows公用控件,模态和非模态对话框 模态:在对话框关闭之前,不能转到其他窗口工作 非模态:可以转到其他窗口,但对话框在最顶端,57,对话框与其他窗口类的不同,对话框是基于资源的,资源指定其包含的元素和布局。 对话框包含的窗口元素:控件 一个从CDialog类派生的MFC类完成和对话框界面的联系,58,模态对话框编程,编程步骤 使用对话框编辑器创建对话框资源 ClassWizard生成派生对话框类 ClassWizard添加数据成员 ClassWizard消息映射 特殊控件初始化 在视图中编写代码,激活对话框对象 举例1,59,对话框的运行过程,Cdialog:DoModal(),OnInitDialog,CDialog:OnInitDialog,CWnd:UpdateData(FALSE),DoDatExchange,Cdialog:OnOK,UpdateData(TRUE),60,增强对话框程序,控制OnOK的退出 OnCancel 处理 挂接滚动条控件 改进的ex06a,61,识别控件,CWnd指针和控件ID GetDlgItem返回CWnd指针 GetDlgCtrlID返回ID 设置对话框背景和控件的颜色(WM_CTLCOLOR-OnCtlColor) 在对话框窗口内部画图 运行时增加控件,62,Windows公用控件,在Windows95中引入,NT也提供 包含在comctl32.dll动态连接库中 窗口过程函数及窗口类注册代码包含在该库中 DLL加载时注册窗口类 对公用控件,ClassWizard不能提供数据成员支持,但提供通知消息的映射 应在OnInitDialog和OnOK中分别初始化和读取控件数据,63,几种Windows公用控件,进度指示器控件,对应C+类是CProgressCtrl,可以调用其成员函数SetRange和SetPos进行初始化或更新操作 Slider(跟踪栏控件),对应的C+类是CSliderCtrl,不需要映射WM_HSCROLL和WM_VSCROLL即可滚动。,64,几种Windows公用控件,Spin(微调控件),对应的C+类是CSpinButtonCtrl,经常和一个编辑控件一起使用,称“伙伴”,编辑控件的Tab顺序仅在Spin之前。SetRange()和SetAccel()及AutoBuddy和Set Buddy Integer属性,65,几种Windows公用控件,列表控件,对应的C+类是CListCtrl,需要一个图片文件夹,CImageList类的对象 树型控件,对应的C+类是 CTreeCtrl,用HTREEITEM而不是整型索引,插入时使用TV_INSERTSTRUCT结构,66,控件通知消息结构,早期的Windows控件利用WM_COMMAND发送通知消息 对于Windows公用控件来说,标准的32位wParam和lParam参数是不够的,67,控件通知消息结构,微软提供WM_NOTIFY消息解决这一问题,其结构如下: 举例2,68,第七章 非模态对话框,本章介绍非模态对话框和Windows公用对话框 非模态对话框:在对话框活动的同时允许在其他地方工作。 公用对话框包括:文件、页面设置、颜色选择等,包含在comdlg32.dll中,69,非模态对话框,MFC中类CDialog为基类。 创建: (1)调用CDialog的缺省构造函数构造对象 (2)调用CDialog:Create(IDD)创建 可以通过向视图发送用户定义的消息处理按钮消息。 (1)SendMessage() (2)PostMessage(),70,举例1,71,Windows公用对话框,CColorDialog CFileDialog CFindReplaceDialog CPageSetupDialog CFontDialog CPrintDialog,72,直接使用公用对话框类,73,Windows公用对话框,派生新类 对话框嵌套 创建带有一个特殊成组框的对话框(成组框ID=0 x045f),74,第八章 使用ActiveX控件,1991年推出VB,同时引入VBX VBX被证明是成功的,但它是16位段结构的,不能移植到32位系统 ActiveX是基于COM技术的VBX的强有力的替代 ActiveX的开发可以用MFC和ATL ActiveX可以在VB和VC中使用,75,普通控件和ActiveX控件,普通控件 都是子窗口(经常在对话框中使用) 通过MFC类对象操控 客户程序负责创建控件的子窗口 控件向父窗口发送标准Windows消息(BN_CLICKED) 父窗口通过调用对应控件的C+类的成员函数操作控件,76,普通控件和ActiveX控件,ActiveX控件 属性和方法 属性具有符号名字(可以匹配到整型索引)和类型 方法与函数非常相似 不是向控件容器发送WM_通知消息,而是“触发”事件入Clicked事件 可以没有窗口,窗口的创建是通过控件自己(CreateIn place activation) 常用动态连接库存放,但其扩展名是OCX,77,使用ActiveX控件,安装 拷贝相关文件到系统目录下(*.ocx,*.hlp,*.lic等) 运行Regsvr32 注册 将想要的控件加到项目中,78,ActiveX控件容器的编程,Calender控件 访问属性 控件的C+包装类 AppWizard中对ActiveX的支持 AfxEnableControlContainer() Stdafx.h中的#include 利用ClassWizard添加针对ActiveX控件的数据成员和事件处理函数,79,数据成员,可以向对话框类添加两种数据成员 针对ActiveX控件某个属性的,可以在控件显示出来之前控制其属性的值 针对ActiveX控件的对象数据成员,可以方便地操作属性等 映射控件事件 将控件锁定在内存种 AfxOleLockControl(m_Cal.GetClsId() AfxOleUnlockControl( 一个示例,80,第九章 Internet Explorer 4控件,发布IE4的同时,带有新的COMCTL32.DLL,称IE4公用控件 IE4公用控件介绍 日期和时间选取器 月历 IP协议地址控件 扩展组合框 示例,81,第十章 位图,位图就是一个位矩阵,影射到显示器的象素点上。 GDI位图和DIB位图 GDI位图由MFC的类Cbitmap代表 GDI位图在同一台机器的不同程序间可以传输,但不同机器间不可以 DIB带有自己的颜色信息 彩色位图和单色位图,82,使用GDI位图,位图也是GDI对象之一 首先创建位图 创建内存设备上下文CreateCompatibleDC 将位图选入内存设备上下文SelectObject 从内存设备上下文将位图画到实际的设备上下文BitBlt或StretchBlt(),83,使用GDI位图,从资源中装载位图,84,映射模式的效果,如果映射模式不是MM_TEXT,则位图可能会变形 使用pDC-SetStretchBltMode(COLORONCOLOR);调用可以使显示效果好一些 也可以通过位图拉伸解决问题 示例,85,DIB位图/调色板编程,如果你的程序显示单一DIB位图 创建逻辑调色板(包含DIB位图的颜色信息) 将逻辑调色板“实现”到硬件系统调色板中 如果你的程序是前台程序,实现过程将把DIB位图的所有颜色拷贝到系统调色板(236种颜色,20种由系统保留) 如果另一个程序是前台程序,且要显示236级的绿色场景,则在你的逻辑调色板和系统调色板之间建立映射,假如有一个品红色,则将被映射位标准红色,如果忘了实现调色板,则将被映射为绿色,86,何时“实现”调色板,任何程序实现其调色板的时候,你的程序的主窗口将收到WM_PALETTECHANGED消息 你程序中的任何一个窗口得到焦点时,WM_QUERYNEWPALETTE消息发送 在主框架窗口中应响应这两种消息 用pDC-SelectPalette()将逻辑调色板选入 用RealizePalette 实现,87,DIB、象素和颜色表,一个DIB由一个两维的象素矩阵组成 每个象素由1、4、8、16、32个位组成 对于16bpp、24bpp、32bpp的DIB,每个象素是一个RGB颜色 1bpp、4bpp、8bpp的DIB,有一个颜色表,每个象素是一个指向颜色表的索引 当需要显示的颜色多于显示卡能显示的颜色时: 如果DIB包含重要颜色表 CreateHalftonePalette,88,DIB位图的结构,89,DIB位图的结构,BITMAPFILEHEADER结构 包含到映象位矩阵的偏移量 BITMAPINFOHEADER DIB位映象按列、行组织 从最底行开始 每行填充到4字节对齐,90,DIB存取函数,SetDIBitsToDevice:按一个位图位显示成一个显示象素或一个打印点显示 StretchDIBits:类似于StretchBlt() GetDIBits从一个GDI位图构建DIB CreateDIBitmap:从DIB构建GDI位图 CreateDIBSection:创建一个称为DIB段的特殊DIB,返回一个GDI位图句柄,91,构建自己的Cdib类,示例,92,在按扭上放置位图,93,第四部分 MFC文档/视图结构详解,94,第一章 菜单、键盘加速器及属性表,本章的主要内容是菜单和命令路由架构 同时介绍: 框架、文档和视图的关系 命令用户接口更新函数 键盘加速器 以RichText控件和属性表来介绍,95,主框架窗口,主框架窗口管理菜单条、标题条、工具条、状态条及视图窗口,96,Windows菜单,一般由水平菜单列表及附属的弹出式菜单组成 一般为框架窗口定义默认的菜单资源,创建时自动装载 也可以定义独立的菜单,用户程序负责装载,97,键盘加速键,选择菜单命令的快捷方式(定义菜单时字母前导 Windows应用的启动过程 Windows将程序载入内存 构造全局对象theApp Windows调用全局函数WinMain()AfxWinMain WinMain寻找唯一的一个CWinApp的派生类的对象 WinMain调用theApp的InitInstance()函数 重写的InitInstance()启动载入文档并显示主框架窗口和视图窗口的进程 WinMain调用theApp的Run()函数,进入消息循环,127,文档模板类,建立了应用类、文档类、视图类、框架窗口类之间的关系 MFC类中的DECLARE_DYNCREATE和实现部分的IMPLEMENT_DYNCREATE保证可以动态创建对象 对象的动态构造,解决了用户编码复杂度问题; 使用RUNTIME_CLASS宏通知框架,128,对象间的关系见图,129,文档模板资源,AddDocTemplate()的第一个参数是IDR_MAINFRAME,是字符串表的一个资源编号 其结构如下:,130,CWinApp:OnFileNew(),在调用完InitInstance()之后,调用CWinApp:OnFileNew()通过CWinApp:ProcessShellCommand完成如下操作: 构造文档对象,但不载入数据(串行化) 构造主框架对象,并创建主框架窗口(IDR_MAINFRAME菜单,工具条,状态条),但不显示 构造视图对象,并创建视图窗口,但不显示 建立文档、主框架、视图对象之间的关系 调用虚拟CDocument:OnNewDocument,该函数调用 DeleteContents (实际中经常需要重写) 调用视图的CView:OnInitialUpdate 函数 对框架对象调用虚拟的CFrameWnd:ActivateFrame ,显示主框架窗口、菜单,工具条,状态条,131,关于文档类的其他操作,OnNewDocument()函数,完成一些初始化操作 将文件打开操作和串行化代码关联 提示用户选择文件 对已存在的文档对象,调用CDocument:OnOpenDocument ,该函数调用CDocument:DeleteContents,创建归档对象,调用Serialize载入数据 调用CView:OnInitialUpdate() 文档类的DeleteContents()虚拟函数:如果你要从磁盘载入文档数据(OnFileNew和OnFileOpen),先调用这个函数,一般要重写; 将存盘和另存操作和Serialize()关联,两个操作都要调用OnSaveDocument(),OnSaveDocument()要调用Serialize() 文档“脏”标志,文档类的数据成员m_bModified表示,通过SetModifiedFlag()和IsModified() 示例,132,第五章 MDI应用程序的文档读写,多文档应用程序与单文档应用程序的启动流程基本一致 多文档模板类CMultiDocTemplate MDI框架窗口和子窗口:一个MDI应用拥有一个主框架窗口和多个子框架窗口 主框架窗口直接创建,而子框架窗口则在打开时创建,133,MDI应用程序的资源,主框架和文档模板资源 MDI应用有两个独立的字符串和菜单资源分别由IDR_MAINFRAME和IDR_EXnnTYPE,前者代表只有空的主框架窗口时的资源,134,OnFileNew函数,构造文档对象,但不载入数据 构造子窗口对象,创建子窗口,但不显示 构造视图对象,创建视图窗口,但不显示 建立文档、子框架、视图对象之间的关联 调用OnNewDocument 调用OnInitialUpdate 对子框架窗口调用ActivateFrame,135,对已存在的文档,创建另外的视图,构造子窗口对象,创建子窗口,但不显示 构造视图对象,创建视图窗口,但不显示 建立文档、子框架、视图对象之间的关联 调用OnInitialUpdate 对子框架窗口调用ActivateFrame,136,第六章 打印和打印予览,Windows通过提供各种打印机的驱动程序和统一的编程接口简化了打印编程,对编程用户透明 标准打印机对话框 交互打印纸张选择 打印时显示显示打印状态(张数/打印张数),137,打印机编程,MFC框架为打印及打印予览完成了大部分功能,为此必须了解打印过程中函数调用序列及哪些函数要重写; 打印需要的设备上下文由框架生成,并作为参数 显示: OnPaint-OnDraw,显示设备上下文 打印:OnPrint-OnDraw,打印机设备上下文 OnPrint():每打印一页,调用一次,可以添加打印特有的代码,或也可以选择不调用OnDraw,实现显示与打印完全独立; OnPrepareDC:,可以设置不同的映射模式,在OnPrint之前调用; OnPreparePrinting:是第一个调用的函数,可以设置页码等; OnBeginPrinting:OnEndPrinting,138,打印机编程,几个函数之间的关系: OnPreparePrinting:设置页码 OnBeginPrinting:创建GDI对象 OnPrepareDC:设置映射模式 OnPrint():具体完成打印 OnEndPrinting:删除GDI对象,139,第五部分 MFC程序设计的其他方面,140,第1章 多线程程序设计,非抢占式多任务和抢占式多任务 通过定时器实现的多任务 多线程编程 使用事件使线程同步,141,单线程程序消息处理,迄今为止所有实例为单线程,只有一个执行路径; 消息处理过程如下: MSG message; while (:GetMessage( 没有消息时程序挂起;消息到来,唤醒,获得消息、处理消息,142,Win32为抢占式多任务 可以在计算量很大的函数中采用放弃控制权的方法避免死锁; 一个使用定时器的实例,143,多线程编程主要工作: 定义全局或静态函数,其形式为: UINT FuncName(LPVOID pParam) 启动线程: CWinThread* pThread = AfxBeginThread(FuncName, pParam, THREAD_PRIORITY_NORMAL); 线程间交互: 全局变量(:InterLockedIncrement() 消息,144,线程同步的几种技术: 事件、关键段、互斥、信号量 使用事件使线程同步 使用CEvent类,包含afxmt.h; 定义相应的CEvent对象,对象状态为有信号和无信号; 使用WaitForSingleObject和WaitForMultiObject在线程中获取信号状态,达到控制线程的目的;,145,第2章 动态连接库程序设计,Win32动态连接库 静态连接MFC的常规动态连接库 共享连接MFC的常规动态连接库 共享连接MFC的扩展动态连接库,146,Win32动态连接库,在不使用MFC功能的情况下 通过AppWizard生成Win32 DLL框架 加入要输出的函数、变量、类 _declspec(dllexport)指定作为输出函数 _declspec(dllimport)在引用程序中指定输入,147,Win32动态连接库的引用,VC+下引用 需要库文件*.lib 需要头文件 VB下引用 函数的调用格式是:_stdcall(或WINAPI) 需要模块定义文件*.def,将函数名和顺序号成对映射,148,客户程序定位DLL顺序,包含EXE文件的目录 进程的当前目录 Windows系统目录 Windows目录 列在Path环境变量中的目录,149,静态连接MFC的常规动态连接库,可以适用于任意Win32编程环境(包括VB) DLL的大小比共享连接MFC时大 *.def文件 示例,150,共享连接MFC的常规动态连接库,可以适用于任意Win32编程环境(包括VB) 要求目标机器上有合适的MFC动态连接库 *.def文件 示例,151,共享连接MFC的扩展动态连接库,能导出C+类,将宏AFX_EXT_CLASS加入到类声明中,如: class AFX_EXT_CLASS_CStudent:public Cobject 扩展DLL资源的搜索顺序: EXE需要资源时:(1)EXE (2)扩展DLL (3)MFC库 扩展DLL需要资源时: (1)扩展DLL (2)MFC DLL (3)EXE 可以如下改变搜索顺序:,152,第3章 TCP/IP网络程序设计,基于Socket的套接字编程实例。,153,建立基于Socket程序的步骤,Socket程序分服务器端和客户端2部分AppWizard生成2个框架程序在各自InitInstance()中执行AfxSocketInit()函数,框架初始化Socket套接字。服务器端需要一个监听套接字和若干伙伴套接字(异步套接字对象)客户端需要一个用于连接的套接字对象,154,服务器端流程,155,客户端流程,156,建立服务器端框架程序,157,建立客户端框架程序,158,第4章 数据库程序设计,关系数据库基本概念 表、列、记录、游标、事务 SQL语言: SELECT、INSERT、DELETE、UPDATE MFC支持以下数据库接口 ODBC(OPEN DATABASE CONNECTIVITY) DAO(DATA ACCESS OBJECT) OLE DB ADO(ACTIVEX DATA OBJECT),159,4.1 DAO,微软提供的针对Microsoft Jet数据库引擎的接口 提供CDaoWorkspace、CDaoDatabase、CDaoRecordset、CDaoTableDef、CDaoQueryDef等类,160,4.2 ODBC/MFC,ODBC是访问不同数据库的通用接口,以API函数的形式提供 MFC ODBC是微软对通用ODBC API以类的形式进行了封装 提供CDatabase、CRecordSet、CRecordView类 必须覆盖的虚拟成员函数:GetDefaultSQL(),GetDefaultConnect(),161,4.3 ADO,ADO是以组COM组件,可以以不同方式使用 VC+下使用其C+接口 提供ADOConnection、ADORecordset、ADOCommand、ADOField、ADOProperty、ADOParameter等类,162,ADO编程步骤,包含相关头文件 #include #include #include 从CADORecordBiding类派生数据存取类,以将数据源的数据绑定到程序中 调用CoInitialize初始化COM 调用CoCreateInstance创建ADOConnection和ADOCommand实例,163,ADO编程步骤,创建或获取一个ADORecordset实例 从这个记录集对象获取一个IADORecordBinding接口的指针 用Open方法打开已建立的记录集(如是命令结果则不必) 调用IADORecordBinding的BindToRecordset函数绑定 然后进行浏览、插入、删除、更新操作 示例,164,4.4 OLE DB,数据存取技术从数据库发展向更一般的数据源 软件开发的发展要求:使用组件形式的可重用软件包 两者结合导致UDA即统一数据存取(Universal Data Access) UDA的重要组件:OLE DB 微软还提供另一种独立于语言的接口ADO,是基于OLE DB的,165,OLE DB,定义了以组接口,用于和一般的数据源交互,提供和消费数据 基于COM的 在标准的C/S模式中,数据的源成Provider,数据的使用者称consumer 我们介绍OLE DB consumer程序的设计,166,OLE DB Consumer程序的设计,在工程中加入数据库和COM支持 #include #include 初始化ATL 选择数据源 针对数据集类编程 示例,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!