📄 memdc.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 + -