antimatter7 2005年03月20日
调用CBitmap::FromHandle返回的CBitmap* 可以保存后反复使用吗?比如:
调用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上所说,应该是无法显示
位图,但我试验了上述代码的确可以正常工作,请教前辈这是为什么呢?

...全文
24 点赞 收藏 1
写回复
1 条回复

还没有回复,快来抢沙发~

发动态
发帖子
图形处理/算法
创建于2007-09-28

7610

社区成员

5.0w+

社区内容

VC/MFC 图形处理/算法
社区公告
暂无公告