VisualC++程序设计课件作者严迪新班建民主编第三章节MFC编程.pptVIP

  • 4
  • 0
  • 约1.36万字
  • 约 57页
  • 2017-11-12 发布于广东
  • 举报

VisualC++程序设计课件作者严迪新班建民主编第三章节MFC编程.ppt

第三章 MFC编程 MFC(Microsoft Foundation Class) MFC类库是一个在应用程序中使用的相互关联的C++类的集合。MFC的本质就是一个包含了许多已经定义好的对象的类库。MFC中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序。 图形设备接口 图形设备接口(graphics device interface,GDI)是Windows提供的一个抽象接口,用来完成所有图形的输出工作,GDI为Windows提供了所有的基本绘图函数。在GDI函数中,需要使用设备环境来作为一个参数。 GDI通过调用相应设备的驱动程序来实现函数的调用。这种机制实现了硬件无关性,即无需自己编写底层驱动程序代码,因为Windows本身已经包含了这些驱动程序。 设备环境 在Windows程序中,并不是把图形直接画到硬件上去,而是使用一个与硬件无关的设备环境(device context,DC)来表示逻辑的设备。 绘图模式 绘图的最终效果,如前景色、背景色等,可以通过设置绘图模式来进行改变。绘图模式实际上是指画笔的颜色以什么样的方式填充在已经有显示的设备上,两者怎样相结合。 GDI坐标系 GDI支持两种类型的坐标系,即逻辑坐标系和设备坐标系。 设备坐标系 设备坐标系是以像素为单位来表示的,设备坐标的X轴向右为正,Y轴向客户区坐标系以窗口客户区左上角为原点(0,0) ,下为正,坐标原点(0,0)不限定在设备显示区域的左上角。 根据设备坐标系的原点位置和用途可将其分为屏幕坐标系、窗口坐标系和客户区坐标系三种。 逻辑坐标 是系统用作记录的坐标系,它不针对任何具体的设备类型,是面向设备环境的。在实际显示图形对象时,Windows系统将根据坐标设置方式(映射模式),把逻辑坐标转换为设备坐标。 逻辑坐标系的映射模式可分为8种,它们的坐标特性如表3.2所示。所有映射模式的坐标原点均在设备输出区域(如客户区或打印区)的左上角。可以使用CDC::SetMapMode()函数设置新的映射模式;使用CDC::GetMapMode()函数获取当前的映射模式。 坐标之间的转换 在具体的编程过程中,需要根据情况在3种设备坐标之间、设备坐标与逻辑坐标之间进行相互转换。 MFC提供了CWnd::ClientToScreen()、CWnd::ScreenToClient()两个函数用于客户区坐标和屏幕坐标之间的转换; 提供了CDC::DPtoLP()和CDC::LptoDP()两个函数用于设备坐标与逻辑坐标之间的相互转换。 图形对象 画笔 :绘制直线和曲线要使用的GDI对象 画刷 :填充图形要使用的GDI对象 字体 :用于文字显示和打印的GDI对象 CDC类 :封装了大量文字与绘图函数的设备环境类 库存图形对象 :一些预定义的无需创建,可以直接将它们选入当前的设备环境中使用GDI对象, 称作库存(Stock)图形对象 画笔 画笔的操作 画刷 库存图形对象 资源 图标 位图 位图 的使用过程 字符串表 CSize类与CPoint类 CString类 在项目中新建类方法的比较 1.使用ClassWizard的方法适用于从MFC窗口类的派生情况,比较方便,但不能用于CWinApp等一般性的类. 2.使用插入新类的方法适用面较宽,但对一般性的MFC基类,需自己填写基类名称. 鼠标消息函数的使用 1.用参数point得到击键时鼠标的位置,可用于判断当前点是否落在某个区域.从而确定发生的事件。 2.用参数point和以前保留的位置信息m_point得到鼠标移动前、后的位置,从而为更新画面提供位置信息。 3.SetCapture()函数可以捕获鼠标,以保证以后的鼠标信息均发往本窗口,直至用ReleaseCapture()函数关闭鼠标捕获. 键盘消息函数 OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) 键盘消息函数使用 键盘消息函数首先应使用参数nFlags判断按下的是否是组合键或扩展键 对于不同的虚拟键码,按照预先设计的功能,设计不同的代码。 可利用参数nRepCnt,加快速键盘的反映 定时器消息函数使用 定时器消息是系统消息, 用SetTimer()函数可设置一个定时器,并用参数nIDEvent作为定时器的标识,一旦计算机内的时钟过了一个规定的时间段,则系统会发出一个定时器消息消息,若在SetTimer()函数中指定了定时器消息处理函数lpfnTimer,则由该函数处理此定时器消息,否则由定时器消息处理函数

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档