加载图片到Richedit中,图片是平铺的,不是直接显示

dingshanwei123 2013-08-12 11:54:57
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的,网上说改成这个后显示的图片还是平铺的,怎么修改呢?求救
...全文
55 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingshanwei123 2013-08-12
  • 打赏
  • 举报
回复
没人知道吗?求救

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧