&&&&&&&上一节中鸡啄米讲了为ribbon bar添加控件的方法。本节教程鸡啄米将继续完善前面的实例,讲解一些稍复杂的控件的添加方法,及如何为它们添加消息处理函数。

&&&&&& 一、为ribbon bar添加更多ribbon控件

&&&&&& 鸡啄米将在上一节实例的基础上,继续添加下拉菜单、check box、combo box等ribbon控件。

&&&&&& 1、首先把“small button”面板上的“click”按钮改造成一个下拉菜单。“click”按钮有一个behavior属性menu items,默认为empty,选中它右侧会出现一个浏览按钮,点击浏览按钮会弹出“items editor”对话框,如下图:

vs2010/mfc编程入门之五十四(ribbon界面开发:使用更多控件并为控件添加消息处理函数)

&&&&&& 我们可以在上图items下的组合框中选择按钮、分割线等,点击组合框右侧的add按钮将其添加到下拉菜单中,添加按钮后在properties分组中可以设置caption(标题)、id、image(图片)等属性。鸡啄米这里添加两个按钮,caption属性分别为one click、double click,id分别为id_one_click、id_double_click,image等属性就不设置了。此时的ribbon bar如下图:

vs2010/mfc编程入门之五十四(ribbon界面开发:使用更多控件并为控件添加消息处理函数)

&&&&&& “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”。效果图如下:

vs2010/mfc编程入门之五十四(ribbon界面开发:使用更多控件并为控件添加消息处理函数)

&&&&&& 我们为websites组合框(combo box)添加两个下拉选项,方法是,右键点击websites组合框,选择“properties”,显示出其属性页,修改data属性为“www.jizhuomi.com;www.jizhuomi.com/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()函数的函数实现如下:

c++代码
  1. void&cmainframe::onopenbutton() &&
  2. { &&
  3. &&&&//&todo:&add&your&command&handler&code&here &&
  4. &&&&messagebox(_t("open&button!"));&&&//&弹出对话框,提示“open&button!” &&
  5. }&&

&&&&&& 因为只是为了讲解按钮的消息处理函数的添加,所以没有写复杂的代码,只写了一个弹出messagebox的语句。运行程序,在结果界面的function类别的big button面板中,点击open按钮就会弹出一个对话框,并显示“open button!”。

&&&&&& 2、我们再为websites组合框添加消息处理函数(方法同上),同样也为其在cmainframe类中添加command消息处理函数--void cmainframe::onwebsitescombo(),修改此函数实现如下:

c++代码
  1. void&cmainframe::onwebsitescombo() &&
  2. { &&
  3. &&&&//&todo:&add&your&command&handler&code&here &&
  4. &&&&//&获取combo&box控件的指针 &&
  5. &&&&cmfcribboncombobox*&pcombobox&=&dynamic_downcast(cmfcribboncombobox,&m_wndribbonbar.findbyid(id_websites_combo)); &&
  6. &&&&//&获取combo&box控件当前选中项的索引 &&
  7. &&&&int&ncursel&=&pcombobox->getcursel(); &&
  8. &&
  9. &&&&if&(ncursel&>=&0) &&
  10. &&&&{ &&
  11. &&&&&&&&//&如果索引大于等于0,则说明有选中项,弹出对话框并显示选中项的信息 &&
  12. &&&&&&&&messagebox(pcombobox->getitem(ncursel)); &&
  13. &&&&} &&
  14. &&&&else&&
  15. &&&&{ &&
  16. &&&&&&&&//&如果索引小于0,则说明没有选中项,弹出对话框提示用户进行选择 &&
  17. &&&&&&&&messagebox(_t("please&select&one&item!")); &&
  18. &&&&} &&
  19. }&&

&&&&&& 运行程序,在结果界面中,改变websites组合框的选中项,则会弹出对话框显示选中项的信息。如下图:

vs2010/mfc编程入门之五十四(ribbon界面开发:使用更多控件并为控件添加消息处理函数)

&&&&&& 3、然后我们为websites enable复选框添加消息处理函数。默认情况下check box控件不会因为用户的点击而改变状态,这就需要我们通过代码来实现正常的复选功能。

&&&&&& 我们需要一个变量保存check box的当前选中状态,所以在mainfrm.h文件中为cmainframe类添加一个bool型的成员变量m_bwebsitesenable,并在cmainframe类的构造函数中为其初始化:

c++代码
  1. cmainframe::cmainframe() &&
  2. { &&
  3. &&&&//&todo:&add&member&initialization&code&here &&
  4. &&&&theapp.m_napplook&=&theapp.getint(_t("applicationlook"),&id_view_applook_off_2007_blue); &&
  5. &&&&//&初始化为true,即复选框为选中状态 &&
  6. &&&&m_bwebsitesenable&=&true; &&
  7. }&&

&&&&&& 接下来仍然采用1中的方法为websites enable复选框在cmainframe类中添加command消息处理函数,并修改其函数体如下:

c++代码
  1. void&cmainframe::onwebsitescheck() &&
  2. { &&
  3. &&&&//&todo:&add&your&command&handler&code&here &&
  4. &&&&//&为m_bwebsitesenable取反,即切换复选框的状态 &&
  5. &&&&m_bwebsitesenable&=&!m_bwebsitesenable; &&
  6. }&&

&&&&&& 但是现在复选框的状态只是保存到了变量中,我们还要根据变量值改变复选框的显示状态,这就需要再为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消息处理函数,修改此函数实现如下:

c++代码
  1. void&cmainframe::onupdatewebsitescheck(ccmdui&*pcmdui) &&
  2. { &&
  3. &&&&//&todo:&add&your&command&update&ui&handler&code&here &&
  4. &&&&//&根据当前变量值设置复选框状态 &&
  5. &&&&pcmdui->setcheck(m_bwebsitesenable); &&
  6. }&&

&&&&&& 这时你可以试着运行下程序,点击website enable复选框,它已经能成功的改变状态了。

&&&&&& 4、除了以上功能,我们还要实现一个稍复杂的功能,就是如果选中websites enable复选框则激活websites组合框,而如果取消选中则禁用websites组合框。这就需要我们为websites组合框添加update_command_ui消息处理函数了,添加方法同上,鸡啄米这里不再赘述。修改函数实现为:

c++代码
  1. void&cmainframe::onupdatewebsitescombo(ccmdui&*pcmdui) &&
  2. { &&
  3. &&&&//&todo:&add&your&command&update&ui&handler&code&here &&
  4. &&&&//&根据websites&enable复选框的状态确实激活还是禁用 &&
  5. &&&&pcmdui->enable(m_bwebsitesenable); &&
  6. }&&

&&&&&&& 运行程序,试着改变websites enable复选框的状态,websites组合框的使能状态也会跟着改变。

&&&&&&& 最后,鸡啄米再简单讲讲如何为ribbon bar左上角的圆形菜单按钮和快速访问工具栏添加新项。

vs2010/mfc编程入门之五十四(ribbon界面开发:使用更多控件并为控件添加消息处理函数)

&&&&&& 圆形菜单按钮的属性页中有一个buttons属性,可以点击其右侧浏览按钮弹出items editor对话框,使用该对话框可以在菜单按钮的弹出菜单窗口中添加右下角的按钮。还有一个main items属性,点其右侧浏览按钮也会弹出items editor对话框,通过它可以为圆形菜单按钮添加菜单项。

&&&&&& 快速访问工具栏的属性页中有一个qat items属性,点击其右侧浏览按钮弹出qat items editor对话框,使用该对话框可以在快速访问工具栏中添加新项。

&&&&&&&本节内容有点多,不过并不复杂,很多都与之前的知识类似。最后鸡啄米欢迎大家常回本站看看。

除非特别注明,鸡啄米文章均为原创
转载请标明本文地址:http://www.jizhuomi.com/software/255.html
2012-10-27 21:56:47
作者:鸡啄米 分类:软件开发 浏览: 评论:10