如何能象WORD的文件菜单那样,能导入jpg图片。怎样来实现?

解决方案 »

  1.   

    http://www.codeproject.com/bitmap/pictureshow.asp
      

  2.   

    LPPICTURE gpPicture;// open file
    HANDLE hFile = CreateFile(szFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
    _ASSERTE(INVALID_HANDLE_VALUE != hFile); // get file size
    DWORD dwFileSize = GetFileSize(hFile, NULL);
    _ASSERTE(-1 != dwFileSize); LPVOID pvData = NULL;
    // alloc memory based on file size
    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
    _ASSERTE(NULL != hGlobal); pvData = GlobalLock(hGlobal);
    _ASSERTE(NULL != pvData); DWORD dwBytesRead = 0;
    // read file and store in global memory
    BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL);
    _ASSERTE(FALSE != bRead);
    GlobalUnlock(hGlobal);
    CloseHandle(hFile); LPSTREAM pstm = NULL;
    // create IStream* from global memory
    HRESULT hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm);
    _ASSERTE(SUCCEEDED(hr) && pstm); // Create IPicture from image file
    if (gpPicture)
    gpPicture->Release();
    hr = ::OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture);
    _ASSERTE(SUCCEEDED(hr) && gpPicture);
    pstm->Release(); InvalidateRect(ghWnd, NULL, TRUE);long hmWidth;
    long hmHeight;
    gpPicture->get_Width(&hmWidth);
    gpPicture->get_Height(&hmHeight);
    // convert himetric to pixels
    int nWidth = MulDiv(hmWidth, GetDeviceCaps(hdc, LOGPIXELSX), HIMETRIC_INCH);
    int nHeight = MulDiv(hmHeight, GetDeviceCaps(hdc, LOGPIXELSY), HIMETRIC_INCH);
    RECT rc;
    GetClientRect(hWnd, &rc);
    // display picture using IPicture::Render
    gpPicture->Render(hdc, 0, 0, nWidth, nHeight, 0, hmHeight, hmWidth, -hmHeight, &rc);
      

  3.   

    HRESULT ShowPic(CString lpstrFile, HWND hwnd, int nScrWidth, int nScrHeight)
    {
    HDC hDC_Temp = ::GetDC(hwnd); IPicture *pPic;
    IStream *pStm; BOOL bResult; HANDLE hFile = NULL;
    DWORD dwFileSize, dwByteRead; // 打开硬盘中的图形文件 
    hFile = CreateFile(lpstrFile,
    GENERIC_READ,
    FILE_SHARE_READ,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL); if (hFile != INVALID_HANDLE_VALUE)

    dwFileSize = GetFileSize(hFile, NULL); // 获取文件字节数 

    if (dwFileSize == 0xFFFFFFFF)
    return E_FAIL;

    else

    return E_FAIL;
    }  // 分配全局存储空间 
    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
    LPVOID pvData = NULL; if (hGlobal == NULL)
    return E_FAIL; if ((pvData = GlobalLock(hGlobal)) == NULL) // 锁定分配内存块 
    return E_FAIL; ReadFile(hFile, pvData, dwFileSize, &dwByteRead, NULL); // 把文件读入内存缓冲区 GlobalUnlock(hGlobal); CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); // 装入图形文件 
    bResult=OleLoadPicture(pStm, dwFileSize, TRUE, IID_IPicture, (LPVOID*)&pPic); if(FAILED(bResult))
    return E_FAIL; OLE_XSIZE_HIMETRIC hmWidth; // 图片的真实宽度 
    OLE_YSIZE_HIMETRIC hmHeight; // 图片的真实高度 
    pPic->get_Width(&hmWidth);
    pPic->get_Height(&hmHeight); // 将图形输出到屏幕上(有点像BitBlt)
    bResult = pPic->Render(hDC_Temp,
    0,
    0,
    nScrWidth,
    nScrHeight,
    0,
    hmHeight,
    hmWidth,
    -hmHeight,
    NULL); pPic->Release();
    pStm->Release(); CloseHandle(hFile); // 关闭打开的文件  if (SUCCEEDED(bResult))

    return S_OK;
    }
    else 

    return E_FAIL;

    }