MFC中如何载入bmp和jpeg格式的图片,并作为文件背景

MFC中如何载入bmp和jpeg格式的图片,并作为文件背景?要求有具体操作过程,不能只是代码... MFC中如何载入bmp和jpeg格式的图片,并作为文件背景?要求有具体操作过程,不能只是代码 展开
 我来答
水晶扇
2012-12-10 · TA获得超过1536个赞
知道大有可为答主
回答量:837
采纳率:100%
帮助的人:1076万
展开全部

步骤一:导入bmp文件:

 

第二步:设置为背景:

① 添加OnCtlColor消息响应函数:

 

② 添加响应代码:

HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 

{

 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

 

 // TODO: Change any attributes of the DC here

 static CBrush gBr;

 static bool isInited = false;

 if(!isInited)

 {

  CBitmap bitmap;

  bitmap.LoadBitmap(IDB_BITMAP1);

  gBr.CreatePatternBrush(&bitmap);

  COLORREF clearColor = -1;

  bitmap.DeleteObject();

  isInited = true;

 }

 

 if(pWnd==this)

 {

  pDC->SetBkMode(TRANSPARENT);

  return gBr; //主窗口背景使用这个背景刷

 }

 else

 {

  pDC->SetBkMode(TRANSPARENT);

  return   (HBRUSH)::GetStockObject(NULL_BRUSH); //其他控件使用透明背景

 }

 // TODO: Return a different brush if the default is not desired

 return hbr;

}

 

 

③效果图:

 

 静态文本框、单行多行输入文本框、列表框、ListCtrl等都可以共享主窗口的背景,但是按钮需要另外设置才可以。

AiPPT
2024-09-04 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲、导入文档内容”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表... 点击进入详情页
本回答由AiPPT提供
laom75
高粉答主

推荐于2016-08-25 · 关注我不会让你失望
知道大有可为答主
回答量:4.6万
采纳率:84%
帮助的人:4783万
展开全部
通过资源加载BMP位图的方法: CDC m_MemDc;//定义一个DC
CBitmap m_BkBmp;//定义个位图对象
BITMAP m_BmpInfo;//定义一个位图信息结构体
CDC *pDc = GetDC();//定义一个DC指针,并指向屏幕DC
/*首先在资源里添加位图,此行函数用于将位图数据加载到类对象中*/
m_BkBmp.LoadBitmap(IDB_TEST1/*此处为刚刚添加进来的位图资源ID*/);
m_BkBmp.GetBitmap(&m_BmpInfo);//获取位图高宽等信息,保存在位图结构体中
m_MemDc.CreateCompatibleDC(pDc);//创建一个兼容屏幕DC的内存DC:m_MemDc。
m_MemDc.SelectObject(&m_BkBmp);//将该位图选择到刚创建的内存DC中。

/*将内存DC里的东西贴到屏幕DC上去*/
pDc->BitBlt(0,0,m_BmpInfo.bmWidth,m_BmpInfo.bmHeight,&m_MemDc,0,0,SRCCOPY);

//这个贴图只贴一次,当你最小化后再还原,刚才的贴图就没了。 以下是通过文件加载BMP位图的方法 CDC m_bgDC;//定义一个DC
CBitmap m_bgBmp;//定义个位图对象
BITMAP m_bgBmpInfo;//定义一个位图信息结构体
CRect m_CliRect;//定义一个矩形对象,用来保存窗口客户区大小
CDC *pDc = GetDC();//定义一个DC指针,并指向屏幕DC
GetClientRect(&m_CliRect);//获取客户去大小,并保存到m_CliRect对象中
/*下面这行为读取位图文件,可以是相对路径,也可以是绝对路径,
如果是相对路径,调试时指相对于工程所在目录,直接执行EXE时,该位图就是相对于该EXE所在目录
*/
HBITMAP h_bgBmp = (HBITMAP)::LoadImage(NULL,"位图文件名.bmp",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
if (h_bgBmp == NULL)
{
MessageBox("加载位图失败");
return;
}
m_bgBmp.Attach(h_bgBmp);//将读取到的位图数据保存到位图对象中
m_bgBmp.GetBitmap(&m_bgBmpInfo);//获取该位图的大小
m_bgDC.CreateCompatibleDC(pDc);//创建一个兼容于屏幕DC的内存DC
m_bgDC.SelectObject(&m_bgBmp);//将该位图选入到刚刚创建的内存DC中。
/*下行函数为将内存DC中的内容贴到屏幕DC中,这里与上面不同的是,先择拉伸贴图,比如你的位图非常小,
而屏幕很大,用上面哪种bitblt函数只是将位图贴在屏幕的左上角,如果用以下函数,会将位图拉伸
铺满整个窗口*/
pDc->StretchBlt(0,0,m_CliRect.Width(),m_CliRect.Height(),&m_bgDC,0,0,m_bgBmpInfo.bmWidth,m_bgBmpInfo.bmHeight,SRCCOPY);

//如果想把该位图作为背景一直显示,
//针对MFC写的基于对话框的程序,
//那么只要在对话框的OnPaint();这个函数中执行StretchBlt或者bitblt
//在OnInitDialog();这个函数中做以上的那些初始化,将变量作为对话框类的成员变量;
//如此这般就可以在窗口上一直显示你选择的图片了。 //如果是基于文档的程序,方法类似, 总之思路就是: //1 在窗口类中定义以上必须的变量(对象)
//2 在窗口的初始化函数中 初始化以上这些变量(对象)
//3 在窗口的刷新响应函数中将选择的位图贴图到窗口上 至于加载JPG的,貌似就需要专门的组建了,个人认为jpg那个可以理解为压缩了的位图。想要得到JPG图片中各个点的RGB信息比较麻烦点。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
whoami2099
2012-12-10 · TA获得超过175个赞
知道小有建树答主
回答量:463
采纳率:100%
帮助的人:166万
展开全部
到网上搜索CPicture类,使用这个类加载图片很简单。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式