MFC设置窗体背景图片的办法

⌚Time: 2022-08-31 13:43:01

👨‍💻Author: Jack Ge

1.导入位图

新建一个项目TestBackground

资源视图中右键点击TestBackground.rc,添加资源,bitmap,导入,导入一张bmp位图

在资源视图中多了一个Bitmap文件夹,导入的位图id是IDB_BITMAP1

2.设置背景图片

在窗体的OnPaint函数中,加入以下代码


    //获取窗体dc

    CDC *pDC =GetDC();

    CDC memDC;

    //创建兼容dc

    memDC.CreateCompatibleDC(pDC);

    //加载bitmap图片

    CBitmap bitmap;

    bitmap.LoadBitmap(IDB_BITMAP1);

    memDC.SelectObject(bitmap);

    BITMAP bmp;

    bitmap.GetBitmap(&bmp);

    //获取窗体显示区域

    RECT rc;

    GetClientRect(&rc);



    //获取窗体宽度和高度

    int showWidth = rc.right-rc.left;

    int showHeight = rc.bottom-rc.top;

    //若不设置这个模式,图片会严重失真

    pDC->SetStretchBltMode(COLORONCOLOR);

    //将图像绘制到控件区域中

    pDC->StretchBlt(rc.left,rc.top,showWidth,showHeight,&memDC,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);



    释放GDI资源

    bitmap.DeleteObject();

    memDC.DeleteDC();

    ReleaseDC(pDC);

或者


    CPaintDC dc(this); // device context for painting



    CRect rect;

    GetClientRect(&rect); 



    CDC dcBmp; //定义并创建一个内存设备环境

    dcBmp.CreateCompatibleDC(&dc); //创建兼容性DC



    CBitmap bmpBackground;

    bmpBackground.LoadBitmap(IDB_BITMAP1); //载入资源中的IDB_BITMAP1图片

    BITMAP bitmap; //图片变量                

    bmpBackground.GetBitmap(&bitmap); //将图片载入位图中

    CBitmap *pbmpOld = dcBmp.SelectObject(&bmpBackground); //将位图选入临时内存设备环境  



    //调用函数显示图片 StretchBlt显示形状可变

    dc.SetStretchBltMode(COLORONCOLOR);

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



    //释放资源

    bmpBackground.DeleteObject();

    dcBmp.DeleteDC();