我在視圖的 OnDraw 中用  pDC->SetMapMode(MM_HIMETRIC); 改變映像模式在屏幕上顯示正常,但在 PrintPreview 中就不正常了,打印時也不正常, 只有當
pDC->SetMapMode(MM_TEXT); 時才正常, 請問該怎么辦? (主要是我想提高精度)

解决方案 »

  1.   

    SIZE s1, s2 ;pDC->SetMapMode(MM_ANISOTROPIC) ;s1.cx = pDC->GetDeviceCaps(HORZRES) ;
    s1.cy = pDC->GetDeviceCaps(VERTRES) ;
    s2.cx = pDC->GetDeviceCaps(HORISIZE)*10 ;
    s2.cy = pDC->GetDeviceCaps(VERZSIZE)*10 ;pDC->SetViewportExt(S1.cx, s1.cy) ;
    pDC->SetWindowExt(s2.cx, s2.cy) ;
      

  2.   

    TO: xt_jat(桑巴)  请解释一下你这段代码,行吗? 谢谢!
      

  3.   

    我用了你的代碼好像還是不行可能是我弄錯了可以給一個比較例子嗎 ,
    用 MM_HIMETRIC 模式, 另加100 分
      

  4.   

    这个一两句话说不清楚, MM_HIMETRIC 没法做到屏幕显示与打印的统一(我是这样认为的,也许不对) 
    我说的这种模式的X向右为正,Y向下为正,
    而MM_HIMETRIC 为X向右为正,Y向上为正,所以你可能看不到任何东西,改一下图形的坐标值就可以了如果精度要到0.01   改成*100 就可以了
      

  5.   

    但用你的代码时,屏幕上顯示正常,但在 PrintPreview 中也不正常
      

  6.   

    使用pDC->SetMapMode(MM_HIMETRIC); 后你的字体高度是不是足够高,以及y坐标有没有取负,并保证足够大小??你把字高改为500,
    pDC->SetMapMode(MM_HIMETRIC);
    pDC->TextOut(1000, -1000, "sth");pDC->MoveTo(1000, -2000);
    pDC->LineTo(30000, -2000);不可能出问题吧?另外建议使用MM_LOMETRIC,因为这些取值不能大于32767的。
      

  7.   

    谢谢你!!
    你是说 把字体的高转化为 MM_HIMETRIC 作单位的值 就可以了,那么宽度要不要改? 刚才我试了下 ,那些值可以大于32767 
      

  8.   

    宽度取0,它会自动处理的至少拓win9x下大于32767,绘制的图形一定不正确。(2000我记得也是,XP未试),只是它没有提示而已。