如何在打印或打印预览中调整DC的显示坐标?

dnyz520 dnyz520 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我在OnDraw中实现了图片与文字的重绘,但在正式打印或打印预览的时候根据需要要调整显示的位置.
我不知道应该在OnBeginPrinting调整还是在OnPrint中调整,应该怎么调整显示坐标,如何获得OnDraw中的DC,并且在打印DC中显示OnDraw已经绘好的DC.

哪位高手帮下菜菜,谢谢!


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();
}
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
dnyz520
VC/MFC 16,550 成员 421,606 内容