我是在单文档 FormView 中自绘了一个显示图片的控件 ,类似picture控件现在想实现菜单下的 打印功能,打印预览,将图片打印出来, 请问具体怎么做呢? 现在没头绪,请高手指点一下,有代码共享最好了,
谢谢。
谢谢。
解决方案 »
- 子进程ReadFile读管道,阻塞会导致界面显示?
- 操作时间较长导致界面卡住怎么解决?
- 招聘成都的VC/C#程序员
- 知道两点如何画以这两点为起点和终点的曲线?
- windows就要终结吗?
- 采用 CreateEx(WS_EX_TOOLWINDOW...),创建的窗口SHOW时的闪烁问题
- 一个关于工具栏的问题
- MFC未处理的异常0x0000005读取位置0x00000000时发生访问冲突
- 如何进行类型转换string to int??
- 如何能让窗口类响应ESC键?
- VC中注册的ActiveX的ADO data、DataGrid、DataList、DataCombo控件到底属不属于MFC类的?
- 各位大哥大姐,如何用VC++实现与PLC的通信。
void CRoyView::OnDraw(CDC* pDC)
{
CRoyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
// 显示等待光标
BeginWaitCursor();
// 获取DIB
HDIB hDIB = pDoc->GetHDIB();
// 判断DIB是否为空
if (hDIB != NULL)
{
LPBYTE lpDIB = (LPBYTE) ::GlobalLock((HGLOBAL) hDIB);
// 获取DIB宽度
int cxDIB = (int) pDoc->m_clsDIB.DIBWidth(lpDIB);
// 获取DIB高度
int cyDIB = (int) pDoc->m_clsDIB.DIBHeight(lpDIB); ::GlobalUnlock((HGLOBAL) hDIB);
CRect rcDIB;
rcDIB.top = rcDIB.left = 0;
rcDIB.right = cxDIB;
rcDIB.bottom = cyDIB;
CRect rcDest;
// 判断是否是打印
if (pDC->IsPrinting())
{
// 是打印,计算输出图像的位置和大小,以便符合页面
// 获取打印页面的水平宽度(象素)
int cxPage = pDC->GetDeviceCaps(HORZRES);
// 获取打印页面的垂直高度(象素)
int cyPage = pDC->GetDeviceCaps(VERTRES);
// 获取打印机每英寸象素数
int cxInch = pDC->GetDeviceCaps(LOGPIXELSX);
int cyInch = pDC->GetDeviceCaps(LOGPIXELSY);
// 计算打印图像大小(缩放,根据页面宽度调整图像大小)
rcDest.top = rcDest.left = 0;
rcDest.bottom = (int)(((double)cyDIB * cxPage * cyInch) / ((double)cxDIB * cxInch));
rcDest.right = cxPage;
// 计算打印图像位置(垂直居中)
int temp = cyPage - (rcDest.bottom - rcDest.top);
rcDest.bottom += temp/2;
rcDest.top += temp/2;
}
else // 非打印
{
// 不必缩放图像
rcDest = rcDIB;
}
// 输出DIB
pDoc->m_clsDIB.PaintDIB(pDC->m_hDC, &rcDest, pDoc->GetHDIB(),
&rcDIB, pDoc->GetDocPalette());
}
// 恢复正常光标
EndWaitCursor();
}
/////////////////////////////////////////////////////////////////////////////
// CRoyView printingBOOL CRoyView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation // 设置总页数为一。
pInfo->SetMaxPage(1);
return DoPreparePrinting(pInfo);
}void CRoyView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}void CRoyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}