MFC设置主界面背景图片、设置子窗体背景图片

31 篇文章 2 订阅
//在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 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值