关于CDC的问题
有一个自定义控件,用于绘制坐标图
//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++不是很熟.
[解决办法]
MSDN就有例子
例子