调用CBitmap::FromHandle返回的CBitmap* 可以保存后反复使用吗?比如:

antimatter7 2005-03-20 01:21:30
调用CBitmap::FromHandle返回的CBitmap* 可以保存以后反复使用吗?比如:


void CMyDlg::OnDisplayBmp()
{
......

CPaintDC dc(m_pBmpWnd);//另一个问题:为什么用CPaintDC和CClientDC定义这个dc都可以?
HBITMAP hbm=CreateDIBitmap(dc.m_hDC, lpbmih, CBM_INIT, lpbInit, lpbmi,
DIB_RGB_COLORS);
m_pBitmap=CBitmap::FromHandle(hbm);//保存经由CBitmap::FromHandle调用返回的m_pBitmap

......
}

void CMyDlg::OnPaint()
{
.....

if(m_pBitmap)
{
CPaintDC dc(m_pBmpWnd);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);

CBitmap* pOldBitmap = dcMem.SelectObject(m_pBitmap);//使用原先保存的m_pBitmap
dc.SetStretchBltMode(COLORONCOLOR);
dc.StretchBlt(m_BmpX,m_BmpY,m_BmpWndWidth,m_BmpWndHeight,
&dcMem,0,0,m_BmpWidth,m_BmpHeight,SRCCOPY);
dcMem.SelectObject(pOldBitmap);
}
CDialog::OnPaint();
......
}

我按上述代码写了程序试验没有发现有问题,但msdn上说象这样这种情况
CBitmap::FromHandle()返回的是一个临时CBitmap对象的指针,mfc framework会在空
闲处理函数onidle时自动释放这样的临时变量。如果按照msdn上所说,应该是无法显示
位图,但我试验了上述代码的确可以正常工作,请教前辈这是为什么呢?

...全文
78 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Featured 2005-03-20
  • 打赏
  • 举报
回复
见另外一个帖子

19,472

社区成员

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

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