热情软件屋

 

输出屏幕内容到打印机,结果打印出非常小的东东


编号:QA003216
建立日期: 2000年7月27日 最后修改日期:2001年6月19日
所属类别:

mosaic:
    操作系统: windows98
    编程工具: Borland C++ Builder 4
    问题: 我用ListView控件显示内容,用如下语句输出屏幕内容到打印机,结果打印出非常小的东东。
     TPrinter *myprint = Printer();
     TListItem *listitem;
    
     myprint->BeginDoc();
    
     myprinter->Canvas->Font = ListView1->Canvas->Font;
    
     ListView1->PaintTo(Printer()->Handle, 10, 10);
    
     myprint->EndDoc();
     水平: 中级

回答:

    CB中的打印是没有真实世界坐标转换的,你在屏幕上看到的东西在打印机上也将用象素打出来,但打印机的分辨率是很高的。所以会出现这个结果,如果要作到WYSWYG(所见所得),你要做许多的工作因此,建议你不要用打印屏幕的方法,或控件的PAINTTO方法。自己处理最好。
    
    liboyu的意见:
    (主持人注:这是MFC的解决方案)加下列就行了。
    void CTalentDrawView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
    {
     // TODO: Add your specialized code here and/or call the base class
     CView::OnPrepareDC(pDC, pInfo);
    
    
     pDC->SetMapMode(MM_ANISOTROPIC); //转换坐标映射方式
     CSize size = CSize(800, 560);
     pDC->SetWindowExt(size); //确定窗口大小
    
    //得到实际设备每逻辑英寸的象素数量
     int xLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSX);
     int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY);
    
    //得到设备坐标和逻辑坐标的比例
     long xExt = (long)size.cx * xLogPixPerInch/96 ;
     long yExt = (long)size.cy * yLogPixPerInch/96 ;
     pDC->SetViewportExt((int)xExt, (int)yExt);
    //确定视口大小
    
     CView::OnPrepareDC(pDC, pInfo);
    }

此问题由牛仔回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio