我在纸上打印非模式对话框上的内容
需要指定在向A4纸上某个固定的位置输出图像
下面是我的程序,我通过调节两个点的值来确定打印的位置和大小,这样做有没有问题?(位置和大小好像没法同时调好,SetViewportExt和SetViewportOrg会互相影响吗)
还有个问题很奇怪,屏幕分辨率72dpi/inch,打印机分辨率是600,打印的图片应该很小才对,事实上确定跟显示的差不多大,用的是lex普通的彩色打印机.
随便给点提示或建议什么的都十分感谢!
CPrintDialog dlg(FALSE,PD_NOPAGENUMS|PD_NOSELECTION|PD_DISABLEPRINTTOFILE, this);
if(dlg.DoModal() == IDOK)
{
CDC dc;
dc.Attach(dlg.GetPrinterDC());//把打印设备环境附加到DC对象
DOCINFO di;
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "PrintImage";
di.lpszOutput = NULL;
di.lpszDatatype = NULL;
di.fwType = 0;
dc.StartDoc(&di); //通知打印机驱动程序执行一新的打印任务
dc.StartPage();//通知打印机驱动程序打印新页 /////////////////////////////////////////////////////////////////
dc.SetMapMode(MM_ISOTROPIC); //设置坐标映射模式
CRect rcImageDlg;//需要打印的区域,是非模式对话框的客户区,有些小图片
GetClientRect(rcImageDlg);
CSize size(rcImageDlg.Width(),rcImageDlg.Height());
dc.SetWindowOrg(0,0);
dc.SetWindowExt(size); //调节m_iRBPointX,m_iRBPointY的值确定打印的大小
float xExt = (float)size.cx*(size.cx/m_iRBPointX);
float yExt = (float)size.cy*(size.cx/m_iRBPointY);
dc.SetViewportExt((int)xExt, (int)yExt);
//调节m_iLTPointX,m_iLTPointY设置rcImageDlg打印到纸上的位置
dc.SetViewportOrg(m_iLTPointX,m_iLTPointY);//设置视口原点(实际是设置窗口原点在视口中的位置?)
/////////////////////////////////////////////////////////////////
PrintOnDraw(&dc);//向打印机上绘图 dc.EndPage(); //通知打印机驱动程序页结束
dc.EndDoc();//通知打印机驱动程序打印完毕
DeleteDC(dc.Detach());
return TRUE;
}
需要指定在向A4纸上某个固定的位置输出图像
下面是我的程序,我通过调节两个点的值来确定打印的位置和大小,这样做有没有问题?(位置和大小好像没法同时调好,SetViewportExt和SetViewportOrg会互相影响吗)
还有个问题很奇怪,屏幕分辨率72dpi/inch,打印机分辨率是600,打印的图片应该很小才对,事实上确定跟显示的差不多大,用的是lex普通的彩色打印机.
随便给点提示或建议什么的都十分感谢!
CPrintDialog dlg(FALSE,PD_NOPAGENUMS|PD_NOSELECTION|PD_DISABLEPRINTTOFILE, this);
if(dlg.DoModal() == IDOK)
{
CDC dc;
dc.Attach(dlg.GetPrinterDC());//把打印设备环境附加到DC对象
DOCINFO di;
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "PrintImage";
di.lpszOutput = NULL;
di.lpszDatatype = NULL;
di.fwType = 0;
dc.StartDoc(&di); //通知打印机驱动程序执行一新的打印任务
dc.StartPage();//通知打印机驱动程序打印新页 /////////////////////////////////////////////////////////////////
dc.SetMapMode(MM_ISOTROPIC); //设置坐标映射模式
CRect rcImageDlg;//需要打印的区域,是非模式对话框的客户区,有些小图片
GetClientRect(rcImageDlg);
CSize size(rcImageDlg.Width(),rcImageDlg.Height());
dc.SetWindowOrg(0,0);
dc.SetWindowExt(size); //调节m_iRBPointX,m_iRBPointY的值确定打印的大小
float xExt = (float)size.cx*(size.cx/m_iRBPointX);
float yExt = (float)size.cy*(size.cx/m_iRBPointY);
dc.SetViewportExt((int)xExt, (int)yExt);
//调节m_iLTPointX,m_iLTPointY设置rcImageDlg打印到纸上的位置
dc.SetViewportOrg(m_iLTPointX,m_iLTPointY);//设置视口原点(实际是设置窗口原点在视口中的位置?)
/////////////////////////////////////////////////////////////////
PrintOnDraw(&dc);//向打印机上绘图 dc.EndPage(); //通知打印机驱动程序页结束
dc.EndDoc();//通知打印机驱动程序打印完毕
DeleteDC(dc.Detach());
return TRUE;
}
解决方案 »
- MFC怎样获取鼠标单击时点的坐标
- CView 中怎么访问MainFrameWnd对象的成员
- 还是闪烁问题
- 请教各位高手,如何利用CryptoAPI进行非对称文件加密,最好有例子说明,谢谢!
- listctrl跳转问题
- 我需要用代码实现cacls这个命令,有相关资料么?(不使用system)
- 进程问题(时间,内存)
- 想在一个类中调用另外一CView类中的Invalidate()?
- 我想利用ClassWizard为CVCurve类添加消息处理函数WM_CREATE
- CTreeView的自身拖放.
- ----------------------请教网络高手如何解释这种现象?非常感谢?----------------------
- 请帮忙看一下!!加载类型库/DLL时出错
我发现一个问题,改变setviewportext()参数的值,实际上是改变了自定义的每逻辑单位代表的值的大小,因此也改变了setviewportorg中的参数代表的大小,造成了我想调节打印大小却同时改变了打印的位置
Parameters:Specifies the origin of the viewport. The values must be within the range of the device coordinate system.
"must be within the range of the device coordinate "说明参数用的设备坐标,所以和setviewportext() 有关系,我个人认为~(待PP)