在VC中不使用控件,能否直接显示JPG、GIF图象?

解决方案 »

  1.   

    可以用动态库。当然,这些动态库是将jpg转换成bmp显示。好像还有一个接口IPicture什么的可以。
      

  2.   

    http://www.codeproject.com/bitmap/load_jpeg__gif_resource.asp
    codeproject上很多的
      

  3.   

    有一个浏览器ActiveX控件,可以显示jpg和gif等文件
      

  4.   

    使用IPicture接口,我这里有个函数得到HBitmap句柄,你得到句柄后bitblt到DC就行了
    HBITMAP CPicture::LoadImageFromID(UINT nIDRes)//nIDSRes为资源ID
    {
    try
    {
    HMODULE hInst=GetModuleHandle("Test.dll");
    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 memory

    LPSTREAM 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;
    }
      

  5.   

    有可能不用那么麻烦,如果你用的是vs.net的话,VC++.net中带的MFC库中的CImage就可以了,先Load一下,然后在OnPaint中StrechBlt一下就行了