下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 VC++图形界面开发与应用

VC++图形界面开发与应用.doc

VC++图形界面开发与应用

yang媛媛y
2017-10-16 0人阅读 举报 0 0 暂无简介

简介:本文档为《VC++图形界面开发与应用doc》,可适用于人文社科领域

VC图形界面开发与应用VC论文题目VC图形界面开发与应用学生姓名指导教师年级级专业计算机科学与技术学院计算机科学与信息工程年月日课题来源:指导教师与学生自选相结合课题研究的目的和意义:目前VC作为一个主流的开发平台一直深受编程爱好者的喜爱熟练使用VC进行图形界面的开发是当下图形开发领域的一个比较重要的手段和技能Windows图形界面就是VC开发的经典展现通过对经典的分析学习使其熟练使用VC设计极具特色的图形界面。VC是Windows平台上的C编程环境学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识难度比较大。Windows下编程需要了解Windows的消息机制以及回调(callback)函数的原理MFC是WinAPI的包装类需要理解文档视图类的结构窗口类的结构消息流向等等COM是代码共享的二进制标准需要掌握其基本原理等等。使用VC进行图形界面的开发与应用是同样是时下图形界面开发的一种主流开发手段工控机、模拟器、以及各种支持WindowCE的消费类电子产品的操作界面各种、软件应用产品等都是使用VC开发的所以VC的应用领域相当广乏对于希望进行图形界面开发的同学来说学好和熟练使用VC是设计图形界面的基础同时强大的VC开发工具也提供了更多更便捷的开发环境使开发工作更加的丰富化、技巧化、简便化。国内外同类课题研究现状及发展趋势:VC图形界面的开发是当今开发的一个热门领域熟练使用VC设计极具特色的图形界面是立足于开发领域的一样重要的技能和手段。在当今的图形界面领域国外技术一直处于垄断状态所以在国内开发市场急需相关的技术类人才所以发展空间极其广大努力熟练相关工具以及成熟的事例经验丰富自己的开发技术才是一条发展的捷径只有设计极具特色的图形界面才能在激烈的图形界面市场具有一定竞争力。课题研究的主要内容和方法研究过程中的主要问题和解决办法:主要内容:、绪论、Windows用户界面制作基础、按钮控件与编辑控件、组合框与列表视图控件、菜单与工具栏、应用与实例、总结方法:理论结合实际大量阅读相关资料主要问题:、VC的编程思想、图形界面的开发过程解决方法:、通过实际操作和查阅相关资料、在学校机房实验课题研究起止时间和进度安排:起止时间年月年月进度安排(指导教师可根据实际情况适当安排)确定论文题目查找资料撰写开题报告查找资料进一步分析题目研究内容撰写论文并送印机字体的CFont对象指针。如果打印机还没有被设置则返回。()GetSelectedText调用该函数以得到当前被选中的文本其原型为:VoidGetSelectedText(CStringstrResult)const参数:strResult将返回被选中的文本。CEditView类的常规操作函数包括:FindText、PrintInsideRectSerializeRaw函数它们能够完成检索文本、保存CEditView对象等操作。()FindText调用该函数以在文本中检索指定文本其原型为:BOOLFindText(LPCTSTRlpszFind,BOOLbNext=TRUE,BOOLbCase=TRUE)返回值:如果函数调用成功则返回非零值否则返回零值。参数:lpszFind指定了将检索的文本bNext指定了检索方向。如果该参数为TRUE则检索方向指向缓冲区的末端。如果该参数为FALSE则检索方向指向缓冲区的开头。bCase指定了检索是否是大小写敏感的。如果该参数为TRUE则区分字符的大小写。如果该参数为FALSE则检索不分字符大小写。()PrintInsideRect调用该函数以打印指定矩形中的文本其原型为:UINTPrintInsideRect(CDC*Pdc,RECTrectLayout,UINTnIndexStart,UINTnIndexStop)返回值:如果函数调用成功则返回将打印的下一个字符索引。参数:Pdc指定了打印机设备环境。rectLayout指定了包含打印机文本的矩形可以为CRect对象可以为RECT结构nIndexStop指定了缓冲区中最后一个被打印字符后的字符索引如果CEditView控件没有ESAUTOHSCROLL风格则文本将在矩形中回绕。如果控件具有ESAUTOHSCROLL风格则文本将被矩形的右边界裁剪。()SeralizeRaw调用该函数以将CEditView对象以纯文本方式存储在磁盘中其原型为:VoidSerializeRaw(CArchivear)参数:Ar指定了将用以程序化文本的CArchive对象。SerializeRaw函数与CEditView内部实现的Serialize函数不同该函数只读取和写入文本而不能处理其他类型数据。CEditView类的重载函数包括:OnFindNext、OnReplaceAll、OnReplaceSel和OnTextNotFound,他们能够完成抵换文本等操作。()OnFindNext调用该函数以在文本缓冲区中检索指定文本其原型为:VirtualvoidOnFindNext(LPCTSRTlpszFind,BOOLbNext,BOOLbCase)参数:lpsezFind指定了将被检索的文本。bNext指定了检索方向。如果该参数为TRUE则检索方向指向缓冲区的末端。如果该参数为FALSE则检索方向指向开头。bCase指定了检索是否是大小写敏感的。如果该参数为TRUE则区分字符的大小写。而如果该参数为FALSE则检索不区分字符的大小写。()OnReplaceAll调用该函数以使用指定文本替换CEditView中的所有文本其原型为:VirtualvoidOnReplaceAll(LPCTSTRlpszFind,LPCTSTRlppszReplace,BOOLbCase)参数:lpseFind指定了将检索的文本。lpszReplace指定了将用于替换的文本。图为此函数的演示实例图函数演示实图第四章组合框与列表视图控件组合框控件由列表框与静态空间或编辑控件共同组成。如果用户选中列表框中的某项则该项将显示静态或编辑控件中如果组合框为下拉风格则用户可以在编辑空间中输入某项列表可见其中对应为高亮状态。如表。表组合框风格比较简单总是可见编辑控件下拉式下拉可见编辑控件下拉列表式下拉可见静态控件用户即可以在对话框模板中创建组合框控件也可以在代码中直接创建。CComboBox类的常规操作函数包括GetCount、GetCurSel、SetCurSel、GetEditSel等它们能够完成选项数目的检索、选项的设置。()GetCount调用函数以得到组合框中的选项数目其原型为:intGetcount()const返回值:如果函数调用成功则返回选项数目。()GetCurlSel调用该函数以得到当前选项的索引其原型为:intGetCurSel()const返回值:如果函数调用成功则返回当前选项的索引。()SetCurSel调用该函数以设置组合框中的当前选项其原型为:IntSetCurSel(intnSelect)返回值:如果调用成功则返回当前的索引。下图为一个简单的下拉组合框:图下拉组合框列表视图是一种常用的Windows控件由MFC和CListCtrl类进行管理。CListCtrl对象的创建函数包括CListCtrl和Create它们能够完成构造CListCtrl对象和创建Windows列表视图控件操作。()CListCtrl调用该函数以构造CListCtrl对象其原型为:CListCtrl()()Create调用该函数以创建一个列表视图控件其原形为:BOOLCreate(DWORDdwStyle,constRECTrect,CWnd*pParentWnd,UINTnID)返回值:如果函数执行成功则返回非零值否则返回零值。一般来说列表视图控件只是用于显示表格数据的。列表视图控件本身就是为用户界面设计提供了许多选择其最优秀的特性是能够在列中显示数据、进行列排序、添加图象等。下面介绍一款OnEndLableEdit函数:VoidCMyListCtrlOnEndLabelEdit(NMHDR*Pnmhdr,LRESULT*pResult){LVDISPINFO*plvDispInfo=(LVDISPINFO*)PnmhdrLVITEM*plvItem=pvDispInfo>item:If(plvItem>pszText!=){SetITemText(plvItem>iTtem,plvIter>iSubItem,plvItem>pszText)}*pPesult=FALSE}下图为列表视图控件制作的绘图功能演示工具图列表控件编辑视图第五章菜单与工具栏菜单是Windows应用程序的重要组成元素之一。大量操作都是通过菜单命令完成的虽然使用AppWizard生成的应用程序会自动创建标准框架菜单及处理函数但是为了满足实际需要我们有时需要不同形式菜单。菜单是由CMenu类管理的可以在局部堆栈进行操作。CMenu的构造函数为:CMenu,调用该函数可以创建一个CMenu对象其原形为:CMenu()在创建了CMenu对象后还必须调用CreateMenu、CreatePopupMenu、LoadMenu等函数以创建菜单。CMenu类的初始化函数包括:Attach、DetachFromHandle、GetSafeHmenu等它们可以完成创建菜单、得到菜单句柄等操作()Attach调用该函数将指定菜单句柄赋予一个CMenu对象其原型如下:BOOLAttach(HMENUhMenu)返回值:如果函数调用成功则返回非零值否则返回零值。()Detach调用该函数将菜单句柄与CMenu对象断开联系其原型如下:HMENUDetach()返回值:如果函数调用成功则返回值被断开连接菜单句柄否则返回。()FromHandle调用该函数将获得一个指向与指定彩旦句柄相联系的CMenu对象指针其原型如下:StaticCMenu*PASCALFromHandle(HMENUhMenu)返回值:如果函数调用成功则返回指向CMenu对象的指针。使用AppWizard创建应用程序时AppWizard会为主窗口生成默认菜单资源当窗口被创建时该默认的菜单资源就会被自动载入由于MDI应用程序AppWizare会自动生成IDRMAINFRAME、IDRAPPTYPE菜单其中APP为应用程序名。用户可以像前几节所介绍的那样来定值默认菜单。用户单击鼠标右键弹出的菜单称为快捷菜单。快捷菜单为用户提供常用的命令列表可以加快操作速度。VCzh专门为使用快捷菜单提供了WMCONTEXTMENU消息用户只要通过ClassWizard在应用程序中添加该消息的处理函数即可。应用程序可能需要动态的创建改变菜单。这时用户可以定制另外的菜单资源并在应用程序中调用一些必要的函数将菜单载入并激活。在应用程序下动态使用菜单一般经过以下步骤:()编辑菜单资源。()为每个菜单项增加消息处理函数。()菜单载入应用程序中。用户还可以使用自绘制菜单。工具栏为用户提供了执行菜单命令的更为快捷、直观的方式。菜单是有CToolBar类进行管理的。形象地说CToolBar对象类似于包括一行位图按钮的控件栏。其中按钮的行为可以为下压式按钮、复选框或单选按钮。一般来说CToolBar对象是被嵌入框架窗口类中使用的。VC提供了两种创建工具栏的方法。在资源管理器中创建工具栏的步骤如下:()创建工具栏资源。()构造ToolBar对象。()调用Create或reateEx函数以创建Windows工具栏并将其与CToolBar相连接。()调用LoadToolBar函数以载入工具栏资源。此外还可以使用如下步骤在代码中直接创建:()创建CToolBar对象。()调用Create或CreateEx函数以创建Windows工具栏并将其与CToolBar相连接。()调用LoadBitmap函数以载入工具栏按钮位图。()调用SetButtons设置工具栏按钮的风格并将按钮和位图一一对应。使用SetButtonInfo函数将工具栏按钮的风格设置为TBSTYLEDROPDOWN即可创建下拉工具按钮。下面是处理缩放下拉OnDropDown函数VoidPainterViewOnDropDown(NMHDR*pNotifystruct,LRESULT*Presult){NMTOOLBAR*pNMToolBar=(NMTOOLBAR*)pNotifyStructCRectrectCMainFrame*pWnd=(CMainFrame*)AfxGetMainWnd()将工具栏按钮的矩形转换为屏幕坐标以便确定从何处打开下拉菜单pWnd>mwndToolBarGetToolBarCtrl()GetRect(pNmToolBar>iTtem,)recttop=rectbottonClientToScreen(pNMToolBar>hdrhwndFrom,rectTopLeft())If(pNMToolBar>iTtem==IDENLARGE){CMenumenuRCMenu*pPopupR从资源中载入菜单menuRLoadMenu(IDRZOOMPOPUP)pPopupR=menuRGetSubMenu()pPopupR>TrackPopupMenu(TPMLEFTALIGN|TPMLEFTBUTTON,rectleft,recttop,AfxGetMainWnd())}*pPesult=TBDDRETDEFAULT}此外还需要在类的头文件中手动添加如下代码:ONNOTIFY(TBNDROPDOWN,AFXIDWTOOLBAR,OnDropDown)下图为一个简单的菜单栏图Cmenu构造简单菜单栏第六章应用与实例常规Windows按钮控件只能使用灰色所以我们当然可以换一换颜色来改变的它的风格我们可以添加一些不同的色调来改变增添更多的色彩适当的改变无疑会为程序设计添加吸引力。在这里给大家介绍下彩色按钮的设计方法。正如我们强调的如果超出MFC所提供的功能就必须自己做一些工作。对于改变控件外观这点来说主要是利用自动绘制功能。西面就是设计一个CColorButton类使用该类能够创建出彩色按钮。首先我们需要考虑一下CColorButton类应该具有的功能。CColorButton应该为CButton的派生类这样它能够拥有Windows对按钮控件的常规支持。此外它应该能够改变按钮控件、按钮标签以及按钮文本的颜色。下面是CColorButton类定义:ClassCColorButton:publicCButton{DECLAREDYNAMIC(CColorButton)Public:CColorButton()Virtual~CColorButton()BOOLAttach(constUINTnTD,CWnd*pParent,constCOLORREFBGColor=RGB(,,),灰色按钮constCOLORREFBGColor=RGB()黑色文本constCOLORREFDisabledColor=RGB(,,),按钮被禁止时文本也为灰色constUINTnBevel=)protected:virtualvoidDrawItem(LPDRAWITEMSTRUCTlpDIS)voidDrawFrame(CDC*DC,CRectr,intInset)voidDrawLine(CDC*DC,longleft,longtop,longright,longbottom,COLORREFcolor)VoidDrawButtonText(CDC*DC,CRectR,constchar*Buf,COLORREFTextColor)COLORREFGetFGColor(){returnmfg}COLORREFGetFGColor(){returnmbg}COLORREFGetDisabledColor(){returnmdisabled}UINTGetBevel(){returnmbevel}private:COLORREFmfg,mbg,mdisabledUINTmbevel}大家可以看到类中提供了一个公有函数Attach,它用以设置自动绘制按钮的颜色通常这个函数应该在对话框OnInitDialog函数中调用。函数中nID参数为按钮控件的IDpParent参数为父窗口指针一般为this参数BGColor指定了按钮的背景颜色参数FGColor指定了按钮的前景色下面是Attach函数的原代码:BOOLCColorButtonAttach(constUINTNid,CWnd*pParent,constCOLORREFBGColor,constCOLORREFDisabledColor,constUINTnBevel){If(!SubclassDlgItem(nID,pParent))ReturnFALSEmfg=FGColormbg=GBGolormdisabled=DisabledColormbevel=nBevelReturnTRUE}实际上大家可能已经注意到这个函数的功能只是赋值。那么得到彩色按钮的工作是通过什么完成的呢?这就需要重载CButton基类的DrawItem函数这个函数可以完成用户定制的绘制操作。下面为DrawItem函数清单:VoidCColorButonDrawItem(LPDRAWITEMSTRUCTlpDIS){CDC*pDC=CDCFromHandle(lpDIS>hDC)UINTstate=lpDIS>itemStateCRectfocusRect,btnRectfocusRectCopyRect(lpDIS>rcItem)btnRectCopyRect(lpDIS>rcItem)将焦点矩形的大小稍小于边界forcusRectleft=focusRectright=focusRecttop=focusRectbotton=得到按钮标签ConstintbufSize=TCHARbufferbufSizeGetWindowText(buffer,bufSize)使用定制的方法绘制彩色按钮DrawFilledRect(pDC,btnRect,GetBGColor())DrawFrame(pDC,btnRect,GetBevel())根据按钮的状态重新绘制按钮例如绘制焦点矩形If(stateODSFOCUS){DrawFocusRect(lpDIS>hDC,(LPRECT)focusRect)If(stateODSSELECTED){DrawFilledRect(pDC,btnRect,GetBGColor())DrawFrame(pDC,BTNrECT,)DrawButtonText(pDC,btnRect,buffer,GetFGColor())DrawFocusRect(lpDIS>hDC,(LPRECT)focusRect)}}Elseif(stateODSDISABLED){disabledColor=bg^Xffffff反色DrawButtonText(pDC,btnRect,buffer,GetDisabledColor())}}使用彩色按钮管理类CColorButton类的使用非常简单步骤如下:()将colorBtnh和colorBtncpp文件加入工程中:或如果已经将CColorButton类加入了Gallery,则只需直接从其中插入即可。()在资源编辑器中创建按钮并设置其属性为OwnerDraw。()在应用程序的头文件中加入“#includecolorbtnh”,并加如下方式声明彩色按钮对象:CColorButtonmbtnlCColorButtonmbtn()在OnInitDialog函数中使用如下语句初始化颜色:VERIFY(mbtnCancelAttach(IDCANCEL,this,BLUE,WHITE,DKBLUE))这样定义是为了使用方便并且程序也更加直观,图为通过此类库改变颜色的实例小样。图改变按钮颜色这里以三角形按钮为例子从三角形派生出多边形。首先设计一个三角形按钮管理类:CTriangleButton。该类是CButton类派生类并且主要功能是重载的DrawItem函数中完成的。关于三角形的一个很重要的问题就是他的绘制方向。因此类需要能够改变按钮的方向功能下面为CTriangleButton类的定义:ClassCTriangleButton:publicCButton{Public:enumPOINTDIRECTION{POINTUP,POINTDOWN,POINTLEFT,POINTRIGHT}ConstructionPuplic:CTriangleButton()virtual~CTriangleButton()AttributesPublic:Protected:POINTDIRECTIONPointDirectionCRgnCurrentRegionOperationsPublic:OverridesClassWizardgeneratedvirtualfunctionoverrides{{AFXVIRTUAL(CTriangleButton)Public:VirtualvoidDrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct)Protected:VirtualvoidPreSubclassWindow()}}AFXVIRTUALPublic:BOOLSetWindowPos(constCWnd*pWndInsertAfter,intx,inty,intcx,intcy,UINTnFlags)Public:VoidSetDirection(POINTDIRECTIONPointDirection)POINTDIRECTIONGetDirection()Generatedmessagemapfunctionsprotected:{{AFXMSG(CTriangleButton)}}AFXMSGDECLAREMESSAGEMAP()}创建圆形按钮圆形是一种特殊的多边形原形按钮的创建方法也与多边形非常类似并且相对来说要简单一些以为它不涉及方向。首先设计一个圆形的按钮管理类:CRoundButton。该类是CButton类的派生类主要功能是在重载的DrawItem函数中完成的。CRoundButton类的定义与CTriangleButton类的定义基本一致我们主要注意的应该是绘制方法这就是DrawItem函数的实现下面似乎DrawItem函数源代码:VoidCRoundButtonDrawItem(LPDRAWITEMSTRUCTlpDrawItemStrauct){ASSERT(lpDrawItemStruct!=)CDC*pDC=CDCFromHandle(lpDrawItemStruct>hDC)CRectrect=lpDrawItemStruct>rcItemUINTstate=lpDrawItemStruct>itemStateUINTnRadius=GetStyle()IntnSavedDC=Pdc>SaveDC()pDC>SelectStockObject(BRUSH)PDC>FillSolidRect(rect,GetSysColor(COLORBTNFACE))如果按钮有焦点则绘制焦点圆形If((stateODSFOCUS)mbDrawDashedFocusCircle)DrawCircle(pDC,mptCentre,nRadius,RGB(,,))绘制按钮If(nStyleBSFLAT){DrawCircle(Pdc,mptCentre,nRadius,RGB(,,))DrawCircle(Pdc,mptCentre,nRadius,GetSysColor(COLORDHIGHLIGHT))}else{If((stateODSSELECTED)){DrawCircle(Pdc,mptCentre,nRadius,GetSysColor(COLORDDKSHADOW),GetSysColor(COLORDHIGHLIGHT))DrawCircle(pdc,mptCentre,nRadius,GetsysColor(COLORDHSHADOW),GetSysColor(COLORDDKSHADOW))GetSysColor(COLORDLIGHT),GetSysColor(COLORDSHADOW))}}绘制按钮文本CStringstrTextGetWindowText(strText)If(!strTextIsEmpty()){CRgnrgnRgnCreateEllipticRgn(mptCentrexnRadius,ynRadius,MptCentrexnRadius,mptCentreynRadius)Pdc>SelectClipRgn(rgn)CSizeExtent=pDC>GetTextExtent(strText)CPointpt=CPoint(mptCentrexExtencn,mptCentrexExtentcy)if(stateODSSELECTED)ptOffset(,)pDC>SetBkMode(TRANSPARENT)if(stateODSDISANLED)pDC>TextOut(ptx,pty,strText)pDC>SelectClipRgn()RgnDeleteObject()}If((stateODSFOCUS)mbDrawDashedFocusCircle)DrawCircle(Pdc,mptCentre,nRadius,RGB(,,),TRUEPdc>RestoreDC(nSavedDC)}大家在使用一些软件时会看到一种特殊的球型控件不过在VC中并没有直接提供类似的控件所以想要设计如此就必须自己手动实现。下面给大家介绍下如果利用按钮实现此类选项。首先从CButton类中派生一个CSphereButton类用于管理球形按钮的创建可以想到球型按钮的创建。可以预料球形按钮依然要通过重载DrawItem函数实现。这里需要提醒大家注意的是哲理多在区域实际是原来的按钮。当按钮状态变化时文本本身可以变化但是其下的按钮区域却不能变化因此必须预先先设置窗口区域。同时当单击文本所在位置按钮不能作出响应而只有当单击球型区域时按钮和文本才能响应。这必须对鼠标单击的消息响应函数中完成。下面为CSphereButton类的定义:ClassCSphereButton:publicCButton{ConstructionPublic:CCSphereButton(boolbDepressed=false,boolbCenterAlign=true)AttributesPublic:BoolMouseWverItem()OperationsPublic:Protected:COLORREFGetColor(doubleaAngle,COLORREFcrBright,COLORREFcrDark)VoidDrawCircle(CDC*pDC,CPointp,LONGlRadius,COLORREFcrBright,COLORREFcrDark)OverridesClassWizardgeneratedvirtualfunctionoverrides{{AFXVIRTUAL(CBounceButton)Public:VirtualvoidDrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct)Protected:VirtualvoidpreSubclassWindow()}}AFXVIRTUALImplementationPublic:IntmnMarginIntmnRadiusPublic:BoolDepress(boolDown)BoolIsDepressed()VoidSetCheck(intnCheck)Virtual~CBounceButton()GeneratedmessagemapfunctionsProtected:{{AFXMSG(CSphereButton)AfxmsgvoidOnKillFocus(CWnd*pNewWnd)AfxmsgvoidOnLButtonDblClk(UINTnFlags,CPointpoint)AfxmsgvoidOnLButtonUp(UINTnFlags,CPointpoint)AfxmsgvoidOnLButtonDown(UINTnFlags,CPointpoint)AfxmsgvoinOnMouseMove(UINTnFlags,CPointpoint)}}AFXMSGVoidOnMouseEnter(void)VoidOnMouseLeave(void)DECLAREMESSAGEMAP()Private:CRgnmbtnRgnCPointmptCenterCRectmtextRectCFontmBoldFontBoolmbMouseOverBoolmbDepressedBoolmbMouseTrackingBoolmbLMouseButtonDownBoolmbDrawFocusRectBoolmbCenterAlign}类中定义了许多成员变量它们主要用于识别鼠标状态和按钮状态大家只要立即主要功能实现函数它们的含义也就自然懂了。接下来给大家介绍的是在改变颜色形状基础上创建一个高级按钮管理类。该类能够复杂的形状动态创建按钮。可以想象使用创建多边形按钮的方法创建使用箭头形状作为按钮。这时我们可以使用路径CRgn这个非常有用但是经常被忽略的工具这里给大家介绍支持动态创建CAdvButton类的定义:ClassCAdvButton:publicCButton{Public:ClassWizardgeneratedvirtualfunctionoverrides{{AFXVIRTUAL(CAdvButton)Public:VirtualvoidDrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct)Protected:VirtualvoidPreSubclassWindow()VirtualLRESULTDefWindowProc(UINTmessage,WPARAMwParm,LPARAMlParam)}}AFXVIRTUALProtected:{{AFXMSG(GAdvButton)AfxmsgBOOLOnEraseBkgnd(CDC*pDC)AfxmsgvoidOnMouseMove(UINTnFlags,CPointpoint)AfxmsgintOnCreate(LPCREATESTRUCTlpCreatesSruct)AfxmsgvoidOnLButtonDown(UINTnFlags,CPointpoint)AfxmsgvoidOnLButtonUp(UINTnFlags,CPointpoint)}}AFXMSGDECLAREMESSAGEMAP()Private:UINTmnBorder高亮显示时的边界宽度LONGmlfEscapement按钮标签的方向CPointmCenterPoint按钮标签的中点BOOLmbMouseDown表示按下鼠标BOOLmbCapture表示鼠标已经捕捉到了该按钮HRGNmhRgn指定区域BOOLmhNeedBitmaps表示是否需要重要重构状态位图VoidDrawButton(CDC*Pdc,crECT*pRect,UINTstate)绘制按钮VoidPrepareStateBitmaps(CDC*Pdc,CRect*pRect)准备按钮位图BOOLHitTest(CPointpoint)Protected:VoidPrepareNormalState(CDC*PDC,CDC*pMenDC,CRect*pPect)准备状态位图VoidPrepareSelectedState(CDC*Pdc,CDC*pMemDC,CRect*pRect)VoidPrepareDisabledState(CDC*pDC,CDC*pMemDC,CRect*pRect)VoidDrawButtonCaption(HDCHdc,CRect*pRect,BoolbEnabled,BOOLbSunken)Public:CAdvButton()Virtual~CAdvButton()destructorBOOLCreate(LPCTSTRlpszCaption,DWORDdwStyle,constCPointpoint,constHRGNhRgn,CWnd*pParentWnd,WINTNid)创建具有默认边界和颜色的按钮BOOLCreate(LPCTSTRlpszCaption,DWORDdwStyle,constCPointpoint,constHRGNhRgn,CWnd*pParentWnd,UINTNid,COLORREFcolor)创建具有“停滞”选择很选中颜色的按钮BOOLCreate(LPCTSTRlpszCaption,DWORDdwStyle,constCPointpoint,constHRGNhRgn,CWnd*pParentWnd,UINTNid,UINTnBorder,COLORREFNcolor,COLORREFsColor,COLORREFhColor,COLORREFdColor)创建具有多种风格的按钮BOOLCreate(LPCTSTRlpszCaption,DWORDdwStyle,constCPintpoint,constHRGNhRgn,CWnd*pParentWnd,UINTNid,UINTnBorder,LONGlfEscapement,COLORREFnColor,COLORREFsColor,COLORREFhColor,COLORREFdColor)上面函数另一种方式}下面介绍下动态创建CAdvButton类中提供了个版本的Create函数它们分别用于创建不同风格和颜色的按钮。这里介绍的是Create函数的源代码:BOOLCAdvButtonCreate(LPCTSTRlpszCaption,DWORDdwStyle,constCPointpoint,ConstHRGNhRgn,CWnd*pParentWnd,UINTNid){使用区域参数初始化成员变量DeleteObject(mhRgn)MhRgn=CreateRetRgn(,,,)Crectbox(,,,)If(mhRgn!=)CombineRgn(mhRgn,hRgn,,RGNCOPY)确保区域的边界矩形左上角坐标为()GetRgnBox(mhRgn,box)offsetRgn(mhRgn,boxleft,boxtop)GetRgnBox(mhRgn,box)设置按钮标签输出位置MCenterPoint=CPoint(boxleftboxWidth(),boxtopboxHeight())Box,offsetRect(point)ReturnCButtonCreate(lpszCaption,dwStyle,box,pParentWnd,nID)}其中lpszCapiton参数指定了按钮文本dwStyle参数指定了标准按钮风格point参数指定了按钮空间在父窗口中的位置(图)hRgn参数指定了按钮的外型pParentWnd参数指定了父窗口的句柄。使用CAdvButton类的方法非常简单只要在应用程序中声明CAdvButton对象然后创建合适的区域对象并传递给CAdvButton对象的Create函数使用区域对象能够很容易地创建出复杂的按钮形状。这与CRng类的强大功能是分不开的。通过按钮控件可以作出很多种形状的按钮如图。图各种风格的按钮大家在设计应用程序或使用应用程序时可能遇到过界面上有很多需要输入数据的编辑框情况。有时可能出现这样的情况:当用户在某个编辑框中输入数据时需要切换到另一个应用程序处理。而当用户再切换回原来入口时需要费心确定刚才在哪个编辑框中输入数据因为此时所有的编辑控件看起来都是一并没有明显的变化。如果来解决这个问题我们可以考虑表现试图控件等采用的方法:当父窗口失去焦点后又得到依然会保持它的高亮状态。对于编辑控件当然不必一定使用不同的背景色最好的办法就是当编辑失去“高亮”同时也能确定输入焦点编辑框。下面创建CBorderEdit类调用函数中OnSetFocus和OnKillFocus函数代码:OnSetFocus()函数VoidCBorderEditOnSetFocus(CWnd*pOldWnd){CEditOnSetFocus(pOldWnd)ModifyStyleEx(,WSEXDLGMODALFRAME|WSEXWINDOWENGE,SWPFRAMECHANGED)}OnKillFocus函数VoidCBorderEditOnKillFocus(CWnd*pNewWnd){CEditOnKillFocus(pNewWnd)ModifyStyleEx(WSEXDLGMODALFRAME|WSEXWINDOWEDGE,,SWPFRAMECHANGED)}可能有的人还喜欢那种平坦的外观当鼠标经过上面就变成了D外观的空间这种可以使用创建鼠标敏感的编辑控件。编辑框的用途多种多样其中可以接受多种数据的输入。但是这往往也会带来一些问题比如限制编辑框中只能输入双精度数值可能是最容易实现的一种方式了。按照编辑的基本原则首先应该创建一个用于管理双精度数值编辑框的类CNumEdit,当然它应该是CEdit的派生类。下面是键盘编程的一些知识。()扫描码和虚拟码键盘上的每一个键都对应着唯一的标识值既扫描码。当用户按下或释放一个按键时都会产生相应的扫描码。()输入焦点Windows操作系统中键盘一般由所有的应用程序共享不过也有例外。()系统键和非系统键系统键一般是由输入键和Alt键组合产生这种输入一般由Windows内部直接处理而应用程序则通常不需考虑。如果用户希望在应用程序中处理系统键则在处理完毕后应该调用DefWindowProc函数以恢复Windows对其的默认处理。()键盘影射函数当用户按下一个键或组合键时Windows会将WMKEYDOWN和WMKEYUP消息发送给具有输入焦点的应用程序窗口进行处理。在使用列表框、组合框、列表视图等控件时经常需要对其中的条目文本加以修改。常规的方法是在控件边添加修改按钮。首先应该确定一个修改完成标志这里将其设置成Enter键。一个解决方法可以是这样:向父窗口发送一个消息但其功能仅仅是告诉父窗口“用户以完成修改了字符串”。所谓的语法特色就是将关键字以不同颜色显示这通常用在代码编辑器中。通过以上各类控件的学习我们应用他们进行实际操作下面我们使用MFC在程序中添加一个颜色拾取的按钮经过我们以上介绍的内容摸索找到一种比较简单的办法并且很方便重用。实现如下:()从CButton类中派生一个自己的类classCButtonColor:publicCbutton()创建一个私有的成员函变量用于保存按钮背景颜色private:COLORREFmbgColor()添加两个成员函数用于设置按钮背景颜色和获得按钮背景颜色COLORREFCButtonColor::GetBGColor(){returnmbgColor}BOOLCButtonColor::SetBGColor(COLORREFbgColor){mbgColor=bgColorInvalidateRect()returnTRUE}()添加一个虚拟成员函数:virtualvoidDrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct)每次按钮重画时都会调用这个函数。voidCButtonColor::DrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct){TODO:AddyourcodetodrawthespecifieditemCDC*pDC=CDC::FromHandle(lpDrawItemStruct>hDC)画按钮背景色CBrushcbcbCreateSolidBrush(GetBGColor())CRectrc=lpDrawItemStruct>rcItempDC>FillRect(rc,cb)画按钮边框CBrushcbFramecbFrameCreateSolidBrush(RGB(,,))pDC>FrameRect(rc,cbFrame)}()在对话框中使用时添加头文件#include"ButtonColorh"()添加一个按钮控件设置按钮的属性为:Properties>styles>Ownerdraw()添加按钮响应函数voidCTestBCDlg::OnButton(){TODO:AddyourcontrolnotificationhandlercodehereCColorDialogdlgif(dlgDoModal()!=IDOK){return}COLORREFclr=dlgGetColor()mbuttonSetBGColor(clr)}运行界面:图运行界面第七章总结这篇论文主要向大家介绍应用程序界面设计原则、Windows编程机制以及VC应用程序框架的结构和功能。由于现在VC为拥护所做的工作越来越多造成用户对Windows编程的机制的了解反而越来越少。只有充分理解Windows应用程序的结构和运行机制才能真正掌握Windows编程。本文主要关注应用程序界面的设计而如果希望设计出独特而有创意的界面那么就必须对Windows内部机制有一个较为深入的理解。VC图形开发与应用是当今比较热门的话题希望通过这篇论文可以给更多喜欢图形界面开发的朋友以启示我是也本着学习的态度和大家一起分享特别是Windows界面中很多重要元素的经典使用给我们以很大的启示,对于每个喜欢爱好图形界面开发的朋友们同学们以很好的借鉴和帮助,很多重要的经典分析可以很容易地让大家掌握界面设计的原则和方法,并对以后的编程技术有更高的理解。VC作为一款经典工具给我们以更广阔的探索空间。在本文完成之际我由衷地感谢关怀、教诲、帮助、支持和鼓励我完成学业老师、朋友和亲人。首先我要感谢我的导师范老师几个月来她在学习、科研上一直对我悉心指导严格要求、热情鼓励为我创造了很多锻炼提高的机会。范老师洞察全局、高屋建瓴为我的论文的顺利完成指出了很好的方向,范老师渊博的知识、宽广无私的胸怀、夜以继日的工作态度、对事业的执著追求、诲人不倦的教师风范和对问题的敏锐观察力都将使我毕生受益。在此我谨向敬爱的导师致以最诚挚的谢意!谭浩强编著C语言程序设计清华大学出版社年出版徐孝凯编著C程序设计教程清华科学出版社年月出版NellDale编著ProgramminginC北京高等教育出版社年月出版李春葆编著C程序设计习题集北京清华大学出版社年出版张海藩面向对象程序设计实用教程北京清华大学出版社年出版沈佩娟数据库管理及应用开发清华大学出版社年月出版美DavisChapman编学用VisualC清华大学出版社年出版郑阿奇VisualC实用教程电子工业出版社年出版常晋义VisualC程序设计简明教程中国电力出版社年出版柴欣CC程序设计河北大学出版社年出版潘爱民王国印译VC技术内幕清华大学出版社年出版徐晓刚编著VC入门与提高清华大学出版社年出版刘刀刚编著VC实践与提高数据库篇中国铁路出版社年出版JohnESwanke著VisualMFC编程实例机械工业出版社年出版侯俊杰编著深入浅出MFC华中科技大学出版社年出版丁宝康主编数据库原理经济科学出版社年出版陆丽娜主编软件工程经济科学出版社年出版健莲科技译掌握标准C类人民邮电出版社年出版萨师煊数据库系统概论北京高等教育出版社出版王浩精通VisualC上海科学技术出版年出版VCGRAPHICALINTERFACEDEVELOPMENTANDAPPLICATIONWANGRuiAbstractWiththecontinuousdevelopmentofdevelopmenttools,programmerscanbefreetoplayfortheincreasinglysmallspaceThemostintuitiveperformancethroughVisualCdevelopmentofthecharacteristicsofitshighlygraphicalinterfaceSopersonalitycharacteristicstothepreparationofagraphicalinterfacetospendmoreeffortsWindowsinterfacehereonthemostimportantcomponentelementsrespectively,wereintroducedFocusonVCgraphicaluserinterfaceintheapplication,focusingonhowtouseVCapplicationstoachievethesupportofgraphicsinterfacedevelopmentThefulltextoftheapplicationdevelopmentofcrosssectionofdifferentthemesinpostingcontentsothatwequicklygraspgraphicaluserinterfaceprogrammingKeywordsVisualCGraphicalinterfaceInterface论文评阅人意见该生在《VC图形界面开发与应用》文中以图行界面基础开发为主线讨论了图形界面开发与应用的相关方法。选题恰当论点突出论述较为充分。同意参加毕业论文答辩。论文评阅人意见该同学在《VC图形界面开发与应用》一文中对Windos图形截面各种类库进行说明讨论以Windows图形界面为例说明图形界面开发基础的相关问题。文章论点明确层次分明结构比较严谨。该生毕业论文已达到学士论文毕业标准同意参加毕业论文答辩指导教师评语页该同学在广泛阅读国内外各种相关书籍的基础上深刻讨论当今图形界面程序员发展趋势。通过VisualC开发的极具其特色的图形界面。从Windows图形界面为基础对Windows界面中最重要的组成元素分别进行了介绍。侧重VC在图形用户界面方面的应用重点介绍如何利用VC实现应用系统的图形拥护界面开发。全文按应用程序截面开发的不同主题来编排内容使大家迅速掌握图形用户界面编程技术。论文内容丰富、逻辑性强、结构严谨深刻理解论文题目观点明确并且具有一定的应用价值。论据充分能很好的证明论文的观点。论文行文流畅思路清晰格式正确。参考文献丰富具有较高的理论价值与参考价值。该生毕业论文已达到学士论文毕业标准同意参加毕业论文答辩。本科毕业论文(设计)答辩过程记录院系计算机科学与信息工程专业计算机科学与技术年级级答辩人姓名王锐学号毕业论文(设计)题目VC图形界面开发与应用毕业论文(设计)答辩过程记录:答辩是否通过:通过()未通过()记录员答辩小组组长签字年月日年月日本科毕业论文(设计)答辩登记表院(系):计算机科学与信息工程专业:计算机科学与技术年级:级论文(设计)题目:VC图形界面开发与应用答辩人:王锐学号:评阅人:指导教师:范雪琴论文(设计)等级:答辩小组成员:答辩小组意见:秘书签名:年月日论文(设计)答辩是否通过:通过()未通过()论文(设计)最终等级:答辩小组组长签名:答辩委员会主席签名:校级优秀毕业论文(设计)推荐表所属院(系):填表日期:年月日论文作者姓名性别专业毕业论文(设计)总指导教师周数姓名年龄专业技术职务所在单位毕业论文(设计)题目毕业论文(设计)主要涉及研究方向毕业论文(设计)选题依据及背景院系中期检查情况毕业论文(设计)的水平与特色毕业论文(设计)有何实验、实践或实习基础毕业论文(设计)期间研读书目指导教师评语及推荐意见指导教师签字:年月日指导教师对申报材料真实性的意见指导教师签字:年月日院系推荐意见(公章)年月日学校主管部门意见(公章)年月

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/100

VC++图形界面开发与应用

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利