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

来源:互联网 发布:手机陀螺仪水平仪软件 编辑:程序博客网 时间:2024/05/29 14:43

实现效果:

这里写图片描述

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

代码如下:

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; }

顺便给工程换个标题栏:

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

1 1
原创粉丝点击