rt

解决方案 »

  1.   

    事先保存nIDResource,跟据需要保存为相应的结构里面,
    如:typedef struct A{
       int nBitmap;//位图索引号
       int nIDResource;//对应位置的资源ID
     } A,*LPA;
      

  2.   

    CBitmap和CGdiObject里没有相应函数可以得到,只能跟踪保存ID。要不就继承CBitmap做一个自己的BITMAP类。
      

  3.   

    MFC没提供什么相应的函数吗?
      

  4.   

    我觉得楼主的意思是使用CBitmap类的时候,想重新得到nIDResource的值。解决这个问题其实很简单,自己写一个类,继承自CBitmap,在这个类中增加一个变量m_nIDResource,改写LoadBitmap(nid)函数,使m_nIDResource=nid,这样,就可以在下次的时候知道上次调用的是哪个nID了。不过,CBitmap已经有没有这个功能了呢?我得查查先,如果没有,就可以使用我上面说的方法。
      

  5.   

    大致可以这样写,改改就可以了。
    ...
    Class CMyBitmap:CBitmap
    {
         UINT m_nIDResource;
     public:
         LoadBitmap(UINT nIDResource);
         UINT GetLastID();
    }...初始化及其他
    ...
    CMyBitmap::LoadBitmap(UINT nIDResource)
    {
        m_nIDResource=nIDResource;
        ::LoadBitmap(UINT nIDResource);
    }
    UINT CMyBitmap::GetLastID()
    {
        return m_nIDResource;
    }
      

  6.   

    HBITMAP LoadBitmapFromFile(HINSTANCE hInst, LPTSTR szFileName)
    {
       BITMAP  bm;   HBITMAP phBitmap = NULL;
       phBitmap = (HBITMAP)LoadImage( hInst, szFileName, IMAGE_BITMAP, 0, 0,
                   LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );
       if( phBitmap == NULL )
         return FALSE;   GetObject(phBitmap, sizeof(BITMAP), &bm );
       if( ( bm.bmBitsPixel * bm.bmPlanes ) <= 8 )
       {
       HDC           hMemDC;
       HBITMAP       hOldBitmap;
       hMemDC = CreateCompatibleDC( NULL );
       hOldBitmap = (HBITMAP)SelectObject( hMemDC, phBitmap );
       SelectObject( hMemDC, hOldBitmap );
       DeleteDC( hMemDC );
       }
       else   
       {
       HDC    hRefDC;
       hRefDC = GetDC( NULL );
       ReleaseDC( NULL, hRefDC );
       }
       return phBitmap;
    }