==> 学习汇总(持续更新)
==> 从零搭建后端基础设施系列(一)-- 背景介绍


刚开始做的时候,我理所当然的想,直接在OnPaint函数中改变图片的大小,但是发现,这样会导致图片出现如下现象:

这是因为多次重复地更新同一区域,导致图片看起来重叠了,也可以这样理解,因为没有使客户区无效,所以OnPaint再重绘的时候不会先把原来的背景擦除,从而覆盖上去,出现重叠。所以由此可以想到解决办法,那就是在别的函数中使用Invalidate()函数使客户区矩形区域无效,然后通知重绘,这时,会先把原来的背景擦除掉,就不会重叠了。

这时候就需要WM_SIZE消息了,这个消息的作用是,当窗口大小发生改变的时候会被触发,里面会有两个参数,分别是窗口的宽(X)和高(Y)。

步骤如下:
(关于背景图的设置省略,不懂的请参考MFC如何设置背景图片)

1.添加两个成员变量

 int m_oldWidth;   //窗口的宽int m_oldHeight;  //窗口的高

2.在初始化对话框函数中将初始化窗口大小保存起来

 CRect rect;GetClientRect(&rect);m_oldWidth = rect.Width();    //将初始的宽和高保存起来,当窗口大小改变的时候用得上m_oldHeight = -rect.Height();

3.在OnSize函数使客户区无效,通知OnPaint重绘

void CMFCTESTDlg::OnSize(UINT nType, int cx, int cy)
{CDialogEx::OnSize(nType, cx, cy);//当窗口大小改变的时候,使客户区无效Invalidate(FALSE);
}

结果如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TRgFxMsw-1573895628940)(https://img-blog.csdn.net/20170301190548969?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTgyOTc2NzU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]

有兴趣的可以去做下实验,在OnPaint函数中加上这么一句代码

dc.FillRect(&rect, &CBrush(RGB(255, 255, 255)));

这句代码的意思是,使客户区变成白色,当你不用Invalidate函数的时候,这句代码会执行失败,客户区并没有变成白色,不信的可以下断点调试一下。

     CRect rect = { 0 };GetClientRect(&rect);   //获取客户区大小dc.FillRect(&rect, &CBrush(RGB(255, 255, 255)));BITMAP bm;m_bmp.GetBitmap(&bm);StretchBlt(dc, 0, 0, rect.Width(), rect.Height(), m_dc, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);

用GDI+的时候也是一样的思路。

MFC如何让背景图随窗口大小改变相关推荐

  1. MFC/WTL 设置背景图和控件透明的方法

    1.MFC 对话框设置背景图 方法一: 1>资源中导入一张bitmap图,如命名为 IDB_BITMAP1 2>对话框中添加一个 Picture Control,属性设置 Type 改为B ...

  2. MFC 对话框添加背景图

    // 给对话框添加背景图 BOOL CEditCtrlMultilineDlg::OnEraseBkgnd(CDC* pDC) {// TODO: 在此添加消息处理程序代码和/或调用默认值CDC Me ...

  3. 修改placeholder文字 文字换行省略号 背景图固定 鼠标经过图片闪光效果

    1.input框里面的placeholder文字字体大小修改 input {background-color:transparent;font-size: (13 / @baseSize);paddi ...

  4. 精灵图,背景图缩放。盒子阴影,

    文章目录 精灵图 背景图大小 连写 盒子阴影 过渡 骨架标签 SEO三大标签 标题图标--favicon 精灵图 将小图合成一个大图 优点:减少服务器的发送次数,减轻服务器的压力,提高页面的加载速度 ...

  5. vc picture控件载入背景图,随控件大小改变

    在mfc里,想要在Picture控件中载入一张图片有两种方法:静态的和动态的.静态的方法就是图片先载入资源(.rc)文件中,拥有一个唯一的ID:动态的方法就是制定图片的路径名即可. 当然这样的方法网上 ...

  6. Php点击更换封面,JavaScript_js实现点击图片改变页面背景图的方法,本文实例讲述了js实现点击图 - phpStudy...

    js实现点击图片改变页面背景图的方法 本文实例讲述了js实现点击图片改变页面背景图的方法.分享给大家供大家参考.具体实现方法如下: 点击图片即改变页面的背景图片 希望本文所述对大家的javascrip ...

  7. MFC几种给对话框添加背景图的方法

    1,目标 总结几种给MFC对话框添加背景图片的方法. 2,实现 方式一:(适用于多种格式)用CImage类可以加载多种格式的图片,在OnPaint中Draw即可. void CBackgroundDl ...

  8. 计算机过去与未来ppt背景图,过去无可挽回未来可以改变背景图高清图片大全

    过去无可挽回未来可以改变背景图高清图片大全是一组在抖音上面很火爆的表情包图片,一组超多内容可以去查看的素材.会让用户在线很简单的进行下载,还可以免费的就会让用户进行使用.大量会帮助到用户进行保存的内容 ...

  9. 使用 XML 实现按钮改变焦点设置背景图

    在 drawable 文件夹中添加一个 advancedbutton.xml 设置<selector>和 <item>标签 <?xml version="1.0 ...

最新文章

  1. freebsd 编译核心
  2. servlet处理多个请求 笔记
  3. 打造颠覆你想象中的高性能,轻量级的webform框架-----如何替换webform的垃圾控件(第一天)...
  4. 计算机怎样双面打印,电脑双面打印机怎么打印双面_电脑如何设置自动双面打印-win7之家...
  5. B站视频音频合并(FFmpeg)
  6. 1:n的冗余备份_备份与冗余:有什么区别?
  7. 2015年终总结和2016年的计划
  8. MySQL ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
  9. Linux openssl 生成证书的详解
  10. 能用CSS实现的就不用麻烦JavaScript(Part2)
  11. 使用ITunes向苹果手机中导入mobi文件
  12. 手机在泰国显示无服务器,怎么连接泰国服务器
  13. 统计学习导论 - 基于R的应用 学习笔记1
  14. Ubuntu下桌面死机的解决方法,无须重启
  15. python 贪吃蛇大作战_Python实现贪吃蛇大作战
  16. 一个艰难的决定。。。搬家了~
  17. C/C++利用gotoxy()函数改变光标位置的实现方法
  18. 一杯茶的功夫让你学会OA选型
  19. 阿里云如何通过本地客户端连接Windows实例
  20. ExcelVBA之传递参数给一子程序以及如何将值从子程序传递回给主调过程

热门文章

  1. 绿色IT,从环保到经济效益
  2. 【吴恩达deeplearning.ai】Course 5 - 3.3 集束搜索
  3. 实现加减乘除任意组合的语法解析
  4. 汇编(二)——微机原理与接口
  5. 也许风停了,我们才能心平气和的看待一家公司
  6. anaconda环境迁移
  7. 记一次笔记本连接酒店Wifi点击认证后总是报网络连接问题
  8. ssh mysql 导出excel_使用ssh远程执行命令批量导出数据库到本地(转)
  9. 都在这儿!最全的北斗厂家企业名单!
  10. Linux防火墙放行gre隧道,防火墙 tunnel(GRE隧道)+×××配置过程分析