16,472
社区成员
发帖
与我相关
我的任务
分享
void CNotesPrintView::OnDraw(CDC* pDC)
{
CNotesPrintDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (pDoc->m_Image.IsNull())
return;
CRect rectView;;
GetClientRect(rectView);
CRect rectImage;
rectImage.SetRect(0, 0, pDoc->m_Image.GetWidth(), pDoc->m_Image.GetHeight());
// 如果窗口大于背景则取窗口大小
CRect rect(0,0,0,0);
rect.right = (rectView.Width() > rectImage.Width()) ? rectView.Width() : rectImage.Width();
rect.bottom = (rectView.Height() > rectImage.Height()) ? rectView.Height() : rectImage.Height();
CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(pDC);
MemBitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
MemDC.SelectObject(&MemBitmap);
MemDC.FillSolidRect(0, 0, rect.Width(), rect.Height(), RGB(255, 255, 255)); // 1.背景底色
pDoc->m_Image.Draw(MemDC, 0, 0); // 2.背景底图
MemDC.SetBkMode(TRANSPARENT); // 透明字体
int nCount = pDoc->m_saProp.GetSize();
for (int i = 0; i < nCount; i++)
{
MemDC.SetTextColor((COLORREF)pDoc->m_naColor.GetAt(i));
MemDC.SelectObject((CFont*)pDoc->m_ArrayFont.GetAt(i));
// 此处m_naMove与m_saProp相等公式以i为基数GetAt(i*2),GetAt(i*2+1)
MemDC.TextOut(pDoc->m_naMove.GetAt(i * 2), pDoc->m_naMove.GetAt(i * 2 + 1), pDoc->m_saProp.GetAt(i));
}
pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &MemDC, 0, 0, SRCCOPY);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
}