保存绘图时,绘图矩形区域被对话框遮住了

jiabin_007 2009-03-30 11:56:42
我在序列化位图时,本意是想存储我绘图的画面,但是却存储了被保存对话框遮住的绘图画面。
...全文
144 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiabin_007 2009-03-30
  • 打赏
  • 举报
回复
但都要等到序列化的时候才能确定要保存的绘图已经画完了呀,这时保存文件对话框必定会盖住绘图区域的一部分啊。

jiabin_007 2009-03-30
  • 打赏
  • 举报
回复
void CLabelImage::Serialize(CArchive &archive)
{
// call base class function first
// base class is CObject in this case
CObject::Serialize( archive );

// now do the stuff for our specific class
if( archive.IsStoring() )
{

//根据标签dc创建兼容dc
m_dc_compatible.CreateCompatibleDC(mp_dc_label);
//获得标签矩形区域
GetClipBox(mp_dc_label->m_hDC, &m_rect_label);
//创建标签区域兼容位图
mh_bitmap_compatible = CreateCompatibleBitmap(mp_dc_label->m_hDC, m_rect_label.Width()-30, m_rect_label.Height()-30);
//在兼容dc上绘图
m_dc_compatible.SelectObject(CBitmap::FromHandle(mh_bitmap_compatible));

m_dc_compatible.BitBlt(0, 0, m_rect_label.Width(), m_rect_label.Height(), mp_dc_label, 0, 0, SRCCOPY);

//为mp_bitmapinfo分配内存
XG_HRESULT hr_alloc_bitmapinfo = _alloc_memory_for_bitmapinfo();
//根据兼容位图为mp_bitmapinfo添加内容
m_drawbitmap.create_bitmapinfo_struct(&mp_bitmapinfo, mh_bitmap_compatible);
//为mp_byte_bitmap_data分配内存
XG_HRESULT hr_alloc_bitmap_data = _alloc_memory_for_bitmap_data();
//根据兼容位图为mp_byte_bitmap_data添加内容, 并创建位图文件
m_drawbitmap.create_bitmap_file("bitmap_clip.bmp", mp_bitmapinfo, &mp_byte_bitmap_data,
mh_bitmap_compatible, m_dc_compatible.m_hDC);

archive << m_rect_label;
archive << (DWORD)mi_bitmapinfo_size;
archive << (DWORD)mi_bitmap_data_size;
archive.Write(mp_bitmapinfo, mi_bitmapinfo_size);
archive.Write(mp_byte_bitmap_data, mi_bitmap_data_size);

//释放mp_bitmapinfo内存
if( ERROR_ALLOC_MEMORY_FAIL != hr_alloc_bitmapinfo)
{
free(mp_bitmapinfo);
mp_bitmapinfo = NULL;
}
//释放mp_byte_bitmap_data内存
if( hr_alloc_bitmap_data != ERROR_ALLOC_MEMORY_FAIL)
{
free(mp_byte_bitmap_data);
mp_byte_bitmap_data = NULL;
}
//释放兼容位图句柄

DeleteObject(mh_bitmap_compatible);

}
渔村居士 2009-03-30
  • 打赏
  • 举报
回复
楼主可能是保存CDC里的图像吧,我以前也碰到过类似的情况!先顶一下啦!~~
cnzdgs 2009-03-30
  • 打赏
  • 举报
回复
图都是你自己画的,创建个内存DC,把图画到内存DC里面然后保存。
jieleiping 2009-03-30
  • 打赏
  • 举报
回复
问题不明了啊,楼主要多给点信息啊。。。
IONPhantom 2009-03-30
  • 打赏
  • 举报
回复
你是怎么存的?截屏幕?
如果你有自己画完图片的Handle直接存不就完了?
jiabin_007 2009-03-30
  • 打赏
  • 举报
回复
我先试试,谢啦
cnzdgs 2009-03-30
  • 打赏
  • 举报
回复
把图画到内存DC上,不是复制图象。或者你用PrintWindow或者用SendMessage发WM_PRINT消息来实现。

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧