MFC界面美化.docx_第1页
MFC界面美化.docx_第2页
MFC界面美化.docx_第3页
MFC界面美化.docx_第4页
MFC界面美化.docx_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

首先要感谢网络和网友,许多写程序过程中遇到的问题是借助网络解决的,网友对于我遇到的类似问题的解答给我提供了很多思路,当然还有MSDN,我的水平才会不断提高,可能以后也不会再用vc+6.0开发软件了,花点时间将以前的成果总结一下。 工程示例实现的美化内容包括:1. 给工程添加背景图与文字:图的位置、大小,文字的字体、大小均可以通过更改参数来改变; 2. 完全手动绘制链接效果的按钮;并带有实时提示功能; 3. 解决刷新界面时的闪烁问题; 具体实现过程如下:1. 为方便使用MFC提供的控件,我们建立单文档工程时将视类的基类选为CFormView类 如果是基于对话框的工程,直接“完成”就行了。2 闪屏的解决。因为需要图像图形的操作,很多代码可能会放到OnDraw(),或者OnPaint()函数里执行,那样就会导致刷新界面时的闪烁,原因网上介绍的很多,解决方法也很多,本文采用利用兼容DC(也叫内存DC)的方法实现,思路是在内存中建立一块和界面一样大小的位图,将所有在界面上的绘制操作现在内存位图里画好,然后再一并复制到显示设备地址上去,(原理说的不是很严谨,不过就那意思)代码送上:voidCEODSVer2_1View:OnDraw(CDC*pDC)/TODO:Addyourspecializedcodehereand/orcallthebaseclassCDCMemDC;/首先定义一个显示设备对象CBitmapMemBitmap;/定义一个位图对象MemDC.CreateCompatibleDC(NULL);CRectrt;GetClientRect(&rt);MemBitmap.CreateCompatibleBitmap(pDC,rt.Width(),rt.Height();/建立与屏幕显示兼容的位图,CBitmap*pOldBit=MemDC.SelectObject(&MemBitmap);/将位图选入到内存设备中/设置背景色MemDC.FillSolidRect(0,0,rt.Width(),rt.Height(),COLOR_BKGD);/*/*/ 这里实现绘图的所有操作/*/*/pDC-BitBlt(0,0,rt.Width(),rt.Height(),&MemDC,0,0,SRCCOPY);/将内存图拷贝到屏幕上进行显示MemBitmap.DeleteObject();/绘图完成后的清理MemDC.DeleteDC();/InvalidateRect(m_Button_Logon,FALSE);3 添加背景图片与文字。这个简单,在OnDraw()函数里实现 _ 代码送上:/*/*/*/*贴背景图与写大标题*/*/*beginx*/CBitmapbitmap;BITMAPbmp;bitmap.LoadBitmap(IDB_BITMAP1);bitmap.GetBitmap(&bmp);CDCpCompatableDC1;pCompatableDC1.CreateCompatibleDC(&MemDC);/MemDC是上文提到的DC,所有绘图操作都在兼容DC里完成pCompatableDC1.SelectObject(&bitmap);MemDC.SetStretchBltMode(HALFTONE);/防止位图缩小时失真CRectm_Area_Title;GetClientRect(&m_Area_Title);/获得显示位图的区域,MemDC.StretchBlt(m_Area_Title.left,/这四个参数表示显示位图到哪个区域m_Area_Title.top,m_Area_Title.Width(),m_Area_Title.Height()-200,&pCompatableDC1,0,0,bmp.bmWidth,bmp.bmHeight,/这四个参数表示要显示位图的哪部分,现在显示全部位图SRCCOPY);MemDC.SetBkMode(TRANSPARENT);CFontm_font_title;m_font_title.CreatePointFont(220,仿宋_GB2312);/设置标题的字体与大小MemDC.SelectObject(&m_font_title);MemDC.SetTextColor(RGB(255,0,0);MemDC.DrawText(测试系统,CRect(0,0,m_Area_Title.Width(),m_Area_Title.Height(),/写文字的矩形区域,可以自己更改DT_CENTER|/*/*DT_VCENTER|*/DT_SINGLELINE);/*/*endx*/效果图:4 带提示功能的链接效果的按钮(不是tip)效果如图:需要添加的代码首先需要添加3个成员变量与一个函数:1CRectm_Button_1;2CRectm_Button_2;3CRectm_Area_3;4voidDrawButtonText(CDC*pmemdc,CRectrc,CStringtext,CStringdescribe,CRectarea_describe,COLORREFtextcolor,BOOLunderline=FALSE);5OnInitialUpdate()里添加的代码有:1voidCInterfaceView:OnInitialUpdate()23CFormView:OnInitialUpdate();4GetParentFrame()-RecalcLayout();5ResizeParentToFit();6GetDlgItem(IDC_STATIC1)-GetWindowRect(&m_Button_1);7GetDlgItem(IDC_STATIC2)-GetWindowRect(&m_Button_2);8GetDlgItem(IDC_STATIC3)-GetWindowRect(&m_Area_3);9ScreenToClient(&m_Button_1);10ScreenToClient(&m_Button_2);11ScreenToClient(&m_Area_3);12m_Area_3.InflateRect(-5,-20,-5,-20);13然后添加鼠标移动消息响应函数:1voidCInterfaceView:OnMouseMove(UINTnFlags,CPointpoint)23/TODO:Addyourmessagehandlercodehereand/orcalldefault4CDC*pClientDC=GetDC();5staticBOOLiswrite_Button_1=FALSE;6staticBOOLiswrite_Button_2=FALSE;7if(m_Button_1.PtInRect(point)/如果鼠标在登录按钮内89SetCursor(AfxGetApp()-LoadCursor(IDC_CURSOR1);10if(!iswrite_Button_1)/只写一次1112DrawButtonText(pClientDC,m_Button_1,13按钮1,14按钮1,15m_Area_3,RGB(42,95,170),TRUE);16iswrite_Button_1=TRUE;1718elseif(m_Button_2.PtInRect(point)/鼠标不在上述按钮但在退出内1920SetCursor(AfxGetApp()-LoadCursor(IDC_CURSOR1);/设置光标为手型21if(!iswrite_Button_2)/只写一次2223DrawButtonText(pClientDC,m_Button_2,24第二个按钮,25第二个按钮,26m_Area_3,RGB(42,95,170),TRUE);27iswrite_Button_2=TRUE;2829else/鼠标不在上述按钮内时30InvalidateRect(&m_Area_3,FALSE);/刷新描述区31m_Button_1.InflateRect(-1,-1,-1,-1);32m_Button_2.InflateRect(-1,-1,-1,-1);33InvalidateRect(&m_Button_1,FALSE);34InvalidateRect(&m_Button_2,FALSE);35m_Button_1.InflateRect(1,1,1,1);36m_Button_2.InflateRect(1,1,1,1);37iswrite_Button_1=FALSE;38iswrite_Button_2=FALSE;3940ReleaseDC(pClientDC);41CFormView:OnMouseMove(nFlags,point);42在OnDraw()函数里添加的代码有:MemDC.FillSolidRect(m_Button_1,RGB(175,202,228);MemDC.FillSolidRect(m_Button_2,RGB(175,202,228);DrawButtonText(&MemDC,m_Button_1,按钮1,m_Area_3,RGB(0,0,0);DrawButtonText(&MemDC,m_Button_2,第二个按钮,m_Area_3,RGB(0,0,0);然后是DrawButtonText()的实现:1voidCInterfaceView:DrawButtonText(CDC*pmemdc,CRectrc,CStringtext,CStringdescribe,CRectarea_describe,COLORREFtextcolor,BOOLunderline)23pmemdc-SetBkMode(TRANSPARENT);4CFontm_font_text;5m_font_text.CreatePointFont(120,仿宋_GB2312);6pmemdc-SelectObject(&m_font_text);7pmemdc-SetTextColor(textcolor);8pmemdc-DrawText(text,rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);9pmemdc-DrawText(describe,area_describe,DT_LEFT);1011CSizesz=pmemdc-GetTextExtent(text);12if(underline)/绘制下划线1314CPenUnderLinePen;15UnderLinePen.CreatePen(PS_SOLID,1,RGB(0,0,0);16pmemdc-SelectObject(&UnderLinePen);1718pmemdc-MoveTo(rc.left+(rc.Width()-sz.cx)/2,rc.bottom-(rc.Height()-sz.cy)/2);19pmemdc-LineTo(rc.right-(rc.Width()-sz.cx)/2,rc.bottom-(rc.Height()-sz.cy)/2);2021else2223CPenUnderLinePen;24UnderLinePen.CreatePen(PS_SOLID,1,RGB(175,202,228);25pmemdc-SelectObject(&UnderLinePen);26pmemdc-MoveTo(rc.left+(rc.Width()-sz.cx)/2,rc.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论