//////////////////////////////////////////////////////////////////////////
//内存贴图
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中,谢谢
//内存贴图
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中,谢谢
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货