阅读背景:

MFC打印预览问题(预览坐标与打印的实际坐标问题)

来源:互联网 

MFC提供了一个框架性的打印和打印预览功能代码,它的基本思想是将实际显示和打印文档的代码合二为一,即都由此文档关联的CView中的OnDraw(CDC *pDC)来处理,由MFC框架根据用户的操作来决定传进来的pDC是指向屏幕还是打印机,当pDC指向屏幕设备,就在屏幕上显示文档,当指向打印机设备时就打印文档。这些都很好理解,但是,当我们要打印预览时,传进来的pDC就有些特别了。因为打印预览是在屏幕上进行的,所以通常我们会认为这时传进来的pDC一定也是属于屏幕DC一类的。但是其实不然,这个pDC是根据当前默认的打印机的属性来构造的。举个例子,我的计算机上安装了一个打印机,它的默认打印纸是A4大小(210mm X 297mm),而它的默认分辨率是1200dpi。当打印预览时Cview::OnDraw函数中的pDC指向的就是那个用来预览输出的DC,现在我们调用pDC->GetDeviceCaps(HORZSIZE),pDC->GetDeviceCaps(VERTSIZE),这两个函数用来取得DC显示区域的大小,以毫米为单位,得到的返回值为210和297,这恰好就是A4纸的大小。接着再调用pDC->GetDeviceCaps(HORZRES),pDC->GetDeviceCaps(VERTRES),这两个调用返回的也是DC显示区域的大小,不过单位是象素(或者说是点dot),得到的值是9917和14031。让我们看看这两个值与上面的210和297有什么关系。1英寸等于25.4毫米,那么210毫米的长度按照1200dpi的分辨率能容纳多少点?当然是210/25.4×1200,算算看等于多少?没错,就是9917左右(实际是9921.259……),同样可以将297换算成14031。MFC提供了一个框架性的打印和打印预览功能代码,它的基本思想是将实际显示和打印文档的代码合二为




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: