比如:我创建了一个BITMAP资源IDB_BITMAP1  ; lpszResourceName是指什么呢,是硬盘上
的bitmap1.bmp吗,如果是,以下代码为什么是错的。 CBitmap bmp;
bmp.LoadBitmap("d:\\..\\res\\bitmpa1.bmp");
CDC memdc;
BITMAP bmstru;
bmp.GetBitmap(&bmstru);
memdc.CreateCompatibleDC(pDC);
memdc.SelectObject(&bmp);
 pDC->BitBlt(0,0,bmstru.bmWidth,bmstru.bmHeight,&memdc,0,0,SRCCOPY);

解决方案 »

  1.   

    资源可以用两种类型名字标识,一种是资源ID,另一种是资源字串.
    它们都是资源,都会在连接入EXE中
      

  2.   

    但你还是没有告示我资源字串是什么,是硬盘上
    的bitmap1.bmp吗,如果是,以上代码为什么是错的。
      

  3.   

    这里的资源不是硬盘上的,而是在资源文件里面标识的,看看rc文件就有了。
    加载硬盘的文件,可以使用LoadImage函数指明LR_LOADFROMFILE标志
      

  4.   

    先insert 在rc 中就有那,如idr_bmp discardable "my.bmp"
      

  5.   

    能不能告诉我bmp.LoadBitmap("res\\bitmpa1.bmp")为什么错了。CBitmap bmp;
    bmp.LoadBitmap("res\\bitmpa1.bmp");
    CDC memdc;
    BITMAP bmstru;
    bmp.GetBitmap(&bmstru);
    memdc.CreateCompatibleDC(pDC);
    memdc.SelectObject(&bmp);
    pDC->BitBlt(0,0,bmstru.bmWidth,bmstru.bmHeight,&memdc,0,0,SRCCOPY);
      

  6.   

    在VC中,资源可以用两种类型名字标识,一种是资源ID,另一种是资源字串.
    都在属性ID中设置,为字串是外加双引号(例:"Bitmap1"),
    一般标明lpszResourceName的参数,就可直接采用"Bitmap1"
      

  7.   

    其实"Bitmap1"只是种标识,在Import资源时就已经知道资源真实路径及文件名了
      

  8.   

    LoadBitmap()函数不能那么调用,只能调用你已引入(Import)资源文件的资源,如想动态读取文件显示,必须先通过CFile类Read文件......再进行显示操作(例子很多地方都有)
      

  9.   

    谢谢大家,资源IDB_BITMAP1是从硬盘上 background.bmp import的,
      lpszResourceName=?谁能让我测试通过,就给谁分.
      

  10.   

    用Notepad打开*.rc文件,找到类似下面一行:IDB_BITMAP BITMAP "res\\background.bmp"改成:Bitmap1 BITMAP "res\background.bmp"或者,在VC中察看位图资源的属性,将其ID栏内改为"Bitmap"(注意,一定要加引号)。然后调用:
    bmp.LoadBitmap("Bitmap1");
    保证成功。资源可以用一个整数来标示,也可以用一个字符串标示。但无论如何,这些ID都不是指位图文件名。不要将它们混淆。
      

  11.   

    LoadBitmap( MAKEINTRESOURCE(IDB_MYBITMAP) );
      

  12.   

    其实,CBitmap::LoadBitmap的两个原型调用的是同一个API函数:LoadBitmap。这个函数会接受一个32位的量作为位图资源ID。如果这个值的高16位为0,他就被解释为一个整数ID,否则就被理解为一个字符串指针。因此,用作资源ID的整数值不能超过65535。由于::LoadBitmap声明时将这个32位的量声明为一个字符串指针类型,因此如果要用整数ID,就利用宏MAKEINTRESOURCE将其强制类型转换为字符串指针——但这并不会影响到LoadBitmap内部对这个值的解释。