对于vector有点疑问,
vector<CBitmap*> vBitmap;void CBMPDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码 CBitmap *pBitmap;
TCHAR szSkin[4][MAX_PATH] = 
{
_T("Status_b1.bmp"), _T("Status_b2.bmp"), _T("Status_b3.bmp"), _T("Status_b4.bmp")
};
for(int i=0 ;i<4;i++)
{
pBitmap=CBitmap::FromHandle((HBITMAP)LoadImage(AfxGetInstanceHandle(),
szSkin[i],IMAGE_BITMAP,
0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION));
vBitmap.push_back(pBitmap); }
}void CBMPDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
int aa[100];
memset(aa,0,100*sizeof(int));    CDC *pDC=GetDC();
CDC dc;
dc.CreateCompatibleDC(pDC);
dc.SelectObject(*vBitmap.begin());
pDC->BitBlt(0,0,17,24,&dc,0,0,SRCCOPY);
}
程序先OnBnClickedButton1
然后OnBnClickedButton2会不会有问题啊??
vBitmap

解决方案 »

  1.   

    上面的代码有问题,不可以这么用的。
    msdn都说了,FromHandle生成的是个临时的变量,当系统空闲的时候就会删除。
    只能在本次消息循环的地方使用。所以后面调用的地方可能会出问题了。
      

  2.   

    ---------------------------------
    上面的代码有问题,不可以这么用的。 
    msdn都说了,FromHandle生成的是个临时的变量,当系统空闲的时候就会删除。 
    只能在本次消息循环的地方使用。 所以后面调用的地方可能会出问题了。------------------------------------
    我也是这样想的,使用特意写了这段简单的代码,但是,运行是却没有出现过错误,
    是不是与GDI对象有关系,对象还没有释放。
      

  3.   

    static CBitmap PASCAL FromHandle(HBITMAP hBitmap)
    如果返回成功返回值是一个CBitmap对象的指针,如果不成功返回NULL当赋给Windows GDI bitmap一个句柄时,返回一个CBitmap的指针,
    如果CBitmap的指针和句柄已经绑订在一起,
    那么一个临时的CBitmap对象将会创建并绑订到这个句柄.