MFC怎么能把桌面上的一张图片给显示在界面上,求帮忙,最好能写一下代码。还有图片控件怎么用呀?

2024-12-29 20:52:21
推荐回答(3个)
回答1:

位图的使用步骤如下:
(1)导入位图
把位图文件作为资源导入到应用程序
选择“插入|资源”命令
注意其ID,如IDB_BITMAP1
(2)装载位图
把位图资源装载到CBitmap对象
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
(3)读取位图信息
BITMAP bm;
bmp.GetBitmap(&bm);
int w=bm.bmWidth;
int h=bm.bmHeight;
(4)构造内存画板,并将位图装入内存画板
CDC memDC;
memDC.CreateCompatibleDC(NULL);
memDC.SelectObject(&bmp);
(5)将位图从内存画板复制到屏幕画板上
pDC->BitBlt(0,0,w,h,&memDC,0,0,SRCCOPY);
①BOOL CDC::BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC,
int xSrc, int ySrc, DWORD dwRop );
(x,y):位图显示区域左上角的坐标
nWidth和nHeight:显示区域的宽度和高度
pSrcDC:指向内存设备环境
(xSrc, ySrc)为原图欲显示区域左上角的坐标
dwRop:复制方式,常用值为SRCCOPY
② BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC,
int xSrc, int ySrc, int nSrcWidth, int nSrcHeight,
DWORD dwRop );
nSrcWidt、nSrcHeight:欲显示的原图的区域大小
与BitBlt的区别:可以缩放
------------------------------------------------------------------------------
示例代码如下,在OnDraw函数里面添加:
CBitmap cbm;
cbm.LoadBitmap(bitmapID);
BITMAP bm;
cbm.GetBitmap(&bm);
int w = bm.bmWidth;
int h = bm.bmHeight;
CRect rect;
GetClientRect(&rect);
int x = (rect.right-rect.left)/2-w/2;
int y = (rect.bottom-rect.top)/2-h/2;
CDC memDC;
memDC.CreateCompatibleDC(NULL);
memDC.SelectObject(&cbm);
pDC->BitBlt(x,y,w,h,&memDC,0,0,SRCCOPY);
cbm.DeleteObject();
memDC.DeleteDC();
----------------------------------------------------------------------
如欲显示其他格式的图片,可以用到CImage类,CImage类是ATL和MFC共用的一个类,其头文件为atlimage.h,主要用于图片文件的打开,显示与保存。这里需要注意的是,在VS2010和VS2012的MFC编程中,不需要将头文件包含进来。
显示图片:
CImage image;
image.Load(L"D:\\用户目录\\Pictures\\example.jpg");
image.Draw(GetDC()->m_hDC,CRect(0,0,320,240));
CImage类支持以Load方法读取本地磁盘上的文件,并用Draw方法来显示图片。CIamge类的成员函数中还有很多可以实现显示图片。例如BitBlt办法。如以下代码:
image.BitBlt(GetDC()->m_hDC,0,0,320,240,0,0,SRCCOPY);
Bitblt方法同CDC类的Bitblt函数一样,是一比一地复制图像并显示在屏幕上,支持对源图像取反,也就是反色显示。这样功能通过BitBlt的最后一个参数来实现,比如参数为NOTSRCCOPY就是反色显示。
MaskBlt可以将图片与目的图片进行特殊的光栅操作并进行掩码处理。
PlgBlt函数可以将图片拉伸成平行四边形进行显示。
StretchBlt函数可以将图片进行拉伸显示
参看百度百科:http://baike.baidu.com/view/5725174.htm

回答2:

LoadBitmap是加载位图的(bmp格式),这个应该要用image,显示在OnDraw里重绘显示就行了。

回答3:

我能直接发例程给你,要的话留邮箱