- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4.2工具条的编程技术
4.2工具条的编程技术
本节将讨论一些与工具条有关的编程技术,主要包括命令处理、命令更新、按钮风格和工具条的隐藏/显示等技术。
4.2.1命令处理
要使菜单和工具条执行命令,光为它们指定命令ID是不行的,必须为每个命令ID定义命令处理函数。如果不为命令定义命令处理函数或下面将要提到的命令更新处理函数,则框架将自动使该命令对应的菜单项和按钮禁止(灰化),这就是4.1节中的工具条按钮和菜单项灰化的原因。
利用ClassWizard可以很方便地加入命令处理函数,请读者按以下步骤操作:
按Ctrl+W键进入ClassWizard。
图4.6 ClassWizard对话框
如图4.6所示,在Class name栏中选择CMainFrame,在Object IDs栏中选择ID_RECORD_START,在Messages栏中双击COMMAND项,则ClassWizard会弹出一个对话框询问命令处理函数的名字,使用其提供的函数名即可。按OK按钮后,函数OnRecordStart就被加入到了Member functions栏中。
仿照第2步,为ID_RECORD_STOP定义一个命令处理函数。
按OK按钮关闭ClassWizard对话框。这时读者会发现CMainFrame类多了两个成员函数,OnRecordStart和OnRecordStop。
现在要在这两个命令处理函数中插入相应的源代码以实现其功能。当然,这里不会真的实现开始录音和停止录音的功能。我们只是让这两个函数发出一个声音,象征性地表示功能的执行,具体代码如清单4.2所示。
清单4.2 OnRecordStart和OnRecordStop函数
void CMainFrame::OnRecordStart // TODO: Add your command handler code here
MessageBeep UINT -1 ; void CMainFrame::OnRecordStop // TODO: Add your command handler code here
MessageBeep UINT -1 ; 编译并运行Record,可以看到Start和Stop命令已经可以执行了。
4.2.2命令更新
虽然Start和Stop命令可以执行了,但是还有一个不足之处。在没有开始录音之前,Stop命令应该是禁止的,也即对应的菜单项和按钮应是禁止的,这是因为此时没有必要执行该命令。录音开始后,Stop命令应该允许,而Start命令则应变为禁止。我们可以利用MFC的命令更新机制实现此逻辑功能。
在菜单下拉之前,或在工具条按钮处在空闲循环期间,MFC会发一个更新命令,这将导致命令更新处理函数的调用。命令更新处理函数可以根据情况,使用户接口对象(主要指菜单项和工具条按钮)允许或禁止。定义命令更新处理函数的方法如下:
按Ctrl+W键进入ClassWizard。
图4.7 ClassWizard对话框
如图4.7所示,在Class name栏中选择CMainFrame,在Object IDs栏中选择ID_RECORD_START,在Messages栏中双击UPDATE_COMMAND_UI项,则ClassWizard会弹出一个对话框询问命令更新处理函数的名字,使用其提供的函数名即可。按OK按钮后,函数OnUpdateRecordStart就被加入到了Member functions栏中。
仿照步2,为ID_RECORD_STOP定义一个命令更新处理函数。
按OK按钮关闭ClassWizard对话框。这时读者会发现CMainFrame类多了两个成员函数,OnUpdateRecordStart和OnUpdateRecordStop。
命令更新处理函数有一个参数是CCmdUI类的指针,通过调用CCmdUI类的成员函数Enable TRUE 或Enable FALSE 可以使用户接口对象允许或禁止。需要给CMainFrame加一个布尔型成员变量以表明是否正在录音,这样命令更新处理函数可根据这个变量来决定用户接口对象的状态。请读者在CMainFrame类内加入下面一行代码:
BOOL m_bWorking;
接下来请读者按清单4.3进行修改。
清单4.3 命令更新处理
CMainFrame::CMainFrame // TODO: add member initialization code here
m_bWorking FALSE; void CMainFrame::OnRecordStart // TODO: Add your command handler code here
MessageBeep UINT -1 ;
m_bWorking TRU
您可能关注的文档
最近下载
- 推拿治疗 喉痹 喉痹推拿治疗.pptx VIP
- 2025年湖南郴州永兴县竞聘乡镇(街道)所属事业单位工作人员16人笔试参考题库附答案解析.docx VIP
- 大学生职业生涯规划书(同名39356).docx VIP
- 2025年北京中医药大学管理岗、专职辅导员岗、实验技术岗、其他专技岗招聘笔试模拟试题及答案解析.docx VIP
- 2023-2024学年河南省南阳市卧龙区九年级(上)期中数学试题(含解析).doc VIP
- 入团志愿书电子版其它工作范文实用文档-入团志愿书电子版.pdf VIP
- 2024年栾川龙宇钼业有限公司人员招聘考试题库及答案解析.docx VIP
- 第六章 有机固废资源化.pptx VIP
- 内科病案分析案例.ppt VIP
- 解码国家安全知到智慧树期末考试答案题库2025年国际关系学院.docx VIP
原创力文档


文档评论(0)