参考:https://blog.csdn.net/thanklife/article/details/80305285

一、添加OnEraseBkgnd函数(或OnDraw、OnPaint函数)

该方法是在指定位置加载位图

BOOL CbitmapDlg::OnEraseBkgnd(CDC* pDC)
{// TODO: 在此添加消息处理程序代码和/或调用默认值CBitmap bitmap;bitmap.LoadBitmap(IDB_BITMAP2); //从资源中加载图片BITMAP bmp;bitmap.GetBitmap(&bmp); //获取图片大小信息CDC dcCompatible;dcCompatible.CreateCompatibleDC(pDC);dcCompatible.SelectObject(bitmap);CRect rect;GetClientRect(&rect);//pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);return TRUE;
}  

对话框OnPaint函数绘制

//CBitmap bmp_bkg;
//bmp_bkg.LoadBitmap(IDB_BITMAP1);  //载入背景图片
void CMyMusicPlayerDlg::OnPaint()
{if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CPaintDC dc(this); // 用于绘制的设备上下文//绘制背景图片BITMAP bmp;bmp_bkg.GetBitmap(&bmp); //获取图片大小信息CDC dcCompatible;dcCompatible.CreateCompatibleDC(&dc);dcCompatible.SelectObject(bmp_bkg);CRect rect;GetClientRect(&rect); //735 472dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);CBrush mybrush;mybrush.CreateSolidBrush(RGB(177,161,148));CRect myrect(0, 390, 735, 472);dc.FillRect(myrect, &mybrush); //底部灰色控制栏CDialogEx::OnPaint();}
}

二、利用控件加载位图

添加一个静态文本控件/按钮,设置BITMAP属性,再SetBitmap

//CBitmap restart;
BOOL CMFC_DrawView::PreCreateWindow(CREATESTRUCT& cs)
{restart.LoadBitmap((LPCTSTR)IDB_BITMAP1)  //从资源中加载图片return CView::PreCreateWindow(cs);
}int CMFC_DrawView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{CButton* pButton=new CButton;pButton->Create(L"restart",WS_CHILD|WS_VISIBLE|BS_BITMAP,CRect(365, 20, 425, 80),this,ID_RESTART_BUTTON);//pButton->ModifyStyle(0,BS_BITMAP); //设置BS_BITMAP属性pButton->SetBitmap((HBITMAP)restart);  //设置控件bmp图片SetTimer(MY_TIMEER, 1000, NULL);if (CView::OnCreate(lpCreateStruct) == -1)return -1;return 0;
}

三、补充-几种加载位图资源的方法

1、加载图标

LoadIcon函数要加载位图,要使用CWinApp的成员函数LoadIcon才行。当你查看MSDN的时候,会发现,LoadIcon可以是CWinApp的Class member函数,也可以是windows api函数。说实话,windows api函数我不知道怎么使用,呵呵,大家可以自己去验证下能不能加载。这里既然说了是CWinApp函数,我们的MFC程序都有一个全局的变量,theApp。这个变量就是CWinApp类的对象,只需要使用theApp.LoadIcon()就可以了。当然,也可以使用AfxGetApp()获得CWinApp指针,比如AfxGetApp()->LoadIcon();

函数原型:
CWinApp::LoadIcon
HICON LoadIcon( LPCTSTR lpszResourceName ) const;   //这一种是从硬盘上加载ICON,传入的参数是文件路径,比如“F:\\123.ico”;

HICON LoadIcon( UINT nIDResource ) const;                        //这种是从工程资源中加载ICON,传入参数是资源ID,比如IDC_ICON1.

简单举例:

(1)从硬盘加载

HICON hIcon = NULL;

hIcon  = theApp.LoadIcon("F:\\123.ico");

或者

hIcon  = AfxGetApp()->LoadIcon("F:\\123.ico");

(2)从资源加载

HICON hIcon = NULL;

hIcon = AfxGetApp()->LoadIcon(IDC_ICON1);

是不是很简单,这样就完成了图标的加载了。

2、位图的加载(从资源中加载)

位图的加载也很简单,我们使用CBItmap的成员函数LoadBitMap();

函数声明:
CBitmap::LoadBitmap
BOOL LoadBitmap( LPCTSTR lpszResourceName );     //从硬盘加载位图

BOOL LoadBitmap( UINT nIDResource );                           //从资源加载位图

举例:

CBitmap bitmap;

bitmap.LoadBitmap("F:\\a.bmp");

或者

bitmap.LoadBitmap(IDB_BITMA1);

3、通用加载图片方式(从文件中加载)

这种方式,使用LoadImage来加载,这种方式可以去试试。

举例:

HBITMP hBitmap=(HBITMAP)::LoadImage(NULL,pszFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);//

pszFileName

是文件路径。 LR_LOADFROMFILE表示从文件中加载。
或者

HICON hIcon = (HICON)::LoadImage(NULL,pszFileName,IMAGE_ICON,0,0,LP_LOADFROMFILE);

MFC绘制bmp图片背景相关推荐

  1. MFC 绘制半透明图片

    用MFC绘制半透明图片其实根本没有必要,因为有美工:哈哈,当然了我们自己练手的时候没有美工,自己也不会ps,只能用代码了 void  类名::DrawClearImage(Graphics *pGra ...

  2. 在PS6中将bmp图片背景变成透明,增加alpha通道,可在unity中使用

    1.将bmp图片用ps打开,设置为rgb模型,用魔术工具选中图案,delete删除背景. 2.新增alpha通道,黑色部分代表背景透明显示部分,白色对应图案部分. 3.保持时选择32位的rgba格式.

  3. bmp图片灰度化和二值化

    C语言去除bmp图片的背景 一.前言 二.灰度化 头文件 C文件 三.二值化 一.前言 图像处理中,大部分的处理方法都需要事先把彩色图转换成灰度图才能进行相关的计算.识别. 彩色图转换灰度图的原理如下 ...

  4. emwin从外部flash中读取bmp图片显示

    在emwin中有提供了一个从外部读取图片数据进行显示的函数,如下: 而且提供了官方例程,不过官方历程中从外部读取是从外部文件系统中进行读取的bmp图片进行显示,官方例程如下 /* ********** ...

  5. ai 临摹图片换背景_AI临摹绘制插画图片

    AI临摹绘制插画图片 1.打开AI,新建一个文档.开始绘制前,首先确定要画对象的透视参考线.观察原图就会找到基于立体的三维轴线(在这里,我们用X,Y,Z轴来表达). 2.先绘制出外边框,边框线的粗细为 ...

  6. Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解...

    2019独角兽企业重金招聘Python工程师标准>>> 今天继续给大家分享下View的相关知识,重点有一下两点:   1.View的几种不同状态属性            2.如何根 ...

  7. MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片

    最近有同学问我如何实现MFC基于对话框在图片控件中加载图片?其实使用MFC显示图片的方法各种各样,但是还是有些同学不知道怎样显示.以前在<数字图像处理>课程中完成的软件都是基于单文档的程序 ...

  8. MFC:给对话框添加图片背景

    首先需要准备好背景图片,需要bmp格式的 然后,导入bmp到工程,修改位图ID(右键位图->属性),最好预先把bmp图片存到工程目录下 之后,在对话框类添加消息OnEraseBkgnd(CDC* ...

  9. C语言用句柄显示bmp图片,VC编程之VC MFC界面上显示BMP图片

    本文主要向大家介绍了VC编程之VC MFC界面上显示BMP图片,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助. 1.通过点击界面浏览按钮选择BMP图像文件. 点击浏览按钮打开文件对话框选择 ...

  10. MFC显示JPG,bmp图片

    主要代码如下: //************************************ // 方法说明:    显示JPG和GIF.BMP图片 // 参数说明:    CDC * pDC     ...

最新文章

  1. 应用函数修饰符@来改变AI Studio的输出信息
  2. shell 使用数组作为函数参数的方法
  3. 想看Vue文档,cn放错位置,误入xx网站...
  4. Oracle 用子查询创建表
  5. Question for recommendation system, which is a baseline
  6. 小米官宣:小米11取消附送充电器!
  7. opencv画图_c++
  8. 利用 Cache_Lite代替codeigniter中的cache功能
  9. java 任务_Java-定时任务
  10. python tkinter grid布局
  11. 计算机游戏攻略67,保卫萝卜2 67攻略水晶萝卜详解
  12. 【java】窗口控件及字符串和异常的综合应用
  13. 黑客都是使用哪些方法入侵我们电脑的
  14. 源码装置vsftpd
  15. java自行车租凭系统项目包_基于java的校园自行车租用管理系统的设计及实现终极版.pdf...
  16. 教你win7免费升级到win10系统教程
  17. Blender-UV Mapping
  18. apk部分手机安装失败_安卓手机安装软件失败的4种常见原因和解决办法
  19. 【基础】Premultiplied Alpha Blending/Alpha预乘/透明图片黑边
  20. vs2013怎么清理解决方案_vs2010/2013项目所在文件夹越来越大如何解决?

热门文章

  1. springboot网络安全平台设计毕业设计源码042335
  2. 3dmax如何快速查找丢失贴图,并根据贴图快速找到对应物体
  3. opencv实现银行卡卡号识别
  4. 这个图像工具箱,让我找得好苦
  5. 浅学DSP原理及应用
  6. H5唤起 uniapp 版的app 端
  7. ildasm ilasm
  8. EM算法系列--原理
  9. html5制作表单网页
  10. 第十届泰迪杯数据挖掘B题电力系统负荷预测分析