VC++深入详解 第4章 简单绘图

 

                                                  第四章 简单绘图


4.1  MFC消息映射机制

4.1.1  ClassWizard
  1.ClassWizard有五个选项卡,功能分别如下:
     MessageMap选项卡:      可以通过此选项卡添加消息处理函数
     MemberVariables选项卡: 可以加入与对话框相关联的成员变量
     Automation选项卡:      允许用户加入属性或方法
     ActiveX Events选项卡:  允许用户加入事件以支持ActiveX控件
     ClassInfo选项卡:       观察当前类的有关信息

 

4.1.2  消息映射机制
  1. 当收到某一消息时,应用程序框架窗口类基类会调用一个名为WindowProc的函数;该函数又会调用 

  OnWndMsg函数来查找并运行消息响应函数;如果没有查找到,该消息就会交还框架窗口类基类处理。
  2. OnWndMsg函数是这样查找消息响应函数的:
     在H文件上,在两个注释宏(//{{和//}})之间,查找是否有响应的消息响应函数原型声明。
     在CPP文件上,在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()之间,查找是否有相应的消息映射宏。
  3. 函数前面用Afx_msg声明,表明这是一个消息响应函数。
  4.不使用虚函数实现消息映射机的原因是这样会需要一个容量很大的表

 

4.2 绘制线条
4.2.1  利用SDK全局函数实现画线功能
4.2.2  利用MFC的CDC类实现画线功能
4.2.3  利用MFC的CClientDC类实现画线功能
4.2.4  利用MFC的CWindowDC类实现画线功能
  1.四种方法特点比较:
  (1) SDK全局函数是最底层的绘图函数;
  (2) MFC的CDC类封装了绘图相关操作,不需要主动获取窗口设备描述表hdc,已经提  供了一个数据成员

   m_hDC用来保存CDC类相关的DC句柄。
      并且可以使用CPoint数据类型,简化参数。
  (3) MFC的ClientDC类只需定义DC对象,不再需要显示地调用GetDC函数和ReleaseDC函数。并且结束时会

  自动释放DC.
      通过使用 CClientDC dc(GetParent()),可以在非客户区上绘图。
  (4) MFC的CWindowsDC类既具有ClientDC类的功能,并且使用 CClientDC dc(GetParent())后,还可以再

  框架窗口上绘图。

   

  2.四种方法代码比较:
  (1)SDK全局函数:
     HDC hdc;
     hdc = ::GetDC(m_hWnd);
     MoveToEx(hdc, m_ptOrigin.x, m_ptOrigin.y, NULL);
     LineTo(hdc, point.x, point.y);
     ::ReleaseDC(m_hWnd,hdc);
  (2) MFC的CDC类:
     CDC* pDC = GetDC();
     pDC->MoveTo(m_ptOrigin);
     pDC->LineTo(point);
     ReleaseDC(pDC);
  (3) MFC的ClientDC类:
     CClientDC dc(GetParent());
     dc.MoveTo(m_ptOrigin);
     dc.LineTo(point);
  (4) MFC的CWindowsDC类:
     CWindowDC dc(this);
     dc.MoveTo(m_ptOrigin);
     dc.LineTo(point);

 

4.2.5  在桌面窗口中画线
    CWindowDC dc(GetDesktopWindow())可以创建含桌面窗口句柄的dc。

 

4.2.6  绘制彩色线条

  1. MFC提供CPen类来创建画笔对象。

     CPen pen(类型,宽度,颜色);
  2. MFC提供COLORREF类来创建颜色对象。

     COLORREF rgb(红色深度,绿色深度,蓝色深度,)

 

4.3  使用画刷绘图
4.3.1  简单画刷

  1. MFC提供CBrush类来创建画笔对象。

     CBrush brush(COLORREF);

     CBrush brush(RGB(red,green,blue));

  2. FillRect可以利用指定的画刷填充一块指定的矩形区域。

     FillRect(RECT,&brush);


4.3.2  位图画刷

  1. 用一个画刷导入一幅图片。

     CBrush brush(&bitmap);

  2. 导入一幅图片的常用方法。

     (1)LoadBitmap(文件路径名)

     (2)LoadBitmap(资源ID)


4.3.3  透明画刷

    1.透明画刷可以用来绘画一个矩形而不遮盖矩形内部的部分。要创建透明画刷,有三步:

    (1)用GetStockObject函数获取透明画刷句柄。(HGDIOBJECT类型)

    (2)将句柄强制转换成HBRUSH类型。

    (3)用CBrush::FormHandle函数将画刷句柄转变为画刷对象。

    三步合起来是这样使用:

    CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

  

    2.静态成员知识。

    (1)静态成员属于类本身,在类加载的时候,即为它们分配了空间。

    (2)可以通过类名:函数名 或 类名:变量名 来访问。

    (3)成员函数或成员变量只有占有了内存,才能被访问。

    (4)静态成员函数只能调用 静态成员 。


4.4  绘制连续线条

    在OnMouseMove函数上(消息响应函数),用函数提供的point参数作为线段的起点,用成员变量m_ptOrigin作为终点,然后就可以绘制连续线条,即鼠标移到哪画到哪。

     
4.5  绘制扇形效果的线条

     1. 只要保持起点不变,按照上面的方法就可以画扇形。

     2. MFC提供一个设置绘图模式的的函数 SetROP2

        SetROP2( int nDrawMode )

        nDrawMode有三种模式:

        R2_BLACK:      画黑线

        R2_WHITE:      画白线

        R2_MERGENOPEN: 先把画笔颜色取反,再与屏幕颜色进行或操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《VC深入详解第3版PDF》是一本介绍Visual C++编程的书籍,该书主要针对具有一定编程基础的开发者,讲解了VC编程的高级应用和技巧。 该书分为10章,从Windows程序设计基础、MFC应用程序框架、视图类、文档类、数据库编程、多线程编程、网络编程、COM组件开发、ActiveX控件开发以及VC程序调试与优化等方面进行了深入系统的讲解,全面介绍了VC编程的相关知识和技术,对开发者有很大的帮助。 在该书中,作者通过丰富的实例和详细的代码讲解,让读者深入了解VC编程的常见问题和解决方法。同时,书中还介绍了一些重要的编程工具和技巧,如调试工具的使用、Windows消息机制、数据类型转换等,这些内容可以帮助读者从更高的角度理解VC编程,并更好地掌握其技术特点。 总之,《VC深入详解第3版PDF》是一本对VC编程进行深入研究和学习的优秀书籍,同时也适用于希望提高Windows程序设计和开发的程序员。该书具备丰富的内容和深入的讲解,对VC编程感兴趣的开发者将有所裨益。 ### 回答2: VC 深入详解 第3版 PDF 是一本介绍 Microsoft Visual C++(VC++)程序设计语言的详尽指南。本书在深入介绍 C++ 语言和编程基本概念的基础上,重点讲解了 VC++ 的程序设计和开发理念、各种功能和应用方法。本书内容全面,包括 VC++ 编译器、Windows 应用程序开发、图形用户界面设计、多线程编程、应用程序框架、数据库编程、网络编程等多个方面,对新手和资深程序员都有较高的指导作用。 本书第三版相对于前两版更新换代,其主要变化在于增加和更新了一些章节,完善了一些概念和应用。例如,本版增加了针对 Windows 8、Windows 10、Visual Studio 2013 和 2015 等新技术和工具的章节,更新了若干图形界面设计和控件使用的方法,增加了多线程、数据库和网络编程等方面的实例等等。同时,本书也对一些旧版章节进行了深入拓展和重制,以提高其可读性和可操作性。 值得注意的是,本书虽然以 VC++ 为主轴,但其对 C++ 语言本身也有广泛的涉猎,对于学习 C++ 编程的初学者也具有较好的指导作用。此外,本书的内容偏向实战操作,有大量具有代表性的应用实例供读者参考和尝试,这对于帮助读者掌握 VC++ 编程技术和提高实战操作能力都是有益的。 总之,《VC 深入详解 第3版 PDF》是一本帮助程序员深入理解 VC++ 编程技术和应用的权威性指南,具有较高的指导作用和实际价值。 ### 回答3: 《VC深入详解》是一本介绍Microsoft Visual C++编程语言和开发工具的书籍,此书分为入门篇和深入篇两部分,全书共分22章,对VC语言的基础知识、面向对象编程、MFC程序框架、窗口、对话框、菜单、工具栏、绘图、多媒体等方面进行了详尽的讲解和实践操作。第3版更新了最新版本的VC++ 2013和MFC,对原有的内容进行了更新和完善。 此书的深入详解部分具有较强的实践性和实用性, chapters中包括了Windows应用程序设计、高级算法、网络编程、多线程编程、数据库编程、动态链接库、ActiveX控件与COM、ATL和.NET等内容。并且此书结合了理论和实践,每个章节都有完整的实例程序,并且结合具体应用场景进行分析,让读者不仅能够掌握基本知识,还能够提升对VC编程的实际应用能力。 总体评价而言,《VC深入详解》是一本较为全面和权威的VC编程实战教程,适合于具有C/C++编程基础者进行深入学习,对于从事Windows软件开发的程序员和学生都具有很高的参考价值。在VC++编程学习中,这本书是一份必备工具书,对于提高编程能力有很大的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值