打印中,设备坐标与逻辑坐标转换

来源:互联网 发布:百会软件 编辑:程序博客网 时间:2024/05/01 03:29

1、在屏幕的CDC中绘图时的坐标转换

系统逻辑坐标——————屏幕坐标————————pDC逻辑坐标

      我们调用GetWindowRect获得的是窗口的屏幕坐标Size。由于pDC默认的MapMode是MM_TEXT,所以我们可以直接使用Size作为逻辑大小填充窗口。

     当然我们可以改变pDc的MapMode,这样我们逻辑坐标是Size,但是屏幕上出现的就不是Size了


2、在打印机中打印时的坐标转换


       打印机坐标————————打印机的pDc逻辑坐标


       屏幕坐标—————————屏幕的pDc逻辑坐标

                          

     

       纸张的尺寸已知,根据屏幕的DPI,纸张在屏幕上的屏幕坐标应该可以求得,所以在打印函数中,框架提供的打印信息中含有纸张的屏幕坐标Size。

      如果我们直接使用打印机的默认pDC(MapMode是MM_TEXT)进行打印,会出现以下情况

     纸张长度————>屏幕坐标Size——————>    打印机坐标Size

    屏幕坐标Size是根据纸张长度和屏幕DPI确定的,在屏幕上Size个坐标的长度应该是纸张的长度,

    但是在打印机中,Size个坐标的长度可能不是纸张的长度,因为屏幕和打印机的DPI不同。


所以要想打印正确,找到屏幕上SIze对应打印机中的多少个单位,我们可以设置打印机pDC的MapMode

      



根据屏幕的pDC->GetDeviceCaps(),获得屏幕上一英寸对应的屏幕坐标长度x1;

根据打印机的pDC->GetDeviceCaps(),获得打印机上一英寸对应的打印机坐标长度x2;


    打印机pDC->SetMapMode(MM_ANISOTROPIC);

pDC->SetWindowExt(x1,y1);//逻辑窗口中坐标大小
pDC->SetViewportExt(x2,y2);//打印窗口中坐标大小


   

        




    


0 0
原创粉丝点击