如何在vs2012 mfc界面设计上设计比较密集的控件

& VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)
VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)
&&&&&&&上一节中鸡啄米讲了的方法。本节教程鸡啄米将继续完善前面的实例,讲解一些稍复杂的控件的添加方法,及如何为它们添加消息处理函数。&&&&&& 一、为Ribbon Bar添加更多Ribbon控件&&&&&& 鸡啄米将在上一节实例的基础上,继续添加下拉菜单、Check Box、Combo Box等Ribbon控件。&&&&&& 1、首先把&Small Button&面板上的&Click&按钮改造成一个下拉菜单。&Click&按钮有一个Behavior属性Menu Items,默认为Empty,选中它右侧会出现一个浏览按钮,点击浏览按钮会弹出&Items Editor&对话框,如下图:&&&&&& 我们可以在上图Items下的组合框中选择按钮、分割线等,点击组合框右侧的Add按钮将其添加到下拉菜单中,添加按钮后在Properties分组中可以设置Caption(标题)、ID、Image(图片)等属性。鸡啄米这里添加两个按钮,Caption属性分别为One Click、Double Click,ID分别为ID_ONE_CLICK、ID_DOUBLE_CLICK,Image等属性就不设置了。此时的Ribbon Bar如下图:&&&&&& &Click&右侧多了一个向下的箭头,运行程序后点击此箭头会显示包含One Click和Double Click按钮的下拉菜单。另外,上图中有一个按钮鸡啄米用红线指示了其提示信息-&Test Ribbon&,点击了此按钮我们就可以不运行程序而直接查看Ribbon界面效果。&&&&&&& 2、在Small Button面板的右侧再添加一个面板&More Controls&,然后在Toolbox工具中找到Check Box和Combo Box控件拖入新面板,Check Box的Caption属性设为&Websites Enable&,Combo Box的属性设为&Websites&。效果图如下:&&&&&& 我们为Websites组合框(Combo Box)添加两个下拉选项,方法是,右键点击Websites组合框,选择&Properties&,显示出其属性页,修改Data属性为&;/android&,这样就为此Combo Box添加两个网址选项。&&&&&& 二、为Ribbon控件添加消息处理函数&&&&&& 前面控件都添加好了,接下来我们就为控件添加消息处理函数。&&&&&& 1、首先为Open按钮添加单击事件的消息处理函数,其ID修改为ID_OPEN_BUTTON,然后右键点击Open按钮,选择&Add Event Handler&,弹出Event Handler Wizard对话框,右侧的Class list中选择&CMainFrame&,左侧的Message Type中选择&COMMAND&,最后点击&Add and Edit&按钮,CMainFrame类中就添加了void CMainFrame::OnOpenButton()成员函数。&&&&&& 大家可能感觉到了,其实消息处理函数的添加过程与以前的普通控件是类似的。最后修改void CMainFrame::OnOpenButton()函数的函数实现如下:
void&CMainFrame::OnOpenButton() &&
&&&&MessageBox(_T(&Open&Button!&));&&&&&
}&&&&&&&& 因为只是为了讲解按钮的消息处理函数的添加,所以没有写复杂的代码,只写了一个弹出MessageBox的语句。运行程序,在结果界面的Function类别的Big Button面板中,点击Open按钮就会弹出一个对话框,并显示&Open Button!&。&&&&&& 2、我们再为Websites组合框添加消息处理函数(方法同上),同样也为其在CMainFrame类中添加COMMAND消息处理函数--void CMainFrame::OnWebsitesCombo(),修改此函数实现如下:
void&CMainFrame::OnWebsitesCombo() &&
&&&&CMFCRibbonComboBox*&pComboBox&=&DYNAMIC_DOWNCAST(CMFCRibbonComboBox,&m_wndRibbonBar.FindByID(ID_WEBSITES_COMBO)); &&
&&&&int&nCurSel&=&pComboBox-&GetCurSel(); &&
&&&&if&(nCurSel&&=&0) &&
&&&&&&&&&&
&&&&&&&&MessageBox(pComboBox-&GetItem(nCurSel)); &&
&&&&else&&
&&&&&&&&&&
&&&&&&&&MessageBox(_T(&Please&select&one&item!&)); &&
}&&&&&&&& 运行程序,在结果界面中,改变WebSites组合框的选中项,则会弹出对话框显示选中项的信息。如下图:&&&&&& 3、然后我们为Websites Enable复选框添加消息处理函数。默认情况下Check Box控件不会因为用户的点击而改变状态,这就需要我们通过代码来实现正常的复选功能。&&&&&& 我们需要一个变量保存Check Box的当前选中状态,所以在MainFrm.h文件中为CMainFrame类添加一个BOOL型的成员变量m_bWebsitesEnable,并在CMainFrame类的构造函数中为其初始化:
CMainFrame::CMainFrame() &&
&&&&theApp.m_nAppLook&=&theApp.GetInt(_T(&ApplicationLook&),&ID_VIEW_APPLOOK_OFF_2007_BLUE); &&
&&&&m_bWebsitesEnable&=&TRUE; &&
}&&&&&&&& 接下来仍然采用1中的方法为Websites Enable复选框在CMainFrame类中添加COMMAND消息处理函数,并修改其函数体如下:
void&CMainFrame::OnWebsitesCheck() &&
&&&&m_bWebsitesEnable&=&!m_bWebsitesE &&
}&&&&&&&& 但是现在复选框的状态只是保存到了变量中,我们还要根据变量值改变复选框的显示状态,这就需要再为Check Box添加一个UPDATE_COMMAND_UI消息处理函数,方法仍旧是右键点击Check Box,选择&Add Event Handler&,在弹出的Event Handler Wizard对话框的Class list中选择&CMainFrame&,Message type中则选择UPDATE_COMMAND_UI,最后点&Add and Edit&,这样就添加了UPDATE_COMMAND_UI消息处理函数,修改此函数实现如下:
void&CMainFrame::OnUpdateWebsitesCheck(CCmdUI&*pCmdUI) &&
&&&&pCmdUI-&SetCheck(m_bWebsitesEnable); &&
}&&&&&&&& 这时你可以试着运行下程序,点击Website Enable复选框,它已经能成功的改变状态了。&&&&&& 4、除了以上功能,我们还要实现一个稍复杂的功能,就是如果选中Websites Enable复选框则激活Websites组合框,而如果取消选中则禁用Websites组合框。这就需要我们为Websites组合框添加UPDATE_COMMAND_UI消息处理函数了,添加方法同上,鸡啄米这里不再赘述。修改函数实现为:
void&CMainFrame::OnUpdateWebsitesCombo(CCmdUI&*pCmdUI) &&
&&&&pCmdUI-&Enable(m_bWebsitesEnable); &&
}&&&&&&&&& 运行程序,试着改变Websites Enable复选框的状态,Websites组合框的使能状态也会跟着改变。&&&&&&& 最后,鸡啄米再简单讲讲如何为Ribbon Bar左上角的圆形菜单按钮和快速访问工具栏添加新项。&&&&&& 圆形菜单按钮的属性页中有一个Buttons属性,可以点击其右侧浏览按钮弹出Items Editor对话框,使用该对话框可以在菜单按钮的弹出菜单窗口中添加右下角的按钮。还有一个Main Items属性,点其右侧浏览按钮也会弹出Items Editor对话框,通过它可以为圆形菜单按钮添加菜单项。&&&&&& 快速访问工具栏的属性页中有一个QAT Items属性,点击其右侧浏览按钮弹出QAT Items Editor对话框,使用该对话框可以在快速访问工具栏中添加新项。&&&&&&&本节内容有点多,不过并不复杂,很多都与之前的知识类似。最后鸡啄米欢迎大家常回本站看看。
除非特别注明,文章均为原创
转载请标明本文地址:
作者:鸡啄米
&&( 21:53:16)&&( 22:0:34)&&( 22:19:2)&&( 22:53:50)&&( 21:22:28)&&( 22:41:48)&&( 22:53:35)&&( 21:49:7)&&( 19:44:51)&&( 20:19:55)
明天过来学习开发,把所有代码都自己写一遍鸡啄米 于
22:44:54 回复欢迎,呵呵,常来看看啊
看看。。。。
哥,我照你添加了个function,但是没有显示出来,求指教。
以前没有接触过ribbon界面,但是在看了博主的文章后发现,这个界面其实跟MFC其他的一些非官方的界面作用相近。比如很早的CJ60,还有稍微近一点的BCG。但是在网上这些界面似乎都没有一个原理上的介绍,只是局限在某写功能的实现上。博主可不可以拿一篇文章来介绍一下他们的共同点,讲一讲他们的思想。比如说我今天刚刚意识到他们中的很多功能,其实是通过CControlBar类功能的扩展。希望博主写一个普及这方面知识的文章出来,应该会受欢迎的!
你写的文章我都能把实例做出来但是对事件处理的每句语句的意思就不明白了,让自己写肯定也写不出来。怎么办呀求指教?本文来源于鸡啄米 / , 原文地址:/software/149.html
终于看完了希望鸡啄米可以提供一些多文档的例子这样方便学习谢谢了,真的看出鸡啄米好用心,我一套看下来真的受益匪浅啊鸡啄米 于
21:14:41 回复嗯,有机会会跟大家分享的。常来看看啊
我想请教一下怎么样在多文档中的主窗口下有包含几个子窗口
看了两三天,终于看完了,,谢谢博主,,我还菜得很,,研究生了还不好好学习,,希望可以和各位多多交流鸡啄米 于
16:41:35 回复努力吧,现在也不晚
怎么给ribbon的状态栏编程呢,一直看不明白啊~~~楼主会出现吗???鸡啄米 于
16:42:02 回复研究研究CMFCRibbonStatusBar吧
博主,请问怎么隐藏快速访问工具栏按钮?还有就是你写的&Funtion&类别下面的分类怎么自动隐藏?就是点击&Funtion&类别,下面的分类才出来,点击别的地方,就隐藏!
不错的文章
以后保存下来 以后常来
很期待下一个系列!
期待视频教程制成光盘
出售 我也买~~~vs2010教程太少了
完全随机文章2012年4月 VC/MFC大版内专家分月排行榜第一
2012年5月 VC/MFC大版内专家分月排行榜第二2012年3月 VC/MFC大版内专家分月排行榜第二2011年7月 VC/MFC大版内专家分月排行榜第二2011年1月 VC/MFC大版内专家分月排行榜第二2010年12月 VC/MFC大版内专家分月排行榜第二2010年9月 VC/MFC大版内专家分月排行榜第二2010年6月 VC/MFC大版内专家分月排行榜第二2010年5月 VC/MFC大版内专家分月排行榜第二2010年4月 VC/MFC大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 mfc软件界面设计 的文章

 

随机推荐