MFC如何设置背景图片

来源:互联网 发布:淘宝卖家正常发货时间 编辑:程序博客网 时间:2024/06/05 02:19

方法有很多种,有难有易。接下来从简单到难来讲解,并举例。

一、利用WM_CTLCOLOR消息将图片绘制上去

步骤如下:
1.为对话框添加WM_CTLCOLOR消息

2.添加两个成员变量

    CBitmap m_bmp;   //位图    CBrush m_brush;  //画刷

3.加载位图,并且在WM_CTLCOLOR函数中绘制背景

m_bmp.LoadBitmap(MAKEINTRESOURCE(IDB_BITMAP1));    //这里将位图加载进资源后,再Load    m_brush.CreatePatternBrush(&m_bmp);     if (nCtlColor == CTLCOLOR_DLG)    {        return m_brush;    }

结果如图:

这个方法的缺点就是,图片不能自适应窗口大小。

二、用GDI函数将图片”画”上去

步骤如下:
1.添加成员变量如下

    CBitmap m_bmp;      //存放位图对象    CDC m_dc;           //DC对象

2.在初始化对话框中加载位图并选入DC中

    //加载位图    CBitmap bmp;    bmp.LoadBitmapA(MAKEINTRESOURCE(IDB_BITMAP1));    //添加位图    m_bmp.Attach(bmp);    //创建兼容DC    CDC* pDc = GetDC();    m_dc.CreateCompatibleDC(pDc);    //用完之后释放    ReleaseDC(pDc);    //把位图对象选入DC中    m_dc.SelectObject(&m_bmp);    //使窗口无效,这样OnPaint函数就会被触发,使之被画出来    Invalidate(FALSE);

3.最后在OnPaint函数中将位图画出来

        //画图DC        CPaintDC dc(this);        CRect rect = { 0 };        GetClientRect(&rect);        //缩放位图        BITMAP bm;        m_bmp.GetBitmap(&bm);        dc.StretchBlt(0, 0, rect.Width(), rect.Height(),            &m_dc, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);        CDialogEx::OnPaint();

结果如图:

优点是图片可以伸缩,缺点就是图片会变得模糊。

三、用GDI+函数将图片”画”上去
1.初始化GDI+
请参看这篇文章MFC-GDI+初始化

2.添加一个Image成员变量

Image* m_img;

3.在初始化对话框中加载图片

    char buf[256] = "";    GetCurrentDirectoryA(256, buf);    sprintf_s(buf, "%s\\test.bmp", buf);    CStringW s;   //转为宽字符    s = buf;    m_img = Image::FromFile(s);  //加载图片

4.在OnPaint函数中画出来

        CRect rect = { 0 };        GetClientRect(&rect);   //获取客户区大小        Graphics g(dc);        g.DrawImage(m_img, 0, 0, rect.Width(), rect.Height());

这种方法功能最全,最好用。拉伸的时候图片清晰度被保持的很好,而且可以加载很多种类型的图片。还可以对图片进行旋转等操作。

结果如图:

0 0
原创粉丝点击