void CDrawCtrl::drawBitmap(IN HDC &hCanvas,
IN RECT rcRect,
IN INT u32IDBitmapRes)
{
CDC* pDc = NULL;
BOOL bRet = FALSE;
CDC MemDC;
BITMAP bmpBitMapTmp;
CBitmap bmpDrawGraph; pDc = CDC::FromHandle(hCanvas);
if(NULL == pDc)
{
return;
} //load bitmap
bRet = bmpDrawGraph.LoadBitmap(MAKEINTRESOURCE(u32IDBitmapRes)); // 这句报错
//以下省略
}报错后指向 AFXWIN1.INL 这里
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetResourceHandle()
{ ASSERT(afxCurrentResourceHandle != NULL); 为什么同一段代码,我有些程序调用就ok,有些就会报错?u32IDBitmapRes参数是否可以为未定义的资源ID?
HBITMAP hbmp;
//使图片不失真,先将位图加载
hbmp= (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(nIDRes),
IMAGE_BITMAP, //按位图格式
0,0,
LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS );
bmp.Attach(hbmp);
m_Backbmp.LoadBitmap(IDB_BACK);
把这个设成类的成员变量就可以了,显示不出来是因为你的bmpDrawGraph对象提前销毁的事。
然后在构造函数CGameInfo()里面 m_bmpGameInfo.LoadBmp(IDB_XXX);然后就报错,搞不明白为什么,后来看了这篇帖子,把LoadBmp放到了初始化函数OnInitXXX()里
就不报错了总结是:构造函数里 变量和资源可能还没有准备好,所以会出错
初始化函数里变量和资源都准备好了,就可以用了