给对话框添加背景图片方法很多,在此贴出两种很常见的方法。一种是通过读取位图资源显示位图(BitMap)

step:

1、创建内存设备上下文;

2、选择位图,将其装入内存设备上下文;

3、使用BitBlt()函数从内存设备上下文中把位图拷贝到输出设备上下文中显示;

PS:此处要特别说明一下BitBlt()函数,很重要的一个函数,必须记住

 BOOL BitBlt(int x, //目标矩形的左上角X坐标,即你要让位图从界面的什么地方开始显示的X坐标int y,//目标矩形的左上角Y坐标,即你要让位图从界面的什么地方开始显示的Y坐标int nWidth, //目标矩形的宽度,但本人觉得此处写位图的宽度也是一样,因为只是拷贝,没有伸缩int nHeight,  //目标矩形的高度,但本人觉得此处写位图的高度也是一样,因为只是拷贝,没有伸缩CDC* pSrcDC,//源位图设备int xSrc,//位图资源的起点X坐标int ySrc, //位图资源的起点Y坐标DWORD dwRop//光栅操作码);

此处再说明另一个接口StretchBlt(),可伸缩位图以此来达到全部显示到用户指定的空间中

 BOOL StretchBlt(int x, //同上int y, //同上int nWidth,//这里就要写客户端的宽度了,因为位图伸缩到此处设置的宽度里int nHeight,//这里就要写客户端的高度了,因为位图伸缩到此处设置的高度里CDC* pSrcDC,//同上int xSrc, //位图起点X坐标int ySrc,//位图起点Y坐标int nSrcWidth, //位图宽int nSrcHeight, //位图高DWORD dwRop//光栅操作码);

OK。。说完这两个函数,接下来说第一种添加背景图片方法:

1、Resource View中xxx.rc右击,选择Add Resource,选中BitMap,点击Import,然后选择一张.bmp的图片导入,此时就完成了位图资源的插入,并且有一个对应的ID。

2、在OnPaint()中的else中插入如下代码,切记,必须将CDialogEx::OnPaint()去掉

 //CDialogEx::OnPaint();CPaintDC  dc(this);CRect  rect;    GetClientRect(&rect); //得到客户端的大小;      CBitmap  bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP1);  //IDB_BITMAP1是你自己的图对应的IDBITMAP  bitmap;        bmpBackground.GetBitmap(&bitmap);  //得到位图信息CDC  dcMem;     dcMem.CreateCompatibleDC(&dc);//创建内存DC;CBitmap  *pbmpOld=dcMem.SelectObject(&bmpBackground); //选择位图,将其装入内存设备上下文;//使用BitBlt()函数从内存设备上下文中把位图拷贝到输出设备上下文中显示,//下边两个实现结果一样,所以本人觉得第3和4参数设为位图宽和高也行;//dc.BitBlt(0,0, bitmap.bmWidth,bitmap.bmHeight,&dcMem,0,0,SRCCOPY);dc.BitBlt(0,0, rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);dcMem.SelectObject( pbmpOld );//将原来的位图重新载入dcMem.DeleteDC();//删除内存DC

以上就是第一种方法显示对话框背景图片,接下来是第二种方法:通过读取位图文件显示位图,方法和上边大同小异,只是上边事先插入资源,然后用资源ID来显示,而现在是通过读取位图文件而已,不同的地方是:

1、不需要去插入资源,所以,LoadBitmap(IDB_BITMAP1)就没用了,而是用下边方法代替:

     HBITMAP hBitMap = (HBITMAP)::LoadImage( NULL, _T("res\\desk.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);   bmpBackground.Attach(hBitMap);

2、此时bmpBackground.GetBitmap(&bitmap);也就不对了,而应该是:

bmpBackground.GetObject(sizeof(bitmap), &bitmap);

剩下的一样。这就是一般给对话框加背景图片的两种方法。

加载完成后发现图片有的太小,占不满整个对话框,或者图片太大,客户端装不下,解决办法就是用上边说明的第二个函数了,而不用第一个了,因为BitBlt只是拷贝,不带伸缩功能,将BitBlt()换成如下方法即可:

dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);

PS:

此处用的CPaintDC  dc(this); 可能有的人会用CWindowsDC  dc(this);如果用WindowsDC的话,那么目标矩形区域的起点包括标题栏的,也就是说0,0点在整个对话框的的左上角,也就是说贴出来的背景图有一部分是被标题栏挡住的。

MFC 对话框添加背景图片详细过程(两种方法)相关推荐

  1. c语言mfc怎么插入背景图片,MFC 对话框添加背景图片详细过程(两种方法)

    给对话框添加背景图片方法很多,在此贴出两种很常见的方法.一种是通过读取位图资源显示位图(BitMap) step: 1.创建内存设备上下文: 2.选择位图,将其装入内存设备上下文: 3.使用BitBl ...

  2. 如何给MFC对话框添加背景图片

    一.创建项目 文件-新建项目-MFC应用程序-该页面使用"基于对话框"-完成即可. 注意:取消"使用Unicode库",否则在使用AfxMessageBox会报 ...

  3. 在VS2013环境下MFC学习:给对话框添加背景图片

    步骤1 添加资源 先右击工程名.rc(我的是PlaneDiag_Demo_MFC),再点击"添加资源" 步骤2 导入BMP图像 进入"添加资源"界面后,点击资源 ...

  4. VC中为对话框添加背景图片

    From: http://blog.ezcn8.com/2011/06/11/vc%E4%B8%AD%E4%B8%BA%E5%AF%B9%E8%AF%9D%E6%A1%86%E6%B7%BB%E5%8 ...

  5. 给对话框添加背景图片

      给对话框添加背景图片   1 . 把你的图包含到程序的 "Bitmap 资源 " 里,提示说该资源使用了大于 256 色的调色板,在 VC 里无法编辑等等,点确定就可以  2 ...

  6. qt 加载 图片旋转_QT 实现图片旋转的两种方法

    第一种方案 使用 QPixmap 的 transformed 函数来实现旋转,这个函数默认是以图片中心为旋转点,不能设置旋转的中心点,使用如下: QMatrix matrix; matrix.rota ...

  7. java 图片压缩100k_Java 实现图片压缩的两种方法

    问题背景. 典型的情景:Nemo社区中,用户上传的图片免不了要在某处给用户做展示. 如用户上传的头像,那么其他用户在浏览该用户信息的时候,就会需要回显头像信息了. 用户上传的原图可能由于清晰度较高而体 ...

  8. excel日历弄到html,Excel中进行添加日历控件的两种方法

    有时我们在运用Excel表格的时候会运用到日历的控件,可是小伙伴们却不知道在哪里添加.那么我们来看一下,它到底躲藏在哪里,又该怎么添加呢?今天,学习啦小编就教大家在Excel中进行添加日历控件的两种方 ...

  9. android 图片叠加xml,Android实现图片叠加效果的两种方法

    本文实例讲述了Android实现图片叠加效果的两种方法.,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(View v) { // ...

最新文章

  1. oracle 游标中抛出异常的处理方式
  2. 实现手机左右滑屏效果
  3. PowerBI Report Server 自定义视图无法显示故障解决
  4. 25 款软件上榜,2020“最佳开源奖” 出炉!
  5. C# 简单日志文本输出
  6. Java实现二分查找法
  7. php pdf添加水印图片,php pdf添加水印(中文水印,图片水印)
  8. 跟据URL来实现WebService
  9. word文档如何去掉光标
  10. Brunei Shell Marketing (BSM)选择P97的PetroZone(R)为文莱36个加油站提供壳牌驾驶者应用
  11. 微信公众号推送天气教程,自动定时推送【Java版】开发者和小白详细教程
  12. 免费蹭WIFI要小心 别让你的账号“裸奔”
  13. Linux进程信号(产生、保存、处理)/可重入函数概念/volatile理解/SIGCHLD信号
  14. 一键安装java程序_一键配置java环境工具
  15. 定了!考研人务必抓紧!2023考研全程资料免费分享微信大群!全网开启!
  16. hive:创建udf函数过滤emoji表情等特殊字符
  17. 【工具推荐】2022博客写作工具流指南
  18. Java中当被除数比除数小时为什么计算结果都为0?
  19. Ableton Max for Live Collection ALP 音频MIDI效果合成控制设备拓展合集
  20. TCP_CA_Open状态到TCP_CA_CWR状态

热门文章

  1. Java实现发送QQ邮箱+附件
  2. 人工智能AI全自动写文章,内容完全原创
  3. 运动目标检测 之 GMM背景模型算法
  4. 韩沉船多个客舱塞满遗体 高二复课仅剩13人
  5. 边端分析盒子-加油站内人工智能识别系统
  6. mysql数据库崩溃日志_我们崩溃并丢失了所有基本数据日志。 我们哪里错了?
  7. 蓄“视”待发 TCL显示器在全球最大智能显示终端制造基地下线
  8. 细化公诉环节适用刑事和解程序
  9. java按季还款_Java 获取指定日期范围内的每个月,每季度,每一年
  10. 声卡驱动已安装,而万恶的win7旗舰版保持哑巴!