热情软件屋

 

同一段代码在win98下能正确打印,但在win2000下打印的却非常小


编号:QA004413
建立日期: 2001年9月17日 最后修改日期:2001年9月17日
所属类别:

罗现朋:
    操作系统:win98/2000
    编程工具:vc
    问题:同一段代码在win98下能正确打印,但在win2000下打印的却非常小,不知什么原因,希望能得到您的指导,谢谢!
    //设置显示模式
    ::SetStretchBltMode(hDC,COLORONCOLOR);
    //判断是调用StretchDIBits()还是SetDIBitsToDevice()来绘制对象
    //原始大小,不用拉伸
    bSuccess = ::SetDIBitsToDevice(hDC,//hDC
     目标x,
     目标y,
     目标宽度,
     目标高度,
     源x,
     源y,
     0,//nStartScan
     扫描的总线数,//nNumScans
     存储位图的地址指针,//lpBits
     位图信息,//lpBitsInfo
     DIB_RGB_COLORS);
    水平: 中级

回答:

    对于我问的那个问题,我后来找到了一点眉目。发现在OnPrepareDC()中添加如下一段后不能打印,去掉后可以打印(在win2000下)
    void CxxxView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
    {
    
    pDC->SetMapMode(MM_ANISOTROPIC);//转换坐标映射方式
    //各向异性,在这种坐标方式下,X轴和Y轴的逻辑单位
    //可以进行任意的缩放
    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);
    
    CScrollView::OnPrepareDC(pDC, pInfo);
    }

此问题由李海回答。

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

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