• 几种DC及区别


     

    CClientDC:(客户区设备上下文)用于客户区的输出,与特定窗口关联,可以让开发者访问目标窗口中客户区,其构造函数中包含了GetDC,析构函数中包含了ReleaseDC:

    CClientDC::CClientDC(CWnd* pWnd)
    {
        ...
        if (!Attach(::GetDC(m_hWnd = pWnd->GetSafeHwnd())))
            AfxThrowResourceException();
    }

    CClientDC::~CClientDC()
    {
        ...
        ::ReleaseDC(m_hWnd, Detach());
    }
    用法是:
    CClientDC dc(this);//this一般指向本窗口或当前活动视图
    dc.TextOut(10,10,str,str.GetLength());//利用dc输出文本,如果是在
    CScrollView中使用,还要注意调用OnPrepareDC(&dc)调整设备上下文的坐标。
    CPaintDC用于响应窗口重绘消息(WM_PAINT)是的绘图输出。
    CPaintDC在构造函数中调用BeginPaint()取得设备上下文,在析构函数中调用EndPaint()释放设备上下文。EndPaint()除了释放设备上下文外,还负责从消息队列中清除WM_PAINT消息。因此,在处理窗口重画时,必须使用CPaintDC,否则WM_PAINT消息无法从消息队列中清除,将引起不断的窗口重画。CPaintDC也只能用在WM_PAINT消息处理之中。
    CPaintDC::CPaintDC(CWnd* pWnd)
    {
        ...
        if (!Attach(::BeginPaint(m_hWnd = pWnd->m_hWnd, &m_ps)))
            AfxThrowResourceException();
    }

    CPaintDC::~CPaintDC()
    {
        ...
        ::EndPaint(m_hWnd, &m_ps);
        Detach();
    }
    CWindowDC:关联一特定窗口,允许开发者在目标窗口的任何一部分进行
    绘图,包含边界与标题,这种DC同WM_NCPAINT消息一起发送

    CWindowDC与CClientDC,CPaintDC的区别:
    CWindowDC可在非客户区绘制图形,而CClientDC,CPaintDC只
    能在客户区绘制图形。
    CWindowDC下坐标原点是在屏幕的左上角,CClientDC,CPaintDC
    下坐标原点是在客户区的左上角。
    CClientDC与CPaintDC的区别:

    CPaintDC的对象一般用在OnPaint内以响应Windows消息WM_PAINT,自动完成绘制,在整个窗口内进行重画,
    维持原有窗口完整性。
    CClientDC应用在非响应Windows消息WM_PAINT的情况下,进行实时
    绘制,绘制的区域内被重画。



    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=821051

  • 相关阅读:
    【caffe】create_mnist.sh在windows下的解决方案
    【caffe】loss function、cost function和error
    【caffe】未定义函数或变量caffe_
    【caffe】无法找到gpu/mxGPUArray.h: No such file or directory
    maven常见问题处理(3-1)修改maven 默认使用的 jdk 版本
    SpringCloud是什么?
    SpringCloud的服务网关zuul
    SpringCloud的EurekaClient : 客户端应用访问注册的微服务(有断路器场景)
    SpringBoot 概念和起步
    YML(1)什么是 YML
  • 原文地址:https://www.cnblogs.com/rainbowzc/p/2422246.html
Copyright © 2020-2023  润新知