MFC 中CImage类的问题

voidC测试2005Dlg::OnBnClickedButton1(){//TODO:在此添加控件通知处理程序代码HWNDhwnd=::GetDesktopWindow... void C测试2005Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
HWND hwnd = ::GetDesktopWindow();
HDC hDC = ::GetDC(hwnd);//获取屏幕DC

RECT rect;
::GetClientRect(hwnd, &rect);//获取屏幕大小
HDC hDCMem = ::CreateCompatibleDC(hDC);//创建兼容DC

HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC, rect.right, rect.bottom);//创建兼容位图
HBITMAP hOldMap = (HBITMAP)::SelectObject(hDCMem, hBitMap);//将位图选入DC,并保存返回值

::BitBlt(hDCMem, 0, 0, rect.right, rect.bottom, hDC, 0, 0, SRCCOPY);//将屏幕DC的图象复制到内存DC中

CImage image;
image.Attach(hBitMap);

image.Draw(::GetDC(this->m_hWnd),0,0,495,455,0,0,495,455);
HRESULT hResult = image.Save( _T("d:\\new.jpg"));
if(FAILED(hResult))
MessageBox(_T("保存图像文件失败!"));
else
MessageBox(_T("保存图像文件成功!"));
image.Detach();//解除位图和CImage对象的绑定

::SelectObject(hDCMem, hOldMap);//选入上次的返回值

//释放
::DeleteObject(hBitMap);
::DeleteDC(hDCMem);
::DeleteDC(hDC);
}
能不能请高手看看?为什么这段程序老是报错?
能不能告诉我怎么确定错误在draw函数内部?我是新手,不懂额....

qsw602a能不能加下我的QQ71907239?
展开
 我来答
qsw602a
2010-08-22 · 超过17用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:53.2万
展开全部
将::selectobject(hdcmem, holdmap)这行移到image.draw函数之前。
错误原因是在draw函数内部,这个函数也会将图片selectobject到一个HDC中,这样,你创建的图片就分别selectobject到两个hdc内,就会出错。具体为什么会出错,我也不清楚。

在Draw那边设个断点,按F5进入调试,点击按键,VS会触发断点,这是按F11就可以查看Draw函数的具体源代码了。
也可以利用VS的搜索,路径为你安装的VS的路径,也能搜索到具体的Draw源代码
kissmegodlike
2010-08-20 · 超过12用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:0
展开全部
具体报的错是什么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式