国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > 综合技术 > vs2010 单文档MFC 通过加载位图文件作为客户区背景

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

来源:程序员人生   发布时间:2015-05-04 09:48:20 阅读次数:3188次

实现效果:

这里写图片描述

这个实际上是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

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生