⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memdc.cpp

📁 用VC写的一个将串口数据用图形曲线的形式显示出来。这是一个项目中的一部分。
💻 CPP
字号:
// MemDC.cpp: implementation of the CMemDC class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MemDC.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMemDC::CMemDC(CDC* pDC, CRect* pRect/*=NULL*/, CBitmap* pBitmap/*=NULL*/) : 
    m_bPrinting(FALSE), 
    m_Offset(0, 0) {

    CreateCompatibleDC(pDC);

    m_crBG      = GetBkColor();
    m_crTX      = GetTextColor();
    m_pPen      = GetCurrentPen();
    m_pBrush    = GetCurrentBrush();
    m_pFont     = GetCurrentFont();
	m_pBitmap   = GetCurrentBitmap();

    if (pRect) {
        int nRectWidth(pRect->Width());
        int nRectHeight(pRect->Height());

        if (pBitmap) {
            pBitmap->CreateCompatibleBitmap(pDC, nRectWidth, nRectHeight);
    
            SelectObject(pBitmap);
            }
        }
    
    return;
    }

CMemDC::~CMemDC() {

    if (!m_bPrinting) {
        SetBkColor(m_crBG);
        SetTextColor(m_crTX);
        SelectObject(m_pPen);
        SelectObject(m_pBrush);
        SelectObject(m_pFont);
        SelectObject(m_pBitmap);
        }

    DeleteDC();

    return;
    }

void CMemDC::FillSolidRect(LPCRECT lpRect, COLORREF clr) {
    
    CDC::FillSolidRect(&CRect(CRect(lpRect)+m_Offset), clr);

    return;
    }

int CMemDC::DrawText(LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat) {

    if (nFormat!=DT_CALCRECT) {
        CRect Rect(lpRect);
        Rect.OffsetRect(m_Offset);
        return CDC::DrawText(lpszString, nCount, &Rect, nFormat);
        }
    
    return CDC::DrawText(lpszString, nCount, lpRect, nFormat);
    }

BOOL CMemDC::TextOut(int x, int y, LPCTSTR lpszString, int nCount) {

    return CDC::TextOut(x+m_Offset.x, y+m_Offset.y, lpszString, nCount);
    }

CPoint CMemDC::MoveTo(int x, int y) {

    return CDC::MoveTo(x+m_Offset.x, y+m_Offset.y);
    }

CPoint CMemDC::LineTo(int x, int y) {

    return CDC::LineTo(x+m_Offset.x, y+m_Offset.y);
    }

BOOL CMemDC::FillRgn(CRgn* pRgn, CBrush* pBrush) {

    int nReturn(pRgn->OffsetRgn(m_Offset));
    
    if (ERROR==nReturn)
        VERIFY(FALSE);

    return CDC::FillRgn(pRgn, pBrush);
    }

BOOL CMemDC::Polygon(LPPOINT lpPoints, int nCount) {

    POINT* pPoints = new POINT[nCount];
    
    for (int i(0);i<nCount;i++) {
        (*(pPoints+i)).x = (*(lpPoints+i)).x + m_Offset.x;
        (*(pPoints+i)).y = (*(lpPoints+i)).y + m_Offset.y;
        }
    
    BOOL bResult(CDC::Polygon(pPoints, nCount));

    delete [] pPoints;

    return bResult;
    }

BOOL CMemDC::Polyline(LPPOINT lpPoints, int nCount) {

    POINT* pPoints = new POINT[nCount];
    
    for (int i(0);i<nCount;i++) {
        (*(pPoints+i)).x = (*(lpPoints+i)).x + m_Offset.x;
        (*(pPoints+i)).y = (*(lpPoints+i)).y + m_Offset.y;
        }
    
    BOOL bResult(CDC::Polyline(pPoints, nCount));

    delete [] pPoints;

    return bResult;
    }

BOOL CMemDC::Ellipse(int x1, int y1, int x2, int y2) {

    return CDC::Ellipse(x1+m_Offset.x, y1+m_Offset.y, x2+m_Offset.x, y2+m_Offset.y);
    }

BOOL CMemDC::Pie(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) {

    return CDC::Pie(x1+m_Offset.x, y1+m_Offset.y, x2+m_Offset.x, y2+m_Offset.y, x3+m_Offset.x, y3+m_Offset.y, x4+m_Offset.x, y4+m_Offset.y);
    }

BOOL CMemDC::DrawIcon(int x, int y, HICON hIcon) {

    return CDC::DrawIcon(x+m_Offset.x, y+m_Offset.y, hIcon);
    }

BOOL CMemDC::BitBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop) {

    return CDC::BitBlt(x+m_Offset.x, y+m_Offset.y, nWidth, nHeight, pSrcDC, xSrc, ySrc, dwRop);
    }

CPen* CMemDC::SelectObject(CPen* pPen) {

    //if (!m_bPrinting)
        return CDC::SelectObject(pPen);
    
    return NULL;
    }

CBrush* CMemDC::SelectObject(CBrush* pBrush) {

    //if (!m_bPrinting)
        return CDC::SelectObject(pBrush);
    
    return NULL;
    }

CFont* CMemDC::SelectObject(CFont* pFont) {

    if (!m_bPrinting)
        return CDC::SelectObject(pFont);
    
    return NULL;
    }

CBitmap* CMemDC::SelectObject(CBitmap* pBitmap) {

    //if (!m_bPrinting)
        return CDC::SelectObject(pBitmap);
    
    return NULL;
    }

int CMemDC::SelectObject(CRgn* pRgn) {

    //if (!m_bPrinting)
        return CDC::SelectObject(pRgn);
    
    return NULL;
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -