拷贝一个位图的任意矩形区域生成新的位图,实际调试发现什么也没拷贝出来,请大家帮忙.
程序如下:HBITMAP ImageControl::CopyBitmap(HBITMAP hbmSrc, int x, int y, int width, int height)
{ HBITMAP hbmDst;
HDC hdcOrg;
HDC hdcSrcMem, hdcDstMem;
RECT rt, rt1; hdcOrg = GetDC(hWnd); hdcSrcMem = CreateCompatibleDC(hdcOrg);
SelectObject(hdcSrcMem, hbmSrc); hdcDstMem = CreateCompatibleDC(hdcOrg);
hbmDst = CreateCompatibleBitmap(hdcDstMem, width, height);
SelectObject(hdcDstMem, hbmDst); ReleaseDC(hWnd, hdcOrg); BitBlt(hdcDstMem, 0, 0, width, height, hdcSrcMem, x, y, SRCCOPY);
GetClientRect(hWnd, &rt);/*
rt1.left = rt.left + 10;
rt1.top = rt.top + 5;
rt1.right = rt.right - 10;
rt1.bottom = rt.bottom - 5; FrameRect(hdcDstMem, &rt1, (HBRUSH)GetStockObject(WHITE_BRUSH));
FrameRect(hdcDstMem, &rt, (HBRUSH)GetStockObject(WHITE_BRUSH));
*/
DeleteDC(hdcSrcMem);
DeleteDC(hdcDstMem);
return hbmDst;
}
程序如下:HBITMAP ImageControl::CopyBitmap(HBITMAP hbmSrc, int x, int y, int width, int height)
{ HBITMAP hbmDst;
HDC hdcOrg;
HDC hdcSrcMem, hdcDstMem;
RECT rt, rt1; hdcOrg = GetDC(hWnd); hdcSrcMem = CreateCompatibleDC(hdcOrg);
SelectObject(hdcSrcMem, hbmSrc); hdcDstMem = CreateCompatibleDC(hdcOrg);
hbmDst = CreateCompatibleBitmap(hdcDstMem, width, height);
SelectObject(hdcDstMem, hbmDst); ReleaseDC(hWnd, hdcOrg); BitBlt(hdcDstMem, 0, 0, width, height, hdcSrcMem, x, y, SRCCOPY);
GetClientRect(hWnd, &rt);/*
rt1.left = rt.left + 10;
rt1.top = rt.top + 5;
rt1.right = rt.right - 10;
rt1.bottom = rt.bottom - 5; FrameRect(hdcDstMem, &rt1, (HBRUSH)GetStockObject(WHITE_BRUSH));
FrameRect(hdcDstMem, &rt, (HBRUSH)GetStockObject(WHITE_BRUSH));
*/
DeleteDC(hdcSrcMem);
DeleteDC(hdcDstMem);
return hbmDst;
}
解决方案 »
- mfc ADO方法 向 access数据库插入数据怎么操作啊?
- 学好汇编C加加,走遍天下都不怕
- 帮我看看我的“实现VC中的十六进制字符转十进制数字”有啥问题没?
- 使用CButtonST添加图标的问题
- 想买一本书(义务送分活动)
- 怎么将char[32]拷贝给一个CString类型的对象。
- 不难,关于程序调用的问题
- 一个对话框调用另一个对话框,子对话框触发按键怎么不好使?
- 关于列表控件显示Access数据表相关问题
- 请教如何显示一个已有的wmf文件?
- 如何才能确保一个类的每个子类都有一个<<<各自的>>><<<同名的>>><<<同类型的>>><<<静态>>成员?像CmdTarget类一样,但不要用宏
- CListBox怎么加水平滚动条
改成
hbmDst = CreateCompatibleBitmap(hdcOrg, width, height);
试试
rt1.top = rt.top + 5;
rt1.right = rt.right - 10;
rt1.bottom = rt.bottom - 5; FrameRect(hdcDstMem, &rt1, (HBRUSH)GetStockObject(WHITE_BRUSH));
FrameRect(hdcDstMem, &rt, (HBRUSH)GetStockObject(WHITE_BRUSH));
hbmDst = CreateCompatibleBitmap(hdcDstMem, width, height)前面。现在把hdcDstMem换成hdcDlg然后再把ReleaseDC(hWnd, hdcOrg)放在挪回来就可以了,多谢yaozijian110!