我将一个JPG文件如MyImage.JPG通过Import导入到了资源中,不知道如何加载到内存中,我会从磁盘文件加载到内存并显示(用IPicture类中的OleLoadPcture),就不知道如何从资源加载,即不了解资源加载的一些函数,请高手们指点!!

解决方案 »

  1.   

    LPTSTR MAKEINTRESOURCE( WORD wInteger; );
    参数是ID号,返回的是字符串类型。
      

  2.   

    CRect rect;
    CDC* pDC;
    IPicture *pPic; 
    IStream *pStm; CFileStatus fstatus; 
    CFile file; 
    LONG cb; if (file.Open(imgName,CFile::modeRead)&&file.GetStatus(imgName,fstatus)&& 
    ((cb = fstatus.m_size) != -1)) 

    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb); 
    LPVOID pvData = NULL; 
    if (hGlobal != NULL) 

    if ((pvData = GlobalLock(hGlobal)) != NULL) 
    {
    file.ReadHuge(pvData, cb); 
    GlobalUnlock(hGlobal); 
    CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); 

    if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic))) 

    OLE_XSIZE_HIMETRIC hmWidth; 
    OLE_YSIZE_HIMETRIC hmHeight; 

    pPic->get_Width(&hmWidth); 
    pPic->get_Height(&hmHeight); 

    // double fX,fY; 
    // fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0); 
    // fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0); 
    // if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL))) 
    double fX,fY; 
    fX = 640;
    fY = 480;


    pDC = GetDlgItem(IDC_STATIC_PIC_BIG)->GetDC();

    // GetDlgItem(IDC_STATIC_PIC_BIG)->EnableWindow(true);
    // GetDlgItem(IDC_STATIC_PIC)->EnableWindow(false);
    GetDlgItem(IDC_STATIC_PIC_BIG)->GetWindowRect(rect);
    if(FAILED(pPic->Render(*pDC,0,0,(DWORD)(rect.right - rect.left),(DWORD)(rect.bottom - rect.top),0,hmHeight,hmWidth,-hmHeight,NULL))) 
    {
    // AfxMessageBox("Failed To Render The picture!"); 
    pPic->Release();
    file.Close();
    ReleaseDC(pDC);
    return false;
    }
    else
    {
    pPic->Release();
    file.Close();
    ReleaseDC(pDC);
    return true;
    }



    else 
    {
    // AfxMessageBox("Error Loading Picture From Stream!"); 
    file.Close();
    return false;
    }



    else
    {// AfxMessageBox("Can't Open Image File!");
    return false;
    }
      

  3.   

    if (hRsrc = FindResource(hInstance, ID_JPG, "JPG"))
       {
          hTemp = LoadResource(hInstance, hRsrc);
          dwSize = SizeofResource(hInstance, hRsrc);
          lpRes = LockResource(hTemp);    hGlobal = GlobalAlloc(GHND, dwSize);
        lpNew = GlobalLock(hGlobal);
    }
      

  4.   

    ZT FAQ这是显示在PICTURE的
    my example:
    HBITMAP CPicture::LoadImageFromID(UINT nIDRes)
    {
    try
    {
    HMODULE hInst=GetModuleHandle(NULL);
    LPCTSTR lpRes = MAKEINTRESOURCE(nIDRes);
    HRSRC hRsrc = ::FindResource(hInst, lpRes, "JPG");
    if (NULL == hRsrc)
    return FALSE;HGLOBAL hGlobal = LoadResource(hInst, hRsrc);
    if (NULL == hGlobal)
    return FALSE;DWORD dwSize = SizeofResource(hInst, hRsrc);
    LPVOID lpData = LockResource(hGlobal);
    if (NULL == lpData)
    return FALSE;// alloc memory based on file size
    HGLOBAL hJPG = ::GlobalAlloc(GMEM_MOVEABLE, dwSize);
    LPVOID lpJGP = ::GlobalLock(hJPG);
    memcpy(lpJGP, lpData, dwSize);
    ::GlobalUnlock(hJPG);//LPVOID pvData = GlobalLock(hGlobal);
    //_ASSERTE(NULL != pvData);// read file and store in global memoryLPSTREAM pstm = NULL;
    // create IStream* from global memory
    HRESULT hr = CreateStreamOnHGlobal(hJPG, TRUE, &pstm);
    _ASSERTE(SUCCEEDED(hr) && pstm);// Create IPicture from image file
    LPPICTURE gpPicture;hr = ::OleLoadPicture(pstm, dwSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture);
    _ASSERTE(SUCCEEDED(hr) && gpPicture);
    pstm->Release();OLE_HANDLE m_picHandle;gpPicture->get_Handle(&m_picHandle);
    return (HBITMAP)m_picHandle;
    }
    catch (...)
    {}
    return NULL;
    }
    //call 
    CPicture pic; 
    HBITMAP hbmp=pic.LoadImageFromID(IDR_TODAY);//IDR_TODAY is jpg id
    (HBITMAP)::SendMessage(::GetDlgItem(this->m_hWnd,IDC_TODAY), STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp);
    我有现成的代码,http://www.cdcz.mpc.cn/data/static.rar,下载后将代码放到工程就可以了,使用的时候用映射一个控制变量,使用CStaticPicEx代替CStatic类,然后使用成员函数SetShowFileName(CString strFileName),其中strFileName为JPEG文件名。