HBITMAP CdriverDlg::LoadPicture(LPCSTR 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);    
    
    
    HBRUSH hBrushBorder=::CreateSolidBrush(RGB(192, 192, 192));
    HBRUSH hBrushBk=::CreateSolidBrush(RGB(255, 255, 255));
    
    
    RECT rcBorder;
    rcBorder.left=rcBorder.top=0;
    rcBorder.right=THUMWIDTH;
    rcBorder.bottom=THUMHEIGHT;
    
    const float fRatio=(float)THUMHEIGHT/THUMWIDTH;
    
    int XDest, YDest, nDestWidth, nDestHeight;
    
    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);
    ::FillRect(hDC, &rcBorder, hBrushBk);
    ::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);
    
    hdcDst.StretchBlt(XDest,YDest,nDestWidth, nDestHeight, &hdcSrc,0,0,200,200,SRCCOPY);    
    pOldBitmapImage = (HBITMAP)SelectObject(hdcDst.m_hDC,bm);
    
    DeleteDC(hDC);
    DeleteObject(hBrushBorder);
    DeleteObject(hBrushBk);
    
    return pOldBitmapImage;
}
void CdriverDlg::OnPaint()
{
 CPaintDC dc(GetDlgItem(IDC_EDIT2)); //用此句,得到picture控件的DC,图像将被绘制在控件上  
 //   CDC dc;
 //   dc.m_hDC=::GetDC(NULL);   //若用此两句,得到的是屏幕的DC,图片将被绘制在屏幕上///////////////////////////////////////////////////////
 
 CRect rcclient;
 GetDlgItem(IDC_EDIT2)->GetClientRect(&rcclient);
 
 CDC memdc;
 memdc.CreateCompatibleDC(&dc);  
 
 CBitmap bitmap;
 bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height());
 memdc.SelectObject( &bitmap );
 
 CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0); CDC maskdc;
 maskdc.CreateCompatibleDC(&dc);
 CBitmap maskbitmap;
 maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL);
 maskdc.SelectObject( &maskbitmap );
 maskdc.StretchBlt( 0,0, rcclient.Width(), rcclient.Height(), &memdc, 0,0,
  rcclient.left, rcclient.top, SRCCOPY);
 
 CBrush brush;
 brush.CreatePatternBrush(&m_bmp);
 dc.FillRect(rcclient, &brush);  
 dc.StretchBlt(0, 0, rcclient.Width(), rcclient.Height(), &memdc, 0,0,
  rcclient.left, rcclient.top,SRCPAINT);
 brush.DeleteObject();
}BOOL CdriverDlg::OnInitDialog()
{ if( m_bmp.m_hObject != NULL )//判断
  m_bmp.DeleteObject();
 /////////载入图片 
 HBITMAP hbmp=LoadPicture( "c:\\1.bmp");m_bmp.Attach( hbmp );}
上面标红的一开始是BitBlt的,网上说改成这个后显示的图片还是平铺的,怎么修改呢?求救