调用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上所说,应该是无法显示
位图,但我试验了上述代码的确可以正常工作,请教前辈这是为什么呢?