在VC2005中向资源文件 *.rc 中可以插入任意文件。最后他们会被嵌入到 EXE 文件中。
请不要回答:在“资源文件”上点击右键,在弹出菜单里选择“添加”再选择“添加资源”。
我最开始就是这么做的,如果你选择添加的资源类型为 Bitmap ,并且选择一个 jpg 文件以后,你会发现,你在硬盘上的 jpg 文件被 vc 修改成了 bmp 文件。。
于是,我选择自定义类型,来加入 JPG 文件,但是问题就在这里,自定义文件要求你输入十六进制的数据,我尝试着用记事本打开 JPG 文件,然后复制过去,但是不行,文件格式不对,在程序中无法对 JPG 资源进行读取。最后,请问,如何把 JPG 文件作为“自定义”类型加入到 VC 的资源文件(*.rc)中。。

解决方案 »

  1.   

    你用的两种方法都是错误的,正确的加载方式是选择导入(import),而非选择new(新建)
    导入的话不需要选择类型,系统会自动在工程的resources树上形成一个同bitmap同级别的JPG的filter你导入后需要用CImage类,下面是加载的方法和我用的函数
            m_pImage = new CImage(); ImageFromIDResource(*m_pImage, IDB_PNG_IDISK, _T("PNG")); HBITMAP hBitmap = m_pImage->Detach(); m_statBitmap.SetBitmap(hBitmap);void  ImageFromIDResource(CImage& image, UINT nID, LPCTSTR lpType)
    {
    HINSTANCE hInst = AfxGetResourceHandle();
    HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),lpType);  if(hRsrc == NULL)
    return; DWORD dwLen = SizeofResource(hInst, hRsrc); BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc); if (!lpRsrc)
    return;; HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, dwLen);
    BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
    memcpy(pmem,lpRsrc,dwLen);
    IStream* pstm;
    CreateStreamOnHGlobal(m_hMem,FALSE,&pstm); image.Load(pstm);
    GlobalUnlock(m_hMem);
    pstm->Release();
    FreeResource(lpRsrc);
    }
      

  2.   

    vc默认只对BMP支持,希望到vc10能做到支持更多图片,这才能让vc的图片处理更简单点
      

  3.   

    哎。。是我的错,JPG文件,我已经想办法正确加载进去了,但是现在的问题是。已知一个资源文件的ID号,如何取得到它的文件名???
    在 *.RC 文件中是这样:IDR_RCDATA1             RCDATA                  "rcdata1.bin"
    在代码中,只能使用 ID ,也就是“IDR_RCDATA1”去填充相关函数的参数,那么,如何由这个ID去得到文件名“rcdata1.bin”呢???
      

  4.   

    最终的问题在这里://in RC File
    IDR_RCDATA1             RCDATA                  "rcdata1.bin"//in Cpp File
    //这么使用没有问题
    D3DXCreateTextureFromResourceA(m_lpD3DDevice,NULL,MAKEINTRESOURCEA(IDR_RCDATA1),&sxMesh->lpMeshTextures[i]))//这么使用报错????
    D3DXCreateTextureFromResourceA(m_lpD3DDevice,NULL,"IDR_RCDATA1",&sxMesh->lpMeshTextures[i]))
    为什么下面一种调用方式不行呢??