前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vs2010 单文档MFC 通过加载位图文件作为客户区背景

vs2010 单文档MFC 通过加载位图文件作为客户区背景

作者头像
流川疯
发布2019-01-18 15:15:54
6950
发布2019-01-18 15:15:54
举报

实现效果:

这里写图片描述
这里写图片描述

这个其实是一个非常常见的功能,大家都会考虑给自己简单的工程做一个背景界面。其实只要在view类中重载OnEraseBkgnd()这个函数就好了。

代码如下:

代码语言:javascript
复制
BOOL CdddView::OnEraseBkgnd(CDC* pDC)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值


    CString string("b.bmp"); 
    HBITMAP hbitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),string, 
        IMAGE_BITMAP,1024,768, LR_CREATEDIBSECTION|LR_LOADFROMFILE); 
    //VERY IMPORTANT:NOT CALL THE SUPER CLASS FUNCTION 
    CPaintDC dc(this); 
    if(hbitmap==NULL) 
        return FALSE; 
    CBitmap bitmap; 
    bitmap.Attach(hbitmap); 
    BITMAP bmp; 
    bitmap.GetBitmap(&bmp); 
    CDC memDc;

    memDc.CreateCompatibleDC(pDC);
    CBitmap* pOldBitmap = memDc.SelectObject(&bitmap);
    CRect rect;
    GetClientRect(&rect);
    pDC->SetStretchBltMode(COLORONCOLOR);//这个模式不设置的话会导致图片严重失真
    pDC->StretchBlt(0,0,rect.Width() ,rect.Height(),
        &memDc,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
    memDc.SelectObject(pOldBitmap);
    memDc.DeleteDC();                                      //删除DC
    return TRUE; 
}

顺便给工程换个标题栏:

代码语言:javascript
复制
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    if( !CFrameWndEx::PreCreateWindow(cs) )
        return FALSE;
    // TODO: 在此处通过修改
    //  CREATESTRUCT cs 来修改窗口类或样式
    cs.style &=~FWS_ADDTOTITLE;

    cs.lpszName = _T("XXX系统");

    return TRUE;
}

加载位图时候有的格式可能还有点问题,下面是讨论贴: http://bbs.csdn.net/topics/391027250?page=1#post-399164597

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年05月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档