博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC设置主界面背景图片、设置子窗体背景图片
阅读量:4302 次
发布时间:2019-05-27

本文共 2264 字,大约阅读时间需要 7 分钟。

//在Onpaint函数中加入如下代码    //----------给窗口设置背景图片----------------------------        CPaintDC dc(this);        CRect   myrect;           GetClientRect(&myrect);           CDC   dcMem;           dcMem.CreateCompatibleDC(&dc);           CBitmap   bmpBackground;           bmpBackground.LoadBitmap(IDB_BITMAP1);   //IDB_BITMAP_TOOL是你自己的图对应的ID         BITMAP   bitmap;           bmpBackground.GetBitmap(&        bitmap);           CBitmap   *pbmpOld=dcMem.SelectObject(&bmpBackground);           dc.StretchBlt(0,0,myrect.Width(),myrect.Height(),&dcMem,0,0,           bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);

复制代码

一.设置主界面背景图片

1.首先准备两张Windows24位BMP(后缀为.bmp)的图片,找到创建的工程目录下的res文件夹,将图片复制粘贴到res文件夹下。

这里以美丽的精灵公主–丽芙·泰勒为背景。

这里以Photoshop为工具将普通图片改为Windows下的24位图片。

(1)打开图像->图像大小,调整图像至合适大小。

(2)打开文件->存储为,将图片存储为.bmp的图片。

这样就修改图片格式成功了,当然也可以使用其他的图片编辑工具来修改。

2.添加背景Bitmap资源。找到资源视图下的Dialog,右键->添加资源->选择Bitmap->导入,将res文件夹下的图片导入工程中。

导入成功后可以在Bitmap文件夹下看到名为IDB_BITMAP1的图片,以此方法导入另一张图片。

3.找到XXXDlg.cpp下的OnPaint()函数,将else中的内容替换为如下内容。(注意注释掉原来的CDialog::OnPaint();)

else {
 //CDialog::OnPaint(); 
  //添加代码对话框背景贴图
  CPaintDC   dc(this); 
  CRect   rect;     
  GetClientRect(&rect);    //获取对话框长宽      
  CDC   dcBmp;             //定义并创建一个内存设备环境
  dcBmp.CreateCompatibleDC(&dc);             //创建兼容性DC
  CBitmap   bmpBackground;   
  bmpBackground.LoadBitmap(IDB_BITMAP1);    //载入资源中图片
  BITMAP   m_bitmap;                         //图片变量               
  bmpBackground.GetBitmap(&m_bitmap);       //将图片载入位图中
   //将位图选入临时内存设备环境
  CBitmap  *pbmpOld=dcBmp.SelectObject(&bmpBackground);
   //调用函数显示图片StretchBlt显示形状可变
  dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcBmp,0,0,m_bitmap.bmWidth,m_bitmap.bmHeight,SRCCOPY);    

}

123456789101112131415161718

运行程序即可看到如下:

 

二.设置子窗体背景图片

1.在子窗体下,右键->类向导,在消息中找到WM_PAINT函数,添加处理程序(即为OnPaint函数在此类中的重载)。

2.在child.cpp中找到OnPaint函数,添加如下代码。

void Child::OnPaint()

{
    CPaintDC dc(this); // device context for painting
           // TODO: 在此处添加消息处理程序代码
                  // 不为绘图消息调用 CDialogEx::OnPaint()    
    CBitmap   bitmap;                            //定义位图
    bitmap.LoadBitmap(IDB_BITMAP2);    //这个IDB_BITMAP1要自己添加
    CBrush   brush;
    brush.CreatePatternBrush(&bitmap);
    CBrush*   pOldBrush = dc.SelectObject(&brush);
    dc.Rectangle(0, 0, 790, 650);                  //前两个为图片起始位置,后两个为图片终点位置,实际为图片的像素大小
    dc.SelectObject(pOldBrush);
}123456789101112
完成后的结果如下:

 

存在的一点问题:

设置主界面时的图片在OnPaint函数中自动适应窗体长宽,在设置子窗体时则是由自己来设置dc.Rectangle(0, 0, 790, 650)后两个参数来调节图片,以适应窗体。

原文:https://blog.csdn.net/qq_43524683/article/details/86498806 
 

你可能感兴趣的文章
Hadoop平台相关技术
查看>>
Android中热修复框架AndFix原理解析及案例使用
查看>>
python3安装scrapy
查看>>
python正则表达式入门一
查看>>
python正则表达式入门二
查看>>
scrapy运行
查看>>
XPATH入门
查看>>
python爬虫 CSS选择器
查看>>
正常关闭java程序
查看>>
查看linux核心数
查看>>
数据结构与算法三: 数组
查看>>
Activiti工作流会签二 启动流程
查看>>
Activiti工作流会签三 撤销,审批,驳回
查看>>
Oauth2方式实现单点登录
查看>>
CountDownLatch源码解析加流程图详解--AQS类注释翻译
查看>>
ES相关度评分
查看>>
我们一起做一个可以商用的springboot脚手架
查看>>
idea在搭建ssm框架时mybatis整合问题 无法找到mapper
查看>>
java设计基本原则----单一职责原则
查看>>
HashMap的实现
查看>>