怎么把MFC的对话框上的内容以图片的形式储存起来

我在上面用LineTo啊上面函数画了很多东西了,要存到硬盘
2024-12-22 16:21:21
推荐回答(1个)
回答1:

我大致上了解你的想法,个人建议你在视图里实现,下面我附上部分代码供你参考:

CBitmap * CTesttView::GetViewBitmap(int x, int y, int width, int height)
{
CBitmap * winBmp = NULL;

CClientDC dc(this);
HDC hdc = dc.m_hDC;
HDC hdc2 = ::CreateCompatibleDC(NULL);
HBITMAP bitmap = ::CreateCompatibleBitmap(hdc, width, height);
::SelectObject(hdc2, bitmap);
::BitBlt(hdc2, 0, 0, width, height, hdc, x, y, SRCCOPY);
winBmp = CBitmap::FromHandle(bitmap);
return winBmp;
}

//参数里的X,Y是视图里你要保存为图片的起始位置。
上面的代码,就可以得到一张DDB的指针,如果你想把它保存起来,比如说BMP文件,你可以把这个DDB位图转换成DIV位图,然后直接写文件就是了,这个网络上有很多资料。我这里介绍一个投机的方法,就是把位图放在剪贴板上面,然后就可以通过粘贴到其他文档上就可以保存了,比如说WINDOW自带的画图工具。下面是代码:
CRect preRect(m_prePoint, point);
m_prePoint = point;

//将方框内的图片复制到剪贴板上
if (OpenClipboard())
{
EmptyClipboard();

CBitmap * winBmp = GetViewBitmap(preRect.left, preRect.top, preRect.Width(), preRect.Height());
if (winBmp != NULL)
{
SetClipboardData(CF_BITMAP, winBmp->m_hObject);
CloseClipboard();
winBmp->DeleteObject();
}
}