zoukankan      html  css  js  c++  java
  • MFC中的各种DC区别

    转载自:xntop的《区别MFC中的CClientDC、CWindowDC、CPaintDC、CMetaFileDC

    CClientDC及其子类

    1. CClientDC类只能在客户区绘图
    2. 所谓客户区指窗口区域中去掉边框、标题栏、菜单栏、工具栏、状态栏等之外的部分,它是用户可以操作的区域;
    3. 在使用CClientDC进行绘图时,一般要调用GetClientRect()函数来获取客户区域的大小;
    4. CClientDC类在构造函数中调用Windows API函数GetDC(),在析构时响应ReleaseDC();
    5. CClientDC类的窗口句柄保存在成员变量m_hWnd,为构造CClientDC,需将CWnd作为参数传递给构造函数。

    CWindowDC及其子类

    1. CWindowDC对象在构造时调用Windows API函数GetWindowDC,在析构时调用相应的API函数ReleaseDC,这意味着CWindowDC对象可访问CWnd所指向的为整个全屏幕区域
    2. CWindowDC允许在显示器的任意位置绘图。坐标原点在整个窗口的左上角。
    3. 在使用CWindowDC进行绘图时,一般要调用GetWindowRect函数来获取整个应用程序窗口区域的大小;
    4. CWindowDC类的窗口句柄保存在成员变量m_hWnd,为构造CClientDC,需将CWnd作为参数传递给构造函数。

    CPaintDC及其子类

    1. 通常CPaintDC用来响应WM_PAINT消息。一般应用在OnPaint函数.
    2. CClientDC也是从CDC派生出来的.构造时自动调用GetDC函数,析构时自动调用ReleaseDC函数.一般应用于客户区窗口的绘制.
    3. CPaintDC只能在WM_PAINT消息中使用, 用于有重画消息发出时才使用的内存设备环境, 而CClientDC和客户区相关,有重画消息发出时才使用的内存设备环境, 可在任何地方使用.
    4. 在处理窗口重画时,必须使用CPaintDC,否则WM_PAINT消息无法从消息队列中清除,将引起不断的窗口重画。

    CMetaFileDC及其子类

    1. 在应用程序中,有一些图像是需要经常重复显示的.这样的图形最好事先绘制好形成一个文件,并存储在内存中,当用到它时直接打开就可以了,这种图形文件叫做图元文件;
    2. 制作图元文件需要一个特殊的设备描述环境CMetaFileDC类.它也是由CDC类继承来的,因此它包含了CDC类的所有绘图方法。
    3. 一般先在视图类的OnCreate()函数中创建图元文件.具体做法为:先定义一个CMetaFileDC类的对象,然后用该对象的Create()函数创建它,该函数的原型为:BOOL Create(LPCTSTR lpszFilename=NULL);
    4. 接下来使用由CDC继承来的绘图方法绘制图元文件,最后使用Close()函数结束绘制并保存该图元文件到类的数据成员中(该数据成员的类型应为HMETAFILE)。
    5. 当需要显示该图元文件时,使用CDC类的成员函数PlayMetaFile()。当不再使用该图元文件时,要用函数DeleteMetaFile()将其删除。

  • 相关阅读:
    关键字驱动测试方法
    File文件操作
    问题处理:类没有复制构造函数
    QTP问题修改:This run was performed on Internet Explorer 7.x without the required 'Enable Tabbed Browsing
    QTP:.net中写文件
    bat垃圾清理
    Lua安装与使用
    QTP:Flight账号及密码
    如何在VS2010中运行控制台程序时停留在控制台显示窗口
    QTP中Screen Recorder无内容,no movie is associated with the results.
  • 原文地址:https://www.cnblogs.com/talenth/p/5807945.html
Copyright © 2011-2022 走看看