我用CFile  读取了图片,放在了内存中,但是怎么把它显示在CStatic中呢?????????????
BOOL bResult;
DWORD dwFileSize,dwByteRead;
dwFileSize=pFile->GetLength();
HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,dwFileSize);
LPVOID pvData=NULL;
if(hGlobal==NULL)
return false;
pvData=GlobalLock(hGlobal);
dwByteRead=pFile->Read(pvData,dwFileSize);
GlobalUnlock(hGlobal);

解决方案 »

  1.   

    根据图片格式咯,还能怎么放?BMP?JPG?or others
    不明白~
      

  2.   

    //如果是载入位图,可以使用 LoadImage:HBITMAP hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(), szFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); 
      

  3.   

    bmp格式的好像可以这样打开
    CDib m_dib; //声明一个Dib对象
    HGLOBAL m_hDIB; //定义指向DIB的句柄变量
    CPalette* m_palDIB; //定义指向逻辑调色板的指针
    CSize m_sizeDoc; //文档大小的变量
    CFile file;
    if (!file.Open(lpszPathName, CFile::modeRead)) // 打开文件
    {
    return FALSE; // 返回FALSE
    }
    DeleteContents();
    m_hDIB=m_dib.LoadFile(file); //调用ReadDIBFile()读取图像
    if(m_hDIB==NULL)
    {
    AfxMessageBox("图像格式不正确!"); // 提示出错
    return FALSE;
    }
    LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hDIB);
    // 判断图像是否过大
    if (m_dib.GetWidth(lpDIB) > INT_MAX ||m_dib.GetHeight(lpDIB) > INT_MAX){
    ::GlobalUnlock((HGLOBAL) m_hDIB);
    ::GlobalFree((HGLOBAL) m_hDIB); // 释放DIB对象
    m_hDIB = NULL; // 设置DIB为空
    AfxMessageBox("初始化失败");
    return;
    }
    // 设置文档大小
    m_sizeDoc = CSize((int)m_dib.GetWidth(lpDIB), (int)m_dib.GetHeight(lpDIB)); 
    ::GlobalUnlock((HGLOBAL) m_hDIB);
    m_palDIB = new CPalette; // 创建新调色板
    if (m_palDIB == NULL) // 判断是否创建成功
    {
    ::GlobalFree((HGLOBAL) m_hDIB); // 失败
    m_hDIB = NULL; // 设置DIB对象为空
    return;
    }
    // 调用ConstructPalette来创建调色板
    if (m_dib.ConstructPalette(m_hDIB, m_palDIB) == NULL)
    {
    delete m_palDIB; // 删除
    m_palDIB = NULL; // 设置为空
    return; // 返回空
    }
    if (m_hDIB == NULL) // 判断读取文件是否成功
    {
    AfxMessageBox("读取图像时出错"); // 提示出错
    return FALSE; // 返回FALSE
    } LPSTR lpDibSection = (LPSTR) ::GlobalLock(hDIB);
    int cxDIB = (int) m_dib.GetWidth(lpDibSection); // 获取DIB宽度
    int cyDIB = (int) m_dib.GetHeight(lpDibSection); // 获取DIB高度
    ::GlobalUnlock(hDIB);
    CRect rcDIB;
    rcDIB.top = rcDIB.left = 0;
    rcDIB.right = cxDIB;
    rcDIB.bottom = cyDIB;
    CRect rcDest= rcDIB;
    CStatic m_DB;
    //m_DB.create(....);
    m_hDIB.DrawD
    CDib m_dib; //声明一个Dib对象
    HGLOBAL m_hDIB; //定义指向DIB的句柄变量
    CPalette* m_palDIB; //定义指向逻辑调色板的指针
    CSize m_sizeDoc; //文档大小的变量
    CFile file;
    if (!file.Open(lpszPathName, CFile::modeRead)) // 打开文件
    {
    return FALSE; // 返回FALSE
    }
    DeleteContents();
    m_hDIB=m_dib.LoadFile(file); //调用ReadDIBFile()读取图像
    if(m_hDIB==NULL)
    {
    AfxMessageBox("图像格式不正确!"); // 提示出错
    return FALSE;
    }
    LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hDIB);
    // 判断图像是否过大
    if (m_dib.GetWidth(lpDIB) > INT_MAX ||m_dib.GetHeight(lpDIB) > INT_MAX){
    ::GlobalUnlock((HGLOBAL) m_hDIB);
    ::GlobalFree((HGLOBAL) m_hDIB); // 释放DIB对象
    m_hDIB = NULL; // 设置DIB为空
    AfxMessageBox("初始化失败");
    return;
    }
    // 设置文档大小
    m_sizeDoc = CSize((int)m_dib.GetWidth(lpDIB), (int)m_dib.GetHeight(lpDIB)); 
    ::GlobalUnlock((HGLOBAL) m_hDIB);
    m_palDIB = new CPalette; // 创建新调色板
    if (m_palDIB == NULL) // 判断是否创建成功
    {
    ::GlobalFree((HGLOBAL) m_hDIB); // 失败
    m_hDIB = NULL; // 设置DIB对象为空
    return;
    }
    // 调用ConstructPalette来创建调色板
    if (m_dib.ConstructPalette(m_hDIB, m_palDIB) == NULL)
    {
    delete m_palDIB; // 删除
    m_palDIB = NULL; // 设置为空
    return; // 返回空
    }
    if (m_hDIB == NULL) // 判断读取文件是否成功
    {
    AfxMessageBox("读取图像时出错"); // 提示出错
    return FALSE; // 返回FALSE
    } LPSTR lpDibSection = (LPSTR) ::GlobalLock(hDIB);
    int cxDIB = (int) m_dib.GetWidth(lpDibSection); // 获取DIB宽度
    int cyDIB = (int) m_dib.GetHeight(lpDibSection); // 获取DIB高度
    ::GlobalUnlock(hDIB);
    CRect rcDIB;
    rcDIB.top = rcDIB.left = 0;
    rcDIB.right = cxDIB;
    rcDIB.bottom = cyDIB;
    CRect rcDest= rcDIB;
    CStatic m_DB;
    //m_DB.create(....);
    m_hDIB.DrawDib(m_DB.GetDC()->m_hDC, &rcDest, m_hDIB , &rcDIB, pDoc->GetDocPal());
    压缩格式的我不知道
      

  4.   

    派生cstatic子类,在paint里用dc绘制bitmap