//////////////////////////////////////////////////////////////////////////
//内存贴图
CRect rcTmp = rc;
pDC->LPtoDP(&rcTmp);
//构造内存DC和Bitmap
CDC memDC;  
memDC.CreateCompatibleDC(NULL);
//memDC.SetMapMode(MM_HIMETRIC);
memDC.SetMapMode(MM_TEXT); CRect rcBmp = rcTmp;
rcBmp.SetRect(0,0,rcBmp.Width(),rcBmp.Height());
CBitmap bmp;   
bmp.CreateCompatibleBitmap(pDC, rcTmp.Width(),abs(rcTmp.Height()));
memDC.SelectObject(&bmp); //绘图
memDC.FillSolidRect(&rcBmp, RGB(255,255,255));
pPic.Show(&memDC, rcBmp);

int mode = pDC->SetMapMode(MM_TEXT);//设置 绘图模式为 MM_TEXT
pDC->BitBlt(rcTmp.left, rcTmp.top, rcTmp.Width(), rcTmp.Height(), 
&memDC, 0,0, SRCCOPY);
pDC->SetMapMode(mode);//恢复绘图模式 bmp.DeleteObject();
memDC.DeleteDC();
//////////////////////////////////////////////////////////////////////////pPic 为 IPicture类型,功能为绘制图片,此处使用内存贴图是因为要生成 EMF 图,EMF图生成方式为播放,
既在 CMetaFileDC 中绘制一次,所以不能直接使用COM组件,用 BitBlt 以便可以生成EMF问题就出来在这里,
CDC memDC;  
memDC.CreateCompatibleDC(NULL);
//memDC.SetMapMode(MM_HIMETRIC);设置 为 MM_HIMETRIC 下进行  LPtoDP,可以绘制出来,但绘制范围过大则无法绘出,即rcTmp 范围过大,有时可以生成 EMF ,有时则不行,不行时查看EMF绘制过程,没有 BitBlt 这一步,但的确在 Draw中执行过(调试)奇怪如果换绘制模式为 CDC memDC;  
memDC.CreateCompatibleDC(NULL);
memDC.SetMapMode(MM_TEXT);且设置转换当前 Dc 绘制模式为 MM_TEXT,则 但绘制范围过大则无法绘出  该问题解决,但无法在 EMF 中绘制图片 ,至少我现在没有发现再次奇怪,郁闷 至于认为 BUG 出在 设置 为 MM_HIMETRIC 下进行  LPtoDP,可以绘制出来,但绘制范围过大则无法绘出,且设置转换当前 Dc 绘制模式为 MM_TEXT,则 但绘制范围过大则无法绘出  该问题解决,
请高手指点 ,如果有好的生成EMF 图的方法也可以告知小弟,不过要能够将图片保存在EMF中,谢谢

解决方案 »

  1.   

    改正  MM_HIMETRIC 不进行  LPtoDP,直接使用 逻辑坐标最奇怪的就是 设置 为 MM_HIMETRIC 不进行  LPtoDP,可以绘制出来,但绘制范围过大则无法绘出,且设置转换当前 Dc 绘制模式为 MM_TEXT,则 但绘制范围过大则无法绘出  该问题解决,
      

  2.   

    现在我在 内存贴图的时候 把 DC 转换成 MM_TEXT,不论怎么样在 VIEW 中都可以绘制出来 ,但是 EMF 中就不行了,我估计是 因为转换了 DC  的 如果不转换 但绘制范围过大则无法绘出,在 VIEW 中都绘制不了,但是有时候可以在 EMF 中绘制出来 如果不转换 的 话 贴图速度非常慢 ,不知道怎么回事
      

  3.   

    就是说 我要在一个区域里面贴图片 ,图片用 IPicture 读取MM_HIMETRIC  下区域过大图片在VIEW贴不出来 ,但是有时候 可以在 EMF 中贴出 MM_TEXT  区域过大也可以在 VIEW 中 贴出来,但是在 EMF 中没有 Bitbit 这一步操作
      

  4.   

    VIEW  为  MM_HIMETRIC 模式
      

  5.   

    Up  或者  怎么将 IPicture 中加载的图片保存 在EMF 当中 ,EMF 也包括了其他 绘制,不仅仅是 IPicture 中加载的图片
      

  6.   

    在Win98下,坐标大小是有限制的,是16位的整数,不知道在2000下和XP下是否有限制。不知道是不是坐标范围的问题。很久没有写这些东西了。记得不清楚,你测试一下是不是超过16位整数就出错(好像是16位的有符号整数)。