📄 memdc.h
字号:
class CMemDC : public CDC
{
public:
CMemDC(CDC* pDC, LPRECT pRect = NULL, BOOL fCopyOld = FALSE, BOOL fUsePalette = FALSE) : CDC()
{
ASSERT(pDC != NULL);
m_pDC = pDC;
m_pOldBitmap = NULL;
m_bMemDC = !pDC->IsPrinting();
m_fUsePalette = fUsePalette;
if (m_bMemDC)
{
if(pRect)
m_rect = *pRect;
else
pDC->GetClipBox(&m_rect);
CreateCompatibleDC(pDC);
m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
m_pOldBitmap = SelectObject(&m_bitmap);
SetWindowOrg(m_rect.left, m_rect.top);
if(fCopyOld)
BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
m_pDC, m_rect.left, m_rect.top, SRCCOPY);
}
else
{
m_bPrinting = pDC->m_bPrinting;
m_hDC = pDC->m_hDC;
m_hAttribDC = pDC->m_hAttribDC;
}
}
~CMemDC()
{
if (m_bMemDC)
{
CPalette pal, *pOldPal=NULL;
if(m_fUsePalette && CreatePalette(pal))
{
pOldPal = m_pDC->SelectPalette(&pal, FALSE);
m_pDC->RealizePalette();
}
m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
this, m_rect.left, m_rect.top, SRCCOPY);
if(pOldPal)
m_pDC->SelectPalette(pOldPal, TRUE);
SelectObject(m_pOldBitmap);
}
else
{
m_hDC = m_hAttribDC = NULL;
}
}
BOOL CreatePalette(CPalette& pal, CDC* pDC = NULL)
{
if(!pDC) pDC = this;
if(!(pDC->GetDeviceCaps(RASTERCAPS) & RC_PALETTE))
return FALSE;
const int nColors = 236;
RGBQUAD rgb[nColors];
::GetDIBColorTable(pDC->m_hDC, 0, nColors, rgb);
LPLOGPALETTE lpPal = (LPLOGPALETTE) new BYTE[sizeof(LOGPALETTE) + (nColors*sizeof(PALETTEENTRY))];
lpPal->palVersion = 0x300;
lpPal->palNumEntries = nColors;
for (int i = 0; i < nColors; i++)
{
lpPal->palPalEntry[i].peRed = rgb[i].rgbRed;
lpPal->palPalEntry[i].peGreen = rgb[i].rgbGreen;
lpPal->palPalEntry[i].peBlue = rgb[i].rgbBlue;
lpPal->palPalEntry[i].peFlags = 0;
}
VERIFY(pal.CreatePalette(lpPal));
delete lpPal;
return TRUE;
}
CMemDC* operator->() {return this;}
operator CMemDC*() {return this;}
private:
CBitmap m_bitmap;
CBitmap* m_pOldBitmap;
CDC* m_pDC;
CRect m_rect;
BOOL m_bMemDC;
BOOL m_fUsePalette;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -