打印预览。怎么个转换啊?
看了很多文章,不知道他想干嘛?在预览里看起来很小?谁能给我说说。谢谢!是不是把映射模式换下?
那么所以的点是不是都要算过?就是不知道转换的规则?就是怎么才能转换?
坐标系和什么转换的我看过了。就是实际点,在view中画的矩形,0,0,800,400。 
怎么才能到打印预览上正常点?能写点代码吗?说说的我看了很多了

解决方案 »

  1.   

    在windows里面,显示与打印都被抽象成DC,只需要在DC绘图就可以了。但是需要注意,屏幕分辨率一般是72dpi,而打印机的是300dpi,因此需要按比例进行缩放。
      

  2.   

    DPI不一样,显示范围也不一样。先获得设备(打印机)的Demension,然后重新画,像在OnDraw里面往显示器上画一样。
      

  3.   

    我是这样做的:
    你屏幕显示和打印预览分开来。
    用两个Draw来实现,屏幕显示的Draw里面按照合适的比例作图,预览里面的Draw(CDC *pDC,bool isPreView)可以按照另一比例来画,这个比例要根据打印机的分辨率来定的。
      

  4.   

    一些打印的个性化需求在报表,发票,收据之类的打印应用中经常用到,其实实现起来也很简单,结合上一篇文章:VC++对话框程序打印及打印预览的实现方法 在第二个类CMyView的函数OnPreparePrinting中添加定义页面大小的程序,我们将此函数修改如下:
    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); 
    }
      

  5.   

    比如说:电脑有默认打印机
    默认打印纸张: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