MFC程序里如何插入图片
本人新手想学做MFC的小游戏问下怎样能在MFC的程序上放自己的图片或者背景好像导入到工程里的图片都不是图片格式了这是怎么回事尽量将详细点比如在哪个类里面添加什么代码...
本人新手 想学做MFC的小游戏 问下 怎样能在MFC的程序上放自己的图片或者背景 好像导入到工程里的图片都不是图片格式了 这是怎么回事 尽量将详细点 比如在哪个类里面添加什么代码
展开
3个回答
展开全部
这个说起来有点麻烦,因为不知道你具体要实现的功能,如果只是想让你的程序背景贴上一张图片的话.楼下那位已经给出你办法了,他的这个是将程序的背景擦除时直接不擦除的这个消息响应函数里把擦除背景的操作改为贴图操作.
导入外部图片,就点项目菜单下的添加资源,然后点导入,右下角那里选择文件类型,找到你要导入的bmp图片,点确定.图片就导入了,然后在资源管理器下面的bitmap项目组里可以找到该图片.和对应的ID号.
不过我还是帮你解释一下楼下的方法,省的你只知其然不知所以然.
//该函数用于在程序的背景须要擦除时windows标准消息ON_ERASEBKGND调用
BOOL CXXView::OnEraseBkgnd(CDC* pDC)
{
CBitmap bitmap;//这里先建立一个位图对象
bitmap.LoadBitmap(IDB_BKGROUND); //这里使用根本图像在资源中的ID加载图像到对象中
BITMAP bmp;//这里建立一个位图结构体主要是用来取位图的长宽值的
bitmap.GetBitmap(&bmp);//这里就是将位图对象中的图像资料放进这个结构体中
CDC dcCom;//建立标准DC用于绘制位图
dcCom.CreateCompatibleDC(pDC);//将建立的dc与当前程序提供的dc兼容,这里提供的dc是在ON_PAINT消息响应的OnPaint函数里创建的CPaintdc,至于这个Cpaintdc会作些什么自己查一下吧,不然会写很长
dcCom.SelectObject(&bitmap);//这里将图片放进这个兼容dc里,兼容dc在创建的时候大小是1X1像素的模块,将图像对象选进DC后,DC模块大小变为该图片大小.
CRect rect;//创建一个矩形对象
GetClientRect(&rect);//得到当前窗口的矩形大小,放进矩形对象中
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCom,0,0, bmp.bmWidth,bmp.bmHeight,SRCCOPY);//使用DC的成员函数stretchblt将兼容DC拷备到当前dc中.
return true;
}
其实办法有很多种,依情况不同而使用也不同.比如dc.BitBlt()也是可以起到和StretchBlt差不多的作用,但是他不会将图片压缩和拉伸.
另外在ON_WM_CTLCOLOR()消息响应的OnCtlColor函数中也可以实现背景贴图的功能,这个办法比较简单相对来说,你只要为程序窗口类添加WM_CTLCOLOR()消息,然后在相应自动生成的OnCtlColor函数里,建立一个CBrush画刷,再建立一个CBitmap对象,将图像选进Cbitmap完了,将画刷初始化为这个Cbtimap,最后将这个画刷在OnCtlColor函数中返回.就可以了
导入外部图片,就点项目菜单下的添加资源,然后点导入,右下角那里选择文件类型,找到你要导入的bmp图片,点确定.图片就导入了,然后在资源管理器下面的bitmap项目组里可以找到该图片.和对应的ID号.
不过我还是帮你解释一下楼下的方法,省的你只知其然不知所以然.
//该函数用于在程序的背景须要擦除时windows标准消息ON_ERASEBKGND调用
BOOL CXXView::OnEraseBkgnd(CDC* pDC)
{
CBitmap bitmap;//这里先建立一个位图对象
bitmap.LoadBitmap(IDB_BKGROUND); //这里使用根本图像在资源中的ID加载图像到对象中
BITMAP bmp;//这里建立一个位图结构体主要是用来取位图的长宽值的
bitmap.GetBitmap(&bmp);//这里就是将位图对象中的图像资料放进这个结构体中
CDC dcCom;//建立标准DC用于绘制位图
dcCom.CreateCompatibleDC(pDC);//将建立的dc与当前程序提供的dc兼容,这里提供的dc是在ON_PAINT消息响应的OnPaint函数里创建的CPaintdc,至于这个Cpaintdc会作些什么自己查一下吧,不然会写很长
dcCom.SelectObject(&bitmap);//这里将图片放进这个兼容dc里,兼容dc在创建的时候大小是1X1像素的模块,将图像对象选进DC后,DC模块大小变为该图片大小.
CRect rect;//创建一个矩形对象
GetClientRect(&rect);//得到当前窗口的矩形大小,放进矩形对象中
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCom,0,0, bmp.bmWidth,bmp.bmHeight,SRCCOPY);//使用DC的成员函数stretchblt将兼容DC拷备到当前dc中.
return true;
}
其实办法有很多种,依情况不同而使用也不同.比如dc.BitBlt()也是可以起到和StretchBlt差不多的作用,但是他不会将图片压缩和拉伸.
另外在ON_WM_CTLCOLOR()消息响应的OnCtlColor函数中也可以实现背景贴图的功能,这个办法比较简单相对来说,你只要为程序窗口类添加WM_CTLCOLOR()消息,然后在相应自动生成的OnCtlColor函数里,建立一个CBrush画刷,再建立一个CBitmap对象,将图像选进Cbitmap完了,将画刷初始化为这个Cbtimap,最后将这个画刷在OnCtlColor函数中返回.就可以了
展开全部
在对话框类CXXDlg或者单文档CXXView类中添加WM_ERASEBKGND消息处理,然后添加代码如下:
BOOL CXXView::OnEraseBkgnd(CDC* pDC)
{
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BKGROUND); //IDB_BKGROUND为导入的BTM位图资源ID
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC dcCom;
dcCom.CreateCompatibleDC(pDC);
dcCom.SelectObject(&bitmap);
CRect rect;
GetClientRect(&rect);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCom,0,0, bmp.bmWidth,bmp.bmHeight,SRCCOPY);
return true;
}
BOOL CXXView::OnEraseBkgnd(CDC* pDC)
{
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BKGROUND); //IDB_BKGROUND为导入的BTM位图资源ID
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC dcCom;
dcCom.CreateCompatibleDC(pDC);
dcCom.SelectObject(&bitmap);
CRect rect;
GetClientRect(&rect);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCom,0,0, bmp.bmWidth,bmp.bmHeight,SRCCOPY);
return true;
}
追问
怎样导入位图资源啊 我导入的时候都是生成一个IDR开头的文件 而且打开来全是数字
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果仅仅是导入图片做背景,很简单。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询