您的位置:首页 > 其它

在图片控件中应用win32显示图片总结

2010-01-11 17:24 363 查看
先贴出来在mfc环境下实现的代码:

void CShowBmpInDlgDlg::ShowBmpInStaic()

{

CBitmap hbmp;

HBITMAP
hbitmap;

//将pStatic指向要显示的地方

CStatic *pStaic;

pStaic=(CStatic*)GetDlgItem(IDC_IMAGE);

//装载资源 MM.bmp是我的一个文件名,用你的替换

hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),"MM.bmp",

IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);

hbmp.Attach(hbitmap);

//获取图片格式

BITMAP bm;

hbmp.GetBitmap(&bm);

CDC dcMem;

dcMem.CreateCompatibleDC(GetDC());

CBitmap
*poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp);

CRect lRect;

pStaic->GetClientRect(&lRect);

//显示位图

pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top
,lRect.Width(),lRect.Heigh

t(),

&dcMem,0
,0,bm.bmWidth,bm.bmHeight,SRCCOPY);

dcMem.SelectObject(&poldBitmap);

}

在mfc和win32环境下显示图片的代码:

void ShowBmpInStaic(HWND hdlg)

{

CBitmap hbmp;

HBITMAP hbitmap;

CStatic *pStaic=NULL;

BITMAP bm;

CRect lRect;

CDC*
pSrcDC;

CDC dcMem;

CBitmap *poldBitmap;

HWND
hnd=::GetDlgItem(hDlg2,IDC_PIC1);

//CWnd* p=NULL;

pStaic=(CStatic*)hnd;

hbitmap=(HBITMAP)LoadImage(NULL,"2.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);

//pStaic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);

hbmp.Attach(hbitmap);

//pStaic->SetBitmap(hbitmap);

//获取图片格式

hbmp.GetBitmap(&bm); //得到位图信息

dcMem.CreateCompatibleDC(CDC::FromHandle(::GetDC(hnd)));//创建内存设备环境

//
ReleaseDC(hdlg,GetDC(hnd));

poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp);

pSrcDC=&dcMem;

//::GetClientRect(hnd,&lRect);

::GetClientRect(hnd,&lRect);

//lRect.NormalizeRect();

::StretchBlt(::GetDC(hnd),lRect.left ,lRect.top
,lRect.Width(),lRect.Height(), pSrcDC->GetSafeHdc(),0
,0,bm.bmWidth,bm.bmHeight,SRCCOPY);

//显示位图

dcMem.SelectObject(&poldBitmap);

ReleaseDC(hnd,GetDC(hnd));

}

在mfc和win32中有同名函数,如果不仔细调用了mfc32的函数,那么一些隐含的参数传递不过去,导致了很多异常。再就是通过这次对对话框函数编写,让我意识到,消息的循环调用,显示的多次调用。看似顺序执行的代码,实际上在执行过程中,多次循环往复。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: