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?

解决方案 »

  1.   

            CBitmap bmp;
    HBITMAP  hbmp;
    //使图片不失真,先将位图加载
    hbmp= (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
    MAKEINTRESOURCE(nIDRes),
    IMAGE_BITMAP, //按位图格式
    0,0,
    LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS );
            bmp.Attach(hbmp);
      

  2.   

    CBitmap m_Backbmp;
    m_Backbmp.LoadBitmap(IDB_BACK);
      

  3.   

    u32IDBitmapRes指向的位图不存在,换一张吧
      

  4.   

    CBitmap bmpDrawGraph
    把这个设成类的成员变量就可以了,显示不出来是因为你的bmpDrawGraph对象提前销毁的事。
      

  5.   

    我今天碰到了一个类似的问题我给自定义类CGameInfo 添加了一个 CBitmap m_bmpGameInfo
    然后在构造函数CGameInfo()里面 m_bmpGameInfo.LoadBmp(IDB_XXX);然后就报错,搞不明白为什么,后来看了这篇帖子,把LoadBmp放到了初始化函数OnInitXXX()里
    就不报错了总结是:构造函数里 变量和资源可能还没有准备好,所以会出错
            初始化函数里变量和资源都准备好了,就可以用了