LoadBitmap(lpString);应该是用来读BMP文件,而不是资源中的位图。

解决方案 »

  1.   

    areslee,你误解了LoadBitmap(),有2种形式,一种可以装载bmp文件,一种可以装载资源中的位图。但它们之间的区别呢,为何一个能显示一个不能?
      

  2.   

    LoadBimap(UNIT)是从资源中加载位图。LoadBitmap(const char Far * )是从一个位图文件中加载。使用LoadBitmap(Unit)你必须在你的资源中加入一个位图,参数是该位图资源的ID
      

  3.   

    大错特错!
    LoadBitmap的参数不论那种类型都是针对资源而言,CBitmap是不提供直接从文件中读取位图的功能的!
    使用的形式无非是:
    cBitmap.LoadBitmap(IDB_MYBMP);
    cBitmap.LoadBitmap(MAKEINTRESOURCE(IDB_MYBMP));
    两种的效果一样,都是对资源而言!
    所谓的LPCTSTR和UINT类型参数,只是类型强制转换达到的!请看:
    #define MAKEINTRESOURCEA(i) (LPSTR)((DWORD)((WORD)(i)))
    #define MAKEINTRESOURCEW(i) (LPWSTR)((DWORD)((WORD)(i)))#ifdef UNICODE
    #define MAKEINTRESOURCE  MAKEINTRESOURCEW
    #else
    #define MAKEINTRESOURCE  MAKEINTRESOURCEA
    #endif // !UNICODE
    也许MS为了以后的资源可以变为32位,才提供的LPCTSTR类型的转换!
      

  4.   

    真实的情况是这样的,CBitmap的LoadBitmap函数的两种形式都是针对资源的,一个资源可以用字符串名字标志,也可以用整数ID表示,比如你可以定义位图的ID为IDB_BITMAP1,也可以定义位图的名称为"BITMAP1", 效果一样,只是对于不同的定义法要用LoadBitmap的不同形式。全局函数LoadBitmap的参数才是指文件名.
      

  5.   

    Holly说的对极了LoadBitmap只能装资源,而不能读文件的。
    要读文件话,要用LoadImage这个API函数。
    得到HBITMAP句柄后,用Cbitmap类的Attach.
      

  6.   

    to ad:
    你怎么还没开窍!
    ::LoadBitmap()也是一样的!
    ::LoadImage()要读文件的话,需要将参数fuLoad设置LR_LOADFROMFILE标记!
      

  7.   

    总之只要是LoadBitmap函数就不可以读文件,不管类成员还是全局!
      

  8.   

    楼上的各位网兄的热切关注,lumg表示万分的感谢。还得向各位指导一下,lumg按照上述要点上机操作了一下,果真可以实现Load Image in the dialog,但运行时仍有报错,系统提示Attach
    有错。现将代码呈上:
       CBitmap cBitmap;
       char lpString[256];
       cBitmap.LoadBitmap(cBitmap.Attach((HBITMAP)LoadImage(NULL,lpString,IMAGE_BITMAP,0,0,LR_LOADFROMFILE )));
      不知哪个参数有误,请指示。
      

  9.   

    cBitmap.LoadBitmap(cBitmap.Attach((HBITMAP)LoadImage(...))) ???!!!
    不用这样调用,你用
    cBitmap.Attach((HBITMAP)LoadImage(...));
    就已经把位图放到cBitmap中了,为何你还用LoadBitmap来处理Attach的返回值!?
      

  10.   

    谢谢Holly,谢谢各位,我终于成功了。