欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    VC基于菜单与工具栏的程序创建.ppt

    • 资源ID:5074251       资源大小:329.05KB        全文页数:60页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    VC基于菜单与工具栏的程序创建.ppt

    菜单,菜单是重要的用户界面对象,用户通常从菜单栏中选择命令来使用应用程序。Windows98支持三种类型的菜单:(1)菜单栏(主菜单):菜单栏横放在窗口的顶部(2)弹出式子菜单:弹出式菜单是从主菜单下弹出的菜单(3)上下文菜单:通过鼠标右键弹出的自由浮动菜单,1.菜单的机制与功能,菜单可以用多种方法创建,一般存在在资源脚本中,在程序运行时才调入,就像其他资源一样。1.1菜单消息 菜单被选中时发送消息给Windows,再由Windows传送给应用程序的消息映像。Win32API提供4个菜单消息,但在MFC消息映像中,只有两个菜单消息WM_COMMAND和ON_UPDATE_COMMAND_UI。MFC自动处理其他两个消息。,(1)处理WM_COMMAND消息用户选中了菜单项会产生WM_COMMAND消息MFC的框架窗口类要确保每一个菜单项都有WM_COMMAND消息的处理函数,对缺少处理函数的菜单项,MFC使其变灰。消息映射ON_COMMAND项采用以下形式:ON_COMMAND(MenuID,ClassMethod)MenuID是菜单项的标识符,ClassMethod是处理菜单项WM_COMMAND消息定义的方法(命令处理函数)。,(2)处理UPDATE_COMMAND_UI消息 在许多情况下菜单项可能有多个状态。例如某一个时刻可用(正常),而某一个时刻不可用(菜单变灰);菜单项可以加注标记,以表明被选中或未被选中。UPDATE_COMMAND_UI是MFC所特有的,如果想根据应用程序的当前状态激活或者使菜单项无效,或者在程序运行的某一刻反映菜单项的可用性,就要由自己处理这条消息。此消息和Win32 API的WM_INITPOPUPMENU消息相对应。ON_UPDATE_COMMAND_UI项采用以下形式:ON_UPDATE_COMMAND_UI(MenuID,ClassMethod)MenuID是菜单项的标识符,ClassMethod是处理菜单UPDATE_COMMAND_UI消息定义的方法(更新处理函数),该消息值适合弹出式菜单项的菜单项,而对于顶层菜单项则不适用。例如不能使用该消息来禁止“文件”菜单项。如果菜单项有更新处理函数,那么它被调用进行更新;如果没有,那么框架检查命令处理函数是否存在,若不存在,则使菜单变灰。必须提供一个菜单处理函数或更新函数。,1.2 基于菜单栏的程序设计1 Menuitem程序为一个单文档的应用程序,程序启动后,单击“graph”菜单中的“rectangle”,则在当前的客户区中显示一个矩形;单击“graph”菜单中的“Ellipse”,则在当前的客户区中显示一个椭圆。(1)利用AppWizard,生成一个MFC的单文档工程“Menuitem”。(2)单击“Workspace”窗口的“ResourceView”标签,找到“Menu”项,双击“ID_MAINFRAME”,对菜单资源进行编辑。用右键单击菜单项最右边的虚线框,在弹出式菜单中选择“Propertis”命令,在“Menu Item Properties”窗体中在“Caption”一栏中输入“graph”,用同样方法,设计其下的两个菜单项:第一个子菜单项,“ID”为“ID_GRAPH_REC”,“Caption”为“Rectangle”。第二个子菜单项,“ID”为“ID_GRAPH_ELLIPSE”,“Caption”为“Ellipse”。(3)在“CMenuitemView”类中加入一些数据成员:public:bool m_rectangle;bool m_ellipse;COLORREF m_crbk;,(4)编辑“MenuitemView.cpp”文件中的构造函数,初始化数据成员,加入下面代码:CMenuitemView:CMenuitemView()m_rectangle=TRUE;m_ellipse=FALSE;m_crbk=RGB(255,0,0);(5)利用ClassWizard为视图类加入命令消息控制函数及更新命令UI消息控制函数。,(6)编辑“MenuitemView.cpp”文件里的菜单命令控制函数。OnGraphRec函数用m_crbk颜色来填充客户区矩形,并设置布尔型变量m_rectangle、m_ellipse的值。,Void CMenuitemView:OnGraphRec()CClientDC dc(this);CPen newpen,*oldpen;newpen.CreatePen(PS_SOLID,2,RGB(255,255,0);oldpen=dc.SelectObject(,对应的更新命令UI控制函数OnUpdateGraphRec根据变量m_rectangle的值来控制菜单的有效性状态,决定菜单项“rectangle”什么时候有效。void CMenuitemView:OnUpdateGraphRec(CCmdUI*pCmdUI)pCmdUI-Enable(m_rectangle);,OnGraphEllipse函数用m_crbk颜色来填充客户区,并设置布尔型变量m_ellipse、m_rectangle的值。Void CMenuitemView:OnGraphEllipse()CClientDC dc(this);CPen newpen,*oldpen;newpen.CreatePen(PS_SOLID,2,RGB(255,255,0);oldpen=dc.SelectObject(,m_rectangle=TRUE;m_ellipse=FALSE;dc.SelectObject(pOldBrush);dc.SelectObject(oldpen);delete pNewBrush;,对应的更新命令UI控制函数OnUpdateGraphEllipse,根据变量m_ellipse的值来控制菜单的有效性状态,决定菜单项“ellipse”什么时候有效void CMenuitemView:OnUpdateGraphEllipse(CCmdUI*pCmdUI)pCmdUI-Enable(m_ellipse);,1.3菜单消息的处理路径,MFC中拥有菜单的框架窗口不必处理每一个菜单项的消息;相反,菜单消息可由拥有这个菜单命令资源的其他对象来处理。例如,CCmdTarget派生类对象(如窗口和视窗)以及应用对象(由CWinApp派生),对于支持文档/视窗架构的应用程序,文档对象和视窗对象也能处理菜单消息。尽管任何由CCmdTarget派生的类对象都能接受菜单消息,但并不是所有这类对象都可以同时接收到菜单消息,菜单消息是按照一定的路径传送的,下表列出了当MFC发送命令消息给非文档/视窗结构的应用,单文档应用以及多文档应用时,查找消息映射表的次序。,查找消息映射表的次序,应用程序收到一个菜单命令时,它按照一定的顺序传递该命令,该顺序依次为:视窗类、文档类、主框架类和应用类。首先是视窗类获得处理该命令的机会,然后是文档类,再接着是主框架类,最后是应用类。如果某个类没有相应的菜单命令,则该命令返回给上一个类处理,直到返回到应用类。如果其中有一个类处理了该命令,则直接返回系统,其他类就没有机会再处理了。,1.4 弹出式菜单,浮动的弹出式菜单是一种新的用户界面设计风格。用户按下鼠标右键,然后就会弹出一个浮动菜单。用资源编辑器和MFC库的CMenu:TrackPopupMenu函数可以创建弹出式菜单,该函数的原型:BOOL TrackPopupMenu(UNIT nFlags,int x,int y,CWnd*pWnd,LPCRECT lpRct=NULL);其中参数nFlags为弹出式菜单的标志,例如若其值为TPM_RIGHTALIGN,表示创建的弹出式浮动菜单,其右边界位于X处;若其值为TPM_LEFTALIGN,表示其左边界位于X处,参数X与Y表示屏幕坐标。,(1)浮动菜单的创建,创建菜单对象需要两步。第一步,分配一个C+对象;第二部,初始化该对象。下面为创建并初始化一个CMenu类对象的典型代码:/为浮动菜单申请一个对象空间CMenu pContexMenu;/初始化 CMenu对象pContexMenu.LoadMenu(IDR_MENU1);,(2)浮动菜单的显示,浮动菜单创建和初始化后,在用户单击了鼠标右键时显示。下面的WM_RBUTTONDOWN消息处理函数就可以显示出上面例子中的浮动菜单。void MyMainFrame:OnRButtonDown(UNIT nFlags,CPoint point)/首先将客户区坐标转换成屏幕坐标 ClientToScreen(,1.5弹出式菜单设计,按照如下步骤创建弹出式菜单。(1)选择“Insert/Resource”菜单命令,将弹出“Insert Resource”窗体,选中“Menu”选项,然后单击“New”,将产生一个空的“ID_MENU1”菜单。(2)双击选择“IDR_MAINFRAME”菜单,然后右键单击“graph”菜单项,在弹出式菜单中选择“Copy”命令。(3)双击选择“ID_MENU1”菜单,右键单击第一个空的菜单,在弹出菜单中选择“Paste”命令,将产生一个菜单项。,(4)用ClassWizard在视图类中加入WM_RBUTTONDOWN消息控制函数,然后加入程序代码如下:void CTest1View:OnRButtonDown(UINT nFlags,CPoint point)CMenu menu;menu.LoadMenu(IDR_MENU1);ClientToScreen(5)编译运行程序,在运行的窗口中,右键单击,即可显示出弹出式菜单,并执行相应的命令。,2.CMenu类,2.1CMenu类简介 MFC是靠CMenu来管理菜单的。CMenu对象可以代表每个Windows菜单,其中包括顶级菜单项以及与之相关联的弹出式菜单。当窗口的Create或LoadFrame函数被调用的时候,菜单的资源是直接附加到框架窗口的,CWnd成员函数GetMenu返回一个临时CMenu指针。利用该指针,可以自由地访问和更新菜单对象。ID_MAINFRAME是标识资源脚本中的初始菜单。如果想在应用程序启动之后想要第二个菜单,可以使用菜单编辑器创建一个具有自己的资源ID的菜单资源。然后在程序中构造一个CMenu对象,使用CWnd:LoadMenu函数从这个资源中加载菜单,调用CWnd:SetMenu函数将新菜单附加到框架窗口。然后调用Detach成员函数来分离该对象的HMENU句柄,这样当CMenu对象超出范围的时候,菜单就不会被破坏了。,菜单对象实际上是由一个子菜单的嵌套结构组成的。可以使用GetSubMenu成员函数来获得指向包含在主CMenu对象的弹出式菜单的指针。CMenu:GetMenuString函数返回对应于基于0的索引或命令ID的菜单项字符串。如果使用的是命令ID选项,那么菜单连同任何子菜单一起被搜索。,2.2动态改变菜单,有时需要在运行时为响应程序状态的改变而频繁地动态增加或删除菜单项。在运行时为响应出现的状态而改变的菜单项称为动态菜单。动态菜单的好处是它给用户提供了一套适合于程序当前状态的选项列表。,(1)获得菜单的指针 增加或删除一个菜单时,需要菜单的指针。为获得菜单的指针,应使用GetMenu()函数。CMenu*CWnd:GetMenu()const 如果CWnd对象没有菜单,则返回值为NULL。如果CWnd对象是一个子窗口,则返回值是无意义的。该函数返回的指针是临时性的,不要把它保存下来长期使用。给出窗口的主菜单的指针后,就可以使用GetSubMenu()函数来简单地获得包含在主菜单内的弹出式子菜单的指针。该函数的原型如下:,CMenu*GetSubMenu(int nPos)const;该函数用于获得一个弹出式菜单的CMenu对象的指针。若指定位置有一个弹出式菜单,则返回一个指向CMenu对象的指针,该对象的m_hMenu成员包含弹出菜单的指针;否则返回NULL。若CMenu对象不存在,则生成一个模板,CMenu指针将被保留。在获得菜单的指针后,就可以为菜单添加或删除菜单项了。,(2)给菜单中增加菜单项 为了在运行时给菜单增加菜单项,应当使用InsertMenu()函数,该函数的原型如下:BOOL InsertMenu(UINT nPosition,UNIT nFlags,UNIT nIDNewItem=0,LPCTSTR lpszNewItem=NULL);BOOL InsertMenu(UNIT nPosition,NUIT nFlags,UNIT nIDNewItem,const CBitmap*pBmp);该函数用于向一个菜单中nPosition指定的位置处插入一个菜单,并把其他项向后移。其应用程序可以用对nFlags赋值的办法设置此菜单项的状态。nIDNewItem指定插入菜单项的ID值。LpszNewItem指定菜单项的显示文本 只要当窗口中的菜单发生了变化(无论窗口是否显示)时,就要调用CWnd:DrawMenuBar()函数。第二种形式的InsertMenu()函数的pBmp指定图形菜单项所用的位图。,(3)删除菜单项 为了删除菜单项,应当使用DeleteMenu()函数,该函数原型如下所示:BOOL DeleteMenu(UNIT nPosition,UNIT nFlags);若菜单项有一隶属弹出式菜单时,DeleteMenu将破坏该弹出式菜单,释放由此弹出菜单所占用的内存。,(4)获得菜单的菜单项数 在动态处理菜单时,需要频繁地知道一个菜单中有多少菜单项。为了获得菜单项的数目,应当使用如下的GetmenuItemCont()函数。CMenu:GetMenuItemCount UINT GetMenuItemCount()const该函数确定顶层或弹出式菜单项的项数。,(5)使菜单项有效或无效 有时候,一些菜单项只适用于某些状态,而不适用于其他的状态。在这种情况下,需要使之暂时无效,之后再使其有效,为此可使用EnableMenuItem()函数。CMenu:EnableMenuItemUNIT EnableMenuItem(UNIT nIDEnableItem,UNIT nEnable);该函数可以设置菜单项,使菜单项可用、禁止或变灰。nIDEnableItem确定要改动的菜单项。该函数调用成功时,返回先前的状态(MF_DISSABLED、MF_ENABLE或MF_GRAYED),调用失败时返回-1。,2.3动态菜单设计,菜单既可以从资源模板中加载,也可以在程序中通过动态方式进行创建,本节将通过在graph菜单项下动态增加三个子菜单项,来改变显示区的背景颜色,具体方法如下:(1)选择菜单项“ViewResource SymbolsNew”,在“Name”文本编辑框中输入“ID_COLOR1”,系统自动子在“Value”框中加入一个值,单击“OK”,关闭“New Symbol”。用同样方法,加入“ID_COLOR2,ID_COLOR3”的定义。(2)在视图类中加入OnInitialUpdate函数,加入程序代码如下:,CMenu*pColorMenu=NULL;CMenu*pTopMenu=AfxGetMainWnd()-GetMenu();int iPos;iPos=pTopMenu-GetMenuItemCount()-1;pColorMenu=pTopMenu-GetSubMenu(iPos);pColorMenu-AppendMenu(MF_STRING,ID_COLOR1,“White”);pColorMenu-AppendMenu(MF_STRING,ID_COLOR2,“Purple”);pColorMenu-AppendMenu(MF_STRING,ID_COLOR3,“Blue”);该程序代码首先获得指向框架窗口菜单的指针,然后获得指向graph菜单的指针,然后通过AppendMenu()函数来增加3个菜单项。,(3)用ClassWizard在视图中加入“OnCmdMsg”,然后加入程序代码如下:BOOL CTest1View:OnCmdMsg(UINT nID,int nCode,void*pExtra,AFX_CMDHANDLERINFO*pHandlerInfo)if(pHandlerInfo=NULL)if(nID=ID_COLOR1)if(nCode=CN_COMMAND)DoSelectColor(0);else if(nCode=CN_UPDATE_COMMAND_UI)DoUpdateSelectColor(0,(CCmdUI*)pExtra);return TRUE;,else if(nID=ID_COLOR2)if(nCode=CN_COMMAND)DoSelectColor(1);else if(nCode=CN_UPDATE_COMMAND_UI)DoUpdateSelectColor(1,(CCmdUI*)pExtra);return TRUE;else if(nID=ID_COLOR3)if(nCode=CN_COMMAND)DoSelectColor(2);else if(nCode=CN_UPDATE_COMMAND_UI)DoUpdateSelectColor(2,(CCmdUI*)pExtra);return TRUE;return CView:OnCmdMsg(nID,nCod,pExtra,pHandlerInfo);,该函数用于传递3个菜单命令的WM_COMMAND和UPDATE_COMMAND_UI消息到函数DoSelectColor(i),DoUpdateSelectColor(i,(CCmdUI*)pExtra)。(6)右键点“CmenuitemView”类,在弹出的窗口里选择“Add Menmber Function”菜单项,在“Add Menmber Function”窗口的“Function Type”框中输入“void”,在“Function Declaration”框中输入“DoSelectColor(int iColor)”,其余接受缺省设置。用同样方式设置DoUpdateSelectColor(int iColor,CCmdUI*pCmdUI)函数。设置完成后,加入下面代码。,Void CMenuitemView:DoSelectColor(int iColor)ASSERT(iColor=0函数设置成员变量m_crbk的值,并调用相应函数显示。,Void CMenuitemView:DoUpdateSelectColor(int iColor,CCmdUI*pCmdUI)ASSERT(iColor=0该函数更新相应菜单项设置。(7)编译运行该应用程序,然后分别测试3个颜色菜单项是否满足要求。,工具栏,工具栏是一系列工具按钮的组合,借助它们可以提高用户的工作效率。VC6.0系统保存了每个工具栏相应的位图,其中包括所有按钮的图像,它们具有相同的尺寸(高15像素,宽16像素),它们在位图中的排列次序与屏幕上按钮在工具栏上的次序相同。,1 使用工具栏编辑器,选择菜单“文件”“打开工作区”,将前面的单文档应用程序调入。在项目工作区窗口中选择ResourceView页面,双击“Toolbar”项中的IDR_MAINFRAME则工具栏编辑器出现在主界面的右边。,空按钮,图形工具箱,颜色工具箱,1 使用工具栏编辑器,1.1 创建一个新的工具栏按钮 在新建的工具栏中,最右端总有一个空按钮,双击该按钮弹出其属性对话框,在ID框中输入其标识符名称,其右端又出现一个新的空按钮。单击按钮,在资源编辑器的工具按钮设计窗口可以进行工具按钮的位图绘制。,1.2 移动一个按钮 在工具栏中移动一个按钮,用鼠标左键点中它并拖动至相应位置即可。如果用户拖动它离开工具栏位置,则此按钮从工具栏中消失。若在移动一个按钮的同时,按下Ctrl键,则在新位置复制一个按钮,新位置可以是同一个工具栏中的其他位置,也可在不同的工具栏中。,1 使用工具栏编辑器,1.3 删除一个按钮 将选取中的按钮拖离工具栏,则该按钮就消失了。但若选中按钮后,单击Delete键并不能删除一个按钮,只是将按钮中的图形全部以背景色填充。,1 使用工具栏编辑器,1.4.在工具栏中插入空格 在工具栏中插入空格有以下几种情况:,如果按扭前没有任何空格,拖动该按钮向右移动并当覆盖相邻按钮的一半以上时,释放鼠标键,则此按钮前出现空格。如果按钮前有空格而按钮后没有空格,拖动该按钮向左移动并当按钮的左边界接触到前面按钮时,释放鼠标键,则此按钮后将出现空格。如果按钮前后均有空格,拖动该按钮向右移动并当接触到相邻按钮时,则此按钮前的空格保留,按钮后的空格消失。相反,拖动该按钮向左移动并当接触到前一个相邻按钮时,则此按钮前面的空格消失,后面的空格保留。,1 使用工具栏编辑器,1.5.工具栏按钮属性的设置双击某按钮弹出其属性对话框,如图所示。,2 工具按钮和菜单项相结合,工具按钮和菜单项相结合是指当选择工具按钮或菜单命令时,操作结果是一样的。结合的方法:在工具按钮的属性对话框中将按钮的ID号设置为相关联的菜单项ID。例:在前面程序基础上,通过两个工具按钮分别显示主菜单IDR_MAINFRAME和菜单IDR_MENU1。,(1)打开前面的单文档应用程序。(2)利用工具栏编辑器设计两个工具按钮。,2 工具按钮和菜单项相结合,(3)双击刚才设计的第一个工具按钮,弹出该工具按钮的属性对话框,将该工具按钮的ID号设为ID_TEST_RETURN,在提示框内键入“返回应用程序主菜单n返回主菜单”。(4)双击刚才设计的第二个工具按钮,弹出该工具按钮的属性对话框,将该工具按钮的ID号设为ID_VEW_TEST,在提示框内键入“显示测试菜单n显示测试菜单”。,2 工具按钮和菜单项相结合,(5)编译运行并测试。程序运行后,将鼠标移至刚才设计的第一个工具按钮处,这时在状态栏上显示出“返回应用程序主菜单”信息,若稍等片刻会弹出提示小窗口,显示出“返回主菜单”字样,单击新添加的这两个按钮,会执行相应的菜单命令。,3 多个工具栏的使用,在用MFC AppWizard创建的文档应用程序中往往只有一个工具栏,但在实际应用中,常常需要多个工具栏。例:在前面程序基础上,当显示主菜单IDR_MAINFRAME时,只显示MFC AppWizard创建的工具栏,当显示菜单IDR_MENU1时,则只显示新添加的工具栏。,(1)在项目工作区的ResourceView页面中,展开Toolbar(工具栏)资源,用鼠标单击IDR_MAINFRAME不松开,按下Ctrl键,移动鼠标将IDR_MAINFRAME拖到Toolbar资源名称上,复制了工具栏默认资源IDR_MAINFRAME,复制后的资源标识系统自动设为IDR_MAINFRAME1。,3 多个工具栏的使用,(2)右击工具栏资源IDR_MAINFRAME1,从弹出的快捷菜单中选择Properties命令,如图所示,将ID设为IDR_TOOLBAR1。,(3)双击IDR_TOOLBAR1,打开工具栏资源,按图删除不要的工具按钮。,3 多个工具栏的使用,(4)在CMainFrame类中添加一个成员变量m_wndTestBar,变量类型为CToolBar。CToolBar类封装了工具栏的操作。,(5)在CMainFrame:OnCreate函数中添加工具栏创建代码:int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)if(CFrameWnd:OnCreate(lpCreateStruct)=-1)return-1;,3 多个工具栏的使用,int nRes=m_wndTestBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC,CRect(0,0,0,0),AFX_IDW_TOOLBAR+10);if(!nRes|!m_wndTestBar.LoadToolBar(IDR_TOOLBAR1)TRACE0(Failed to create toolbarn);return-1;/fail to create,3 多个工具栏的使用,m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);m_wndTestBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(EnableDocking是CWnd类成员函数,用来让工具栏或其他控制条在窗口进行停靠操作,参数CBRS_ALIGN_ANY表示可以停靠在窗口的任一边。DockControlBar是CFrameWnd类的成员函数,用来将指定的工具栏或其他控制条进行停靠。,3 多个工具栏的使用,CreateEx是CToolBar类的成员函数,用来创建一个工具栏对象。第1个参数用来指定工具栏所在的父窗口指针,this表示当前的CMainFrame类窗口指针。第2个参数用来指定工具按钮的风格,当为TBSTYLE_FLAT时表示工具按钮是“平面的”。第3个参数用来指定工具栏的风格,由于这里的工具栏是CMainFrame的子窗口,因此需要指定WS_CHILD|WS_VISIBLE;CBRS_TOP表示工具栏放置在父窗口的顶部;CBRS_GRIPPER表示工具栏前面有一个“把手”;CBRS_TOOLTIPS 表示允许有工具提示;CBRS_ FLYBY表示在状态栏显示工具提示文本;CBRS_SIZE_DYNAMIC 表示工具栏在浮动时,其大小是可以动态改变的。,3 多个工具栏的使用,第4个参数是用来指定工具栏四周的边框大小,一般都为0。最后一个参数用来指定工具栏这个子窗口的标识ID(与工具栏资源标识不同)。AFX_IDW_TOOLBAR是系统内部的工具栏子窗口标识,并将AFX_IDW_TOOLBAR+1的值表示默认的状态栏子窗口标识。如果在创建新的工具栏时没有指定相应的子窗口标识,则会使用默认的AFX_IDW_TOOLBAR。这样当打开“查看”菜单时,单击“工具栏”菜单时,显示或隐藏的工具栏不是原来的工具栏而是新添加的工具栏。因此需要重新指定工具栏子窗口的标识,并使其值等于AFX_IDW_TOOLBAR+10。,3 多个工具栏的使用,(6)编译运行,结果如图所示,(7)本例希望IDR_TOOLBAR1工具栏和IDR_MENU1菜单栏在一起,不是一开始就出现。还需要调用CFrameWnd类的成员函数ShowControlBar来使程序一开始运行时隐藏工具栏IDR_TOOLBAR1。在CMainFrame:OnCreate函数中添加下列代码:,3 多个工具栏的使用,int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)ShowControlBar(,ShowControlBa函数有三个参数,第一个用来指定要操作的工具栏或状态栏指针,第二个是一个布尔型,为TRUE时表示显示,否则表示隐藏,第三个用来表示是否延迟显示或隐藏,为FALSE时表示立即显示或隐藏。,3 多个工具栏的使用,(8)在CMainFrame:OnViewTest函数中添加下列代码:,void CMainFrame:OnViewTest()CMenu m_NewMenu;m_NewMenu.Detach();/使菜单对象和菜单句柄分离 m_NewMenu.LoadMenu(IDR_MENU1);SetMenu(NULL);/清除应用程序菜单 SetMenu(/关闭主工具栏,3 多个工具栏的使用,(9)在CMainFrame:OnTestReturn函数中添加下列代码:,void CMainFrame:OnTestReturn()CMenu m_NewMenu;m_NewMenu.Detach();m_NewMenu.LoadMenu(IDR_MAINFRAME);SetMenu(NULL);SetMenu(/显示主工具栏,3 多个工具栏的使用,其中:LoadMenu和Detach都是CMenu类的成员函数,LoadMenu用来装载菜单资源,而Detach是使菜单对象与菜单句柄分离。在调用LoadMenu后,菜单对象m_NewMenu就拥有一个菜单句柄,当再次调用LoadMenu后,由于菜单对象的句柄已经创建,因而会发生运行错误,但当期间对象与菜单句柄分享后,就可以再次创建菜单了。SetMenu是CWnd类的成员函数,用来设置应用程序的菜单。(10)编译运行并测试。,

    注意事项

    本文(VC基于菜单与工具栏的程序创建.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开