打印预览。怎么个转换啊?
看了很多文章,不知道他想干嘛?在预览里看起来很小?谁能给我说说。谢谢!是不是把映射模式换下?
那么所以的点是不是都要算过?就是不知道转换的规则?就是怎么才能转换?
坐标系和什么转换的我看过了。就是实际点,在view中画的矩形,0,0,800,400。
怎么才能到打印预览上正常点?能写点代码吗?说说的我看了很多了
看了很多文章,不知道他想干嘛?在预览里看起来很小?谁能给我说说。谢谢!是不是把映射模式换下?
那么所以的点是不是都要算过?就是不知道转换的规则?就是怎么才能转换?
坐标系和什么转换的我看过了。就是实际点,在view中画的矩形,0,0,800,400。
怎么才能到打印预览上正常点?能写点代码吗?说说的我看了很多了
解决方案 »
- 重装系统后,VS2003下面的项目每次改动所有文件全部重新编译,什么原因呢
- VC中做变化曲线表用什么控件
- ATL编程的时候如何打开一个应用程序并与之交互(获得一些这个应用程序运行的情况)。
- msflexgrid控件的使用
- 面向连接的SOCKET通讯,C/S模式,服务器端可以bind某一个地址,端口。那么客户端连接的是这个地址、端口,但客户端的机器上使用的是哪一
- 请教ZeroMemory()问题!
- 如何实现贴图??
- 简单的关于控件的使用问题,谢谢!
- 哪位发点代码给我啊,入内看看,帮帮忙啦!
- 学习插件架构(三)
- GetItemText问题
- Win7下用MoveToLineTo画线 产生LButtonUp事件才出来线
你屏幕显示和打印预览分开来。
用两个Draw来实现,屏幕显示的Draw里面按照合适的比例作图,预览里面的Draw(CDC *pDC,bool isPreView)可以按照另一比例来画,这个比例要根据打印机的分辨率来定的。
BOOL CPrintView::OnPreparePrinting(CPrintInfo* pInfo)
{
PRINTDLG pd; //该结构包含打印对话框中的所有信息
CPrintDialog m_PrintDlg(FALSE);
HDC m_hDC;
m_hDC=m_PrintDlg.CreatePrinterDC();
LPDEVMODE lpDevMode;
if(AfxGetApp()->GetPrinterDeviceDefaults(&pd)) //获得默认的打印机的信息
{
lpDevMode=(LPDEVMODE)GlobalLock(pd.hDevMode);
if(lpDevMode)
{
lpDevMode->dmFields |= DM_ORIENTATION ; //0x00000001L;
lpDevMode->dmFields |=DM_PAPERSIZE; // 0x00000002L;
lpDevMode->dmFields |=DM_PAPERLENGTH ; //0x00000007L;
lpDevMode->dmFields |= DM_PAPERWIDTH ;
lpDevMode->dmPaperSize=DMPAPER_USER;/将打印纸设置为A4 DMPAPER_A4
lpDevMode->dmOrientation=1将打印机设置为横向打印。DMORIENT_LANDSCAPE
lpDevMode->dmPaperWidth =1900;
lpDevMode->dmPaperLength =700;
HDC i=ResetDC(m_hDC,lpDevMode);
}
GlobalUnlock(pd.hDevMode);
}
pInfo->SetMaxPage(10);
return DoPreparePrinting(pInfo);
}
默认打印纸张:A4大小210*297mm ,它的默认分辨率是1200dpi,当打印预览时CView:OnDraw函数中的pDC指向的就是那个用来预览输出的DC,现在我们调用pDC->GetDeviceCaps(HORZSIZE),pDC->GetDeviceCaps(VERTSIZE),这两个函数用来取得DC显示区域的大小,不过单位是像素或者点(dot),得到的值是9917和14031。
让我们看看210*297和9917*14031有什么关系
1英寸=25.4毫米,那么210毫米的长度按照1200dpi的分辨率能容纳多少点?当然是
210/25.4*1200=9921.259
同样可以算出14031