我在OnDraw里的加入下面的代码,想要显示一幅图像
    CBitmap bitmap;
        CDC dcMemory;
        bitmap.LoadBitmap(pDoc->FilePathName);
        dcMemory.CreateCompatibleDC(pDC);
        dcMemory.SelectObject(&bitmap);
        pDC->StretchBlt(0,0,323,224,&dcMemory,0,0,323,224,SRCCOPY);
可是无法显示出来,如果把LoadBitmap里面的参数改成一个资源ID却可以显示出来位图。
不知道是为什么,谢谢。

解决方案 »

  1.   

    BOOL LoadBitmap(LPCTSTR lpszResourceName);
    BOOL LoadBitmap(UINT nIDResource);
    应该随便哪一个都可以的!!
      

  2.   

    可是我现在就是不行啊
    我用TextOut可以打出FilePathName的值。
    这个值是在Doc类打开文档时返回的,我定义为Doc类的一个public变量
      

  3.   

    你调试一下看取到了正确的值没有!?FilePathName
    还不行的话把他的路径也写上去看看~~
    不过我不清楚你为什么一顶要这样来实现~~?
      

  4.   

    改成这样子,也还是不行。
      CBitmap bitmap;
      CDC dcMemory;
      bitmap.LoadBitmap("c:\test.bmp");
      dcMemory.CreateCompatibleDC(pDC);
      dcMemory.SelectObject(&bitmap);
      pDC->StretchBlt(0,0,323,224,&dcMemory,0,0,323,224,SRCCOPY);
    我只是想用对话框打开一个bmp文件,然后把它显示出来,就是这样,可是不知道为什么不行啊
      

  5.   

    LoadBitmap不能从文件装载位图,虽然他有一个LPCTSTR的重载,但是那是资源名,就是ID,不是文件名从文件装载位图用LoadImage API
      

  6.   

    呵呵,用LoadImage吧,API的LoadBitmap函数第一个参数为一个包含资源模块句柄的handle,第二个参数资源号。CBitmap的LoadBitmap函数
    _AFXWIN_INLINE BOOL CBitmap::LoadBitmap(UINT nIDResource)
    { return Attach(::LoadBitmap(AfxFindResourceHandle(
    MAKEINTRESOURCE(nIDResource), RT_BITMAP), MAKEINTRESOURCE(nIDResource))); }
    从磁盘取出位图不加入某资源模块是无法取得HBITMAP句柄的。
    LoadImageA(
        HINSTANCE,
        LPCSTR,
        UINT,
        int,
        int,
        UINT);
    WINUSERAPI
    HANDLE
    WINAPI
    LoadImageW(
        HINSTANCE,
        LPCWSTR,
        UINT,
        int,
        int,
        UINT);
    另外,路径要写成"C:\\mydir\\myfile" ".\\myfile"
      

  7.   

    哦。那可不可以讲一下如何把文件变成资源模块,如果知道文件路径和文件名的话。
    LoadImage怎么用的?反正就是要把这个文件显示出来就是了
    谢谢
      

  8.   

    资源一般存于.EXE或.DLL中,在EXE中可以以导入方式(插入文件),编译将生成资源文件。
    LoadImage用法:写简单点哈:
    (HBITMAP)::LoadImage(NULL,"my.bmp",IMAGE_BITMAP,Width,Height,LR_LOADFROMFILE);