很急,在线等待,就只需要最基本的文件打开,保存。VC程序。跪求!!

解决方案 »

  1.   

    如果你不修改,保存似乎没有意义打开显示的话就简单了GDI实现:HBITMAP LoadPicture(CString 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_COPYDELETEORG); // Create Brushes for Border and BackGround
    HBRUSH hBrushBorder=::CreateSolidBrush(RGB(192, 192, 192));
    HBRUSH hBrushBk=::CreateSolidBrush(RGB(255, 255, 255)); // Border Size
    RECT rcBorder;
    rcBorder.left=rcBorder.top=0;
    rcBorder.right=THUMWIDTH;
    rcBorder.bottom=THUMHEIGHT; const float fRatio=(float)THUMHEIGHT/THUMWIDTH; int XDest, YDest, nDestWidth, nDestHeight;
    // Calculate Rect to fit to canvas
    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);
    // Draw Background
    ::FillRect(hDC, &rcBorder, hBrushBk); // Draw Border
    ::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);   // This call sets up the mask bitmap.
       hdcDst.BitBlt(XDest,YDest,nDestWidth, nDestHeight, &hdcSrc,0,0,SRCCOPY);
       //hdcDst.StretchBlt(XDest,YDest,nDestWidth, nDestHeight, &hdcSrc,0,0,48,48,SRCCOPY); pOldBitmapImage = (HBITMAP)SelectObject(hdcDst.m_hDC,bm); // Release used DC and Object
    DeleteDC(hDC);
    DeleteObject(hBrushBorder);
    DeleteObject(hBrushBk);    return pOldBitmapImage;}通过CBitmap的Attach可以把HBITMAP选入CBitmap,然后选入DC,再Bitblt就完事儿如果用GDI+,更方便Graphics g(pDC->m_hDC);
    Bitmap bmp(L"c:\\xx.bmp");
    g.DrawImage(&bmp, 0, 0);
      

  2.   

    我也不需要修改,直接保存一个BMP文件就可以了还有,本人很菜的,能不能哪个达人把打开BMP文件的实现,写具体点?