CBitmap类的LoadBitmap()方法通过文件名为什么无法读取位图?而非要通过资源号?MSDN中对LoadBitmap()方法的说明也是说可以通过文件名来读取的啊

解决方案 »

  1.   

    HBITMAP hbmp;
    hbmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(),"D:\\1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
    CBitmap bmp;
    bmp.Attach(hbmp);
      

  2.   

    同意楼上的,从文件中载入图片,要使用LoadImage
      

  3.   

    CBitmap::LoadBitmap()不能以文件形式打开,原因不知道,虽然提供了LPCTSTR lpszResourceName(主持人注:这个参数是DLL或EXE中的资源名,不是文件名),我给出了另外的方法,也是常用的。请看下面的代码: 
         CBitmap bmp[3]; 
         image=new CImageList(); 
         image->Create(32,32,TRUE,1,1); 
         HBITMAP hbmp;//位图句柄 
         hbmp= (HBITMAP)::LoadImage( AfxGetInstanceHandle(), 
         "bitmap1.bmp",IMAGE_BITMAP,0,0, 
         LR_LOADFROMFILE);//从文件bitmap1.bmp打开位图资源 
         bmp[0].Attach(hbmp);//绑定 
         image->Add(&bmp,color); 
         
         hbmp= (HBITMAP)::LoadImage( AfxGetInstanceHandle(), 
         "bitmap2.bmp",IMAGE_BITMAP,0,0, 
         LR_LOADFROMFILE); 
         bmp[1].Attach(hbmp); 
         image->Add(&bmp2,color); 
         
         hbmp= (HBITMAP)::LoadImage( AfxGetInstanceHandle(), 
         "bitmap3.bmp",IMAGE_BITMAP,0,0, 
         LR_LOADFROMFILE); 
         bmp[2].Attach(hbmp); 
         image->Add(&bmp3,color); 
         
         m_list.SetImageList(image, LVSIL_NORMAL); 
      

  4.   

    同意!最好用loadimage函数。我也遇到过这个情况
      

  5.   

    to lixiaosan(小三) :
    这个参数是DLL或EXE中的资源名,不是文件名
    那应该怎么用呢?
      

  6.   

    如果为DLL或EXE中的资源名,直接用LoadBitmap()就可以了。
    如果为资源ID,用MAKEINTRESOURCE(nResourceID)进行转换
      

  7.   

    对了,我觉得MFC在这点做的不好,每次我读图的时候都用我曾经写过的一个类,直接可以从文件中读取,类如下
    class CBitmapEx : public CBitmap  
    {
    public:
    BOOL LoadBitmapImage(LPCTSTR szFilename);
    CBitmapEx();
    virtual ~CBitmapEx();
    };
    CBitmapEx::CBitmapEx()
    {}CBitmapEx::~CBitmapEx()
    {}BOOL CBitmapEx::LoadBitmapImage(LPCTSTR szFilename)
    {
    ASSERT(szFilename);
    DeleteObject();
    HBITMAP hbitmap=NULL;
    hbitmap=(HBITMAP)LoadImage(NULL,szFilename,IMAGE_BITMAP,0, 0,LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
    return Attach(hbitmap);
    }
    以后就用它代替CBitmap了
      

  8.   

    另外我还有更多功能的CBitmap类,需要的话可以找我