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();
}
}
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();
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询