程序员人生 网站导航

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

栏目:综合技术时间:2015-05-04 09:48:20

实现效果:

这里写图片描述

这个实际上是1个非常常见的功能,大家都会斟酌给自己简单的工程做1个背景界面。其实只要在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⑶99164597

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐