我的工程左右视图,右视图是一个listbox,显示所有曲线的名字,点击其中一个曲线名,即可在左视图显示,然后就能进行打印。
但是:
     我发现我打印出来的曲线虽然完整,但是没有充满整张纸,纸右边空白了1/5左右。
另外说明一点,我重载了OnPrepareDC函数,所以打印出来的曲线大小倒是合适的,请高手指点!
void CYuhtView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
{
// TODO: Add your specialized code here and/or call the base class
  if(pDC->IsPrinting())   //横向打印
  {   
  LPDEVMODE   pDevMode;   
  pDevMode=pInfo->m_pPD->GetDevMode();   
  pDevMode->dmOrientation=DMORIENT_LANDSCAPE;   
  pDC->ResetDC(pDevMode);   
  }     CView::OnPrepareDC(pDC, pInfo); long iLogPixelX=pDC->GetDeviceCaps(LOGPIXELSX);
long iLogPixelY=pDC->GetDeviceCaps(LOGPIXELSY);    pDC->SetMapMode(MM_ANISOTROPIC);                     //转换坐标映射方式、确定窗口大小  
    CSize size = CSize(6000, 5000);   
    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);
}

解决方案 »

  1.   

    是size设置的问题?那请问该怎么设置?
      

  2.   

    CSize(6000, 5000)是根据什么设定的?
      

  3.   

    设置CSize(6000, 5000),还是CSize(600000, 500000),不管什么数,结果不变啊
      

  4.   

    你在绘图时的坐标范围是6000*5000吗?
    SetWindowExt是设置程序绘图的坐标范围;SetViewportExt是设置显示设备上的输出范围;显示设备的最大输出范围可以用GetDeviceCaps来获取。
    如果要把绘图范围缩放到整个设备范围,可以这样做:
    CSize size = CSize(6000, 5000);  
    pDC->SetWindowExt(size);
    int width = GetDeviceCaps(HORZRES);
    int height = GetDeviceCaps(VERTRES);
    pDC->SetViewportExt(width, height);
    如果要约束长宽比例,再取设备dpi来计算,确保长、宽都不超出设备范围。