LoadPicture(temp+“\\5.bmp");//temp即当前工程Debug/路径
图片放在当前工程目录Debug/下的
HBITMAP CdriverDlg::LoadPicture(LPCSTR mFile)
{
CString pFSize;
WCHAR wpath[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, mFile, -1, wpath, MAX_PATH);
由于程序需要这里只能加载图片的路径,不能用ID号来传,而我release后必须把5.bmp放在.exe同一目录下才能加载图片,现在有没有办法不通过调用图片ID号而把图片连同程序一起生成.exe呢?

解决方案 »

  1.   

    把bmp作为资源打包进去 ,然后exe启动时可以检查当前路径有没有此bmp,没有的话就查找资源,释放文件到磁盘中,可以参考下面连接中最后的那部分看看
    http://qiusuoge.com/9268.html
      

  2.   

    这种方式最后是不是仍然会在当前路径生成一个bmp的图片啊?没有办法在生成EXE的时候就把当前工程文件夹里的bmp一起生成吗?或者看看我的代码,有没有办法通过调用ID号来传到HBITMAP CdriverDlg::LoadPicture(LPCSTR mFile)里呢?
      

  3.   

    那就得你把LoadPicture函数改一下了,看了一下里面应该是必须要一个文件的路径的,没有对应路径的文件你怎么变换都没用
      

  4.   

    那就得你把LoadPicture函数改一下了,看了一下里面应该是必须要一个文件的路径的,没有对应路径的文件你怎么变换都没用
      

  5.   

    HBITMAP CdriverDlg::LoadPicture(LPCSTR mFile)
    {
    CString pFSize;
    WCHAR wpath[MAX_PATH];
    MultiByteToWideChar(CP_ACP, 0, mFile, -1, wpath, MAX_PATH); IPicture* pPic;
    OleLoadPicturePath(wpath, NULL, NULL, NULL, IID_IPicture,(LPVOID*)&pPic); if (pPic==NULL) return NULL;
    HBITMAP hPic = NULL;
    pPic->get_Handle((UINT*)&hPic); long nWidth=THUMWIDTH;
    long nHeight=THUMHEIGHT; long mWid,mHei;
    pPic->get_Height(&mHei);
    pPic->get_Width(&mWid);
    HBITMAP hPicRet = (HBITMAP)CopyImage(hPic, IMAGE_BITMAP, nWidth, nHeight ,LR_LOADFROMFILE|LR_CREATEDIBSECTION);    
    HBRUSH hBrushBorder=::CreateSolidBrush(RGB(192, 192, 192));
    HBRUSH hBrushBk=::CreateSolidBrush(RGB(255, 255, 255));
    RECT rcBorder;
    rcBorder.left=rcBorder.top=0;
    rcBorder.right=THUMWIDTH;
    rcBorder.bottom=THUMHEIGHT;
    const float fRatio=(float)THUMHEIGHT/THUMWIDTH;
    int XDest, YDest, nDestWidth, nDestHeight;
    const float fImgRatio=(float)mHei/mWid;
    if(fImgRatio > fRatio)
    {
    nDestWidth=(THUMHEIGHT/fImgRatio);
    XDest=(THUMWIDTH-nDestWidth)/2;
    YDest=0;
    nDestHeight=THUMHEIGHT;
    }
    else
    {
    XDest=0;
    nDestWidth=THUMWIDTH;
    nDestHeight=(THUMWIDTH*fImgRatio);
    YDest=(THUMHEIGHT-nDestHeight)/2;
    }
    CClientDC cdc(this);
    HDC hDC=::CreateCompatibleDC(cdc.m_hDC);
    HBITMAP bm = CreateCompatibleBitmap(cdc.m_hDC, THUMWIDTH, THUMHEIGHT);
    HBITMAP pOldBitmapImage = (HBITMAP)SelectObject(hDC,bm);
    ::FillRect(hDC, &rcBorder, hBrushBk);
    ::FrameRect(hDC, &rcBorder, hBrushBorder);
    HBITMAP hBmReturn= (HBITMAP)::SelectObject(hDC, pOldBitmapImage);
    CDC hdcSrc, hdcDst;
    hdcSrc.CreateCompatibleDC(NULL);
    hdcDst.CreateCompatibleDC(NULL);
    // Load the bitmaps into memory DC
    CBitmap* hbmSrcT = (CBitmap*) hdcSrc.SelectObject(hPicRet);
    CBitmap* hbmDstT = (CBitmap*) hdcDst.SelectObject(hBmReturn);
    hdcDst.BitBlt(XDest,YDest,nDestWidth, nDestHeight, &hdcSrc,-2,0,SRCCOPY);      
    pOldBitmapImage = (HBITMAP)SelectObject(hdcDst.m_hDC,bm);
    DeleteDC(hDC);
    DeleteObject(hBrushBorder);
    DeleteObject(hBrushBk);
    return pOldBitmapImage;
    }
    这是全部的代码,读起来比较费劲,麻烦帮看看是不是必须得传路径,谢谢了
      

  6.   

    放在资源中 因为你的图片是BMP 所以用LoadBitmap 或 LoadImage