关于CDC的问题

火星大能猫 2013-04-17 03:01:22
有一个自定义控件,用于绘制坐标图



//onpaint事件
void ImgCtrl::OnPaint()
{
if ( NULL != m_pCurve )
{
CPaintDC dc(this);
m_pCurve->DrawCurve( &dc );
}
}


我想获取控件绘制的图标数据,保存为bmp格式,
给控件添加了一个save函数

void ImgCtrl::SaveCurveImg()
{
CDC* pDc =GetDC();
HBITMAP hbitmap = CreateCompatibleBitmap(*pDc, 654,489);
HDC hdc = CreateCompatibleDC(*pDc);
//将位图选入dc,并保存返回值
HBITMAP hOldMap = (HBITMAP)SelectObject(hdc,hbitmap);
//将屏幕dc的图像复制到内存dc中
BitBlt(hdc,0,0, 654,489,*pDc,0,0,SRCCOPY);
CImage image;
image.Attach(hbitmap);//将位图转化为一般图像
HRESULT hResult = image.Save(L"C:\\cccc.bmp");
if(FAILED(hResult))
AfxMessageBox(L"Failed");
image.Detach();
SelectObject(hdc,hOldMap);
}


但是这样子只能保存到控件初始化的图形,无法获取到传入数据后的图形.

如果卸载onpaint里,那么图像肯定是正确的.
但这样肯定不是我想要的方法,图像会不断更新保存,窗口遮挡保存的图像也不对.
CDC如果声明一个public变量来获取onpaint里的dc的话,貌似不行
程序会崩溃,有什么好的方法么?
对MFC,C++不是很熟.
...全文
115 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
傻X 2013-04-22
  • 打赏
  • 举报
回复
MSDN就有例子 例子
火星大能猫 2013-04-22
  • 打赏
  • 举报
回复
引用 2 楼 tiger9991 的回复:
用GDI+,里面的Image用Save就能保存成EMF文件
有资料或者demo么?
傻X 2013-04-18
  • 打赏
  • 举报
回复
用GDI+,里面的Image用Save就能保存成EMF文件
火星大能猫 2013-04-17
  • 打赏
  • 举报
回复
save里改成cdc CPaintDC dc(this); 倒是可以了 如何保存为emf格式呢

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧