• 贴一个CMemDC 代码,这东西真不错噢,短小精悍,可谓极品


    罗索客 发布于 2006-11-28 21:53 点击:3941次 
    来自:
    原文: http://yuantao82.spaces.live.com/Blog/cns!8FC0A772D812A22F!139.entry?owner=1 #ifndef _MEMDC_H_ #define _MEMDC_H_ ////////////////////////////////////////////////// // CMemDC - memory DC // // Author: Keith Rule // Email: keithr@europa.com //
    TAG: 封装类  CMemDC  
     

    原文:http://yuantao82.spaces.live.com/Blog/cns!8FC0A772D812A22F!139.entry?owner=1

    #ifndef _MEMDC_H_
    #define _MEMDC_H_

    //////////////////////////////////////////////////
    // CMemDC - memory DC
    //
    // Author: Keith Rule
    // Email: keithr@europa.com
    // Copyright 1996-2002, Keith Rule
    //
    // You may freely use or modify this code provided this
    // Copyright is included in all derived versions.
    //
    // History - 10/3/97 Fixed scrolling bug.
    // Added print support. - KR
    //
    // 11/3/99 Fixed most common complaint. Added
    // background color fill. - KR
    //
    // 11/3/99 Added support for mapping modes other than
    // MM_TEXT as suggested by Lee Sang Hun. - KR
    //
    // 02/11/02 Added support for CScrollView as supplied
    // by Gary Kirkham. - KR
    //
    // This class implements a memory Device Context which allows
    // flicker free drawing.

    class CMemDC : public CDC {
    private: 
    CBitmap m_bitmap; // Offscreen bitmap
    CBitmap* m_oldBitmap; // bitmap originally found in CMemDC
    CDC* m_pDC; // Saves CDC passed in constructor
    CRect m_rect; // Rectangle of drawing area.
    BOOL m_bMemDC; // TRUE if CDC really is a Memory DC.
    public:

    CMemDC(CDC* pDC, const CRect* pRect = NULL) : CDC()
    {
    ASSERT(pDC != NULL); 

    // Some initialization
    m_pDC = pDC;
    m_oldBitmap = NULL;
    m_bMemDC = !pDC->IsPrinting();

    // Get the rectangle to draw
    if (pRect == NULL) {
    pDC->GetClipBox(&m_rect);
    } else {
    m_rect = *pRect;
    }

    if (m_bMemDC) {
    // Create a Memory DC
    CreateCompatibleDC(pDC);
    pDC->LPtoDP(&m_rect);

    m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), 
    m_rect.Height());
    m_oldBitmap = SelectObject(&m_bitmap);

    SetMapMode(pDC->GetMapMode());

    SetWindowExt(pDC->GetWindowExt());
    SetViewportExt(pDC->GetViewportExt());

    pDC->DPtoLP(&m_rect);
    SetWindowOrg(m_rect.left, m_rect.top);
    } else {
    // Make a copy of the relevent parts of the current 
    // DC for printing
    m_bPrinting = pDC->m_bPrinting;
    m_hDC = pDC->m_hDC;
    m_hAttribDC = pDC->m_hAttribDC;
    }

    // Fill background 
    FillSolidRect(m_rect, pDC->GetBkColor());
    }

    ~CMemDC() 

    if (m_bMemDC) {
    // Copy the offscreen bitmap onto the screen.
    m_pDC->BitBlt(m_rect.left, m_rect.top, 
    m_rect.Width(), m_rect.Height(),
    this, m_rect.left, m_rect.top, SRCCOPY); 

    //Swap back the original bitmap.
    SelectObject(m_oldBitmap); 
    } else {
    // All we need to do is replace the DC with an illegal
    // value, this keeps us from accidentally deleting the 
    // handles associated with the CDC that was passed to 
    // the constructor. 
    m_hDC = m_hAttribDC = NULL;

    }

    // Allow usage as a pointer 
    CMemDC* operator->() 
    {
    return this;


    // Allow usage as a pointer 
    operator CMemDC*() 
    {
    return this;
    }
    };

    #endif

    (iwgh)
     
    本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/200611/6425.html]
     
  • 相关阅读:
    第五周笔记
    第四周笔记——复制文件(可读时间)
    第三周笔记
    java第6次作业
    java第五次作业
    java第四次作业
    java第三次作业
    第一周Java笔记
    计划进度表
    第六次作业
  • 原文地址:https://www.cnblogs.com/lidabo/p/3702042.html
Copyright © 2020-2023  润新知