友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

VC语言6.0程序设计从入门到精通-第10部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!



光宝盒”和“仙履奇缘”两个子菜单项的“大话西游”菜单项。其步骤如下:  

    (1)在集成开发环境(IDE )中单击左侧工作区窗口中的“ResourceView ”选项卡,在 

树状列表中单击展开“Menu ”节点,找到需要编辑的菜单资源的  ID ,双击就可以打开该菜 

单资源的编辑界面,如图 3…4 所示。  



                                                                    



                             图 3…4    菜单资源编辑界面  



    (2 )双击    “帮助”菜单项右侧的虚线框,弹出新建顶层菜单项的属性编辑对话框,如 

图 3…5 所示。注意,这个虚线框可以用鼠标拖动到顶层菜单的任何位置。在“Caption ”文本 

框中输入菜单项的标题“大话西游(&D )”。标题中“&D ”的作用是在程序运行时用户可以 

按 Alt+D 组合键直接打开该菜单项,在显示时,“&D ”会自动转换为添加了下划线的“D ”, 

如图 3…6 所示。“Pop…up ”复选框默认被选中,表明这是一个弹出菜单项,允许有子菜单。  



                                                             



                           图 3…5    添加“大话西游”菜单项  



 ·48 ·  


…………………………………………………………Page 58……………………………………………………………

                                                                    第 3 章    菜单与加速键  



                                                            



                                图 3…6    “大话西游”菜单项  



     (3 )关闭如图 3…5 所示的对话框,单击资源编辑器中“大话西游”的菜单项,会显示它 

的下层菜单,如图 3…6 所示。因为还没有添加任何子菜单项,所以“大话西游”的下层菜单 

是空的,显示为一个虚线框。在图 3…6  中单击这个虚线框,弹出类似于图 3…5  的属性编辑对 

话框,如图 3…7 所示。  



                                                                        



                              图 3…7    添加“月光宝盒”菜单项  



     其中,在“ID ”文本框中输入“ID_MOVIE1 ”,“Caption ”文本框中输入“月光宝盒(&Y) ”, 

“Prompt ”文本框中输入“打开电影《大话西游之月光宝盒》”。标题中的“&Y ”表示打开“大 

话西游”菜单项后,在键盘上按“Y ”键可以直接选择“月光宝盒”菜单项。当鼠标光标移 

动到“月光宝盒”这个菜单项上时,会在程序的状态栏中显示“Prompt ”文本框中的内容, 

即“打开电影《大话西游之月光宝盒》”。回车关闭属性编辑对话框,保存修改。  

     (4 )按照步骤(3 )的方法加入菜单项“仙履奇缘”,其属性对话框如图 3…8 所示。  



                                                                        



                              图 3…8    添加“月光宝盒”菜单项  



     (5 )完成两个子菜单项的添加后,在资源编辑器中得到如图 3…9 所示的效果。  



                                                             



                          图 3…9    添加完成后的“大话西游”菜单项  



3。2。2    加速键的创建  



     键盘加速键是应用程序中定义的某些组合键,按下组合键可以快捷地选择相应的菜单项 



                                                                                  ·49 ·  


…………………………………………………………Page 59……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通      



和执行某些相应的操作。加速键可以和菜单项相关联,也可以定义某些菜单上没有提供的命 

令。例如 Visual C++ IDE  中复制和粘贴的快捷键分别是 Ctrl+C 和 Ctrl+V,这两个快捷键就是 

直接关联到 IDE  “编辑”菜单下的“复制”和“粘贴”菜单项。与菜单项的关联只需要将加 

速键的 ID 设置为对应菜单项的 ID,比如 Ctrl+C 的 ID 设置为 ID_EDIT_COPY 就可以关联到 

ID 同样是 ID_EDIT_COPY 的“编辑”菜单下的“复制”菜单项。  

    下面以在 3。2。1 节中创建的工程中添加加速键为例介绍添加加速键的方法。  

    (1)在集成开发环境(IDE )左侧单击“ResourceView ”选项卡,在树状列表中寻找 

“ 

 Accelerator ”节点下的“IDR_MAINFRAME ”子节点,单击该节点就会在右侧客户窗口中打 

开加速键资源 IDR_MAINFRAME  的加速键列表,如图 3…10 所示。IDR_MAINFRAME 加速 

键资源是 AppWizard 在创建应用程序时默认添加的,一般无需另外创建新的加速键资源。  

    (2 )双击编辑界面右侧客户区最下方的虚线框,打开一个加速键属性编辑对话框,如图 

3…11 所示,在该对话框中即可添加新的加速键。  

    在属性编辑对话框的“ID ”文本框中输入“ID_MOVIE1 ”,对应“大话西游”菜单项下 

的“月光宝盒”菜单项的  ID,输入完毕后“ID ”文本框会自动显示“ID_MOVIE1=数字”, 

这里数字表示 ID_MOVIE1 的数值,一般由 Visual C++ 自动给出,用户无需更改。  

    在“Key ”文本框中输入“Y ”,选中“Modifiers ”区域中的“Ctrl ”复选框,取消其他复 

选框的的选取,在“Type ”区域中选中“VirtKey ”单选框,表示使用虚拟键(Virtual Key )。    

    这样就建立起加速键 Ctrl+Y 和“月光宝盒”菜单项的对应 。程序运行后,只需按 Ctrl+Y 

键就可以选择“月光宝盒”菜单项,触发相应的命令消息了。  



                                                                   



                         图 3…10    加速键资源编辑界面  



 ·50 ·  


…………………………………………………………Page 60……………………………………………………………

                                                                 第 3 章    菜单与加速键  



                                                                     



                         图 3…11    “月光宝盒”加速键资源编辑界面  



    (3 )按照步骤(2 )中的方法,加入加速键 Ctrl+L  与“仙履奇缘”菜单项的对应,相应 

的属性对话框如图 3…12 所示。  



                                                                     



                         图 3…12    “仙履奇缘”加速键资源编辑界面  



    (4 )完成加速键的添加后,为了完善用户界面,需要在菜单项标题中添加加速键的说明。 

在 IDE 左侧的“ResourceView ”选项卡中,展开“Menu ”节点,双击 IDR_MAINFRAME 进 

入 IDR_MAINFRAME 菜单资源编辑界面。然后在 IDE 右侧客户区中单击“大话西游”菜单 

项,弹出子菜单,在“月光宝盒”菜单项上双击鼠标左键,弹出属性编辑对话框,将“Caption ” 

文本框中的标题修改为“月光宝盒(&Y)tCtrl+Y ”,如图 3…13 所示。其中“t ”表示“Ctrl+Y ” 

的显示与前面“月光宝盒(&Y) ”之间隔一个制表位(Tab )。  



                                                                     



                          图 3…13    添加“月光宝盒”的加速键说明  



    (5 )参照前一步,在“仙履奇缘”菜单标题中加上 Ctrl+L 的加速键说明。  



3。3    添加菜单所需处理函数  



    前一节介绍了创建和添加菜单资源的方法,但添加菜单资源只是创建菜单的第一步。用 

户编译执行前一节的例子就会发现,运行时关闭所有文档,程序显示的                                  IDR_MAINFRAME 

菜单中“大话西游”下的两个菜单项都是禁用的。这是因为缺少相应的用户处理函数,主框 



                                                                              ·51 ·  


…………………………………………………………Page 61……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通      



架类自动禁用了这两个菜单项。因此还需要为菜单消息添加消息处理函数。同时为了完善菜 

单的各种功能,还需要在运行中动态地创建和修改菜单,并添加代码。本节将详细讲解这些 

        

内容。 



3。3。1    添加普通菜单的处理函数  



    1.添加菜单命令处理函数  



    由 AppWizard 创建的应用程序会在程序运行时自动将菜单资源装入内存 。用户只需要添 

加相应消息处理函数即可完成菜单的基本功能。下面以  3。2  节中创建的菜单为例,分步骤讲 

解如何为应用程序添加菜单命令消息处理函数。  

    (1)在 IDE 主菜单栏中依次选择“View|ClassWizard ”菜单命令或者在 IDE 界面中直接 

使用快捷键 Ctrl+W 打开“ClassWizard ”对话框,单击“Message Maps ”选项卡。  

    (2 )添加“月光宝盒”菜单项的消息处理函数。在“Class  name ”下拉列表框中选择需 

要编辑的类—主框架类 CMainFrame,在“Object IDs ”列表框中选择需要添加处理函数的 

命令消息 ID—ID_MOVIE1  “月光宝盒”,双击“Messages ”列表框中的 MAND 或者 

在其上单击鼠标左键,然后单击“Add Function ”按钮,为 ID_MOVIE1 添加命令消息处理函 

数。在弹出的如图        3…2 所示的对话框中直接单击“OK ”按钮(对话框中函数名为默认的 

OnMovie1 ),返回 ClassWizard 对话框。可以看见在“Member  functions ”列表中已经添加了 

一个名为 OnMovie1 的新函数。  

    (3 )按照步骤(2 )中的方法,为 ID  为 ID_MOVIE2  “仙履奇缘”的菜单项添加消息处 

理函数 OnMovie2() 。添加后的 ClassWizard 对话框内容如图 3…14 所示。  



                                                                     



               图 3…14    添加了两个命令消息处理函数后的 ClassWizard 对话框  



    (4 )在“Member functions ”列表框中选择函数 OnMovie1,单击“Edit Code ”按钮,  关 

闭 ClassWizard 对话框,自动打开 MainFrm。cpp 文件,并将光标定位在 OnMovie1()函数体中, 



 ·52 ·  


…………………………………………………………Page 62……………………………………………………………

                                                                            第 3 章    菜单与加速键  



在这里添加相应代码。这里为 OnMovie1()函数添加如下代码:  



     void CMainFrame::OnMovie1()    



     {  



          // TODO: Add your mand handler code here  



          MessageBox(〃悟空你也太调皮了,我跟你说过叫你不要乱扔东西,你怎么又…〃;  



               〃月光宝盒〃);  



     }  



     (5 )在 MainFrm。cpp 文件中找到 CMainFrame::OnMovie2()函数,添加如下代码:  



     void CMainFrame::OnMovie2()    



     {  



          // TODO: Add your mand handler code here  



          MessageBox(〃 曾经有一份真诚的爱情摆在我的面前,但是我没有珍惜…〃;  



               〃仙履奇缘〃);  



     }  



     (6 )保存文件,编译并运行程序,关闭所有文档,依次选择“大话西游|仙履奇缘”可以 

得到如图 3…15 所示的运行结果。  



                                                                                          



                                 图 3…15    菜单应用程序的运行结果  



     2 .添加动态修改菜单状态的处理函数  



     每一个菜单项都有很多属性,通过动态改变菜单项的属性可以及时反映菜单的状态,为 

用户提供相关的信息。但在介绍菜单资源编辑器的时候也涉及到了一些跟菜单属性有关的内 

容。在资源编辑器中只能设置菜单的初始状态,并不能在程序运行时动态地改变菜单属性, 

这就需要通过程序代码来实现这些功能。  



                                                                                           ·53 ·  


…………………………………………………………Page 63……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通      



    在前一部分中使用 ClassWizard 对话框添加消息处理函数时可以看到如图 3…14 所示的菜 

单  ID  对应的“Messages ”列表框中有两项,一项是已经用到的“MAND ”,另一项 

 UPDATE_MAND_UI ”则是本部分将要介绍的菜单项的状态更新消息。该消息在 MFC 

“ 

要更新整个程序界面时产生,提示用户设置该菜单项当前的状态。  

    下面为前一节的示例添加“仙履奇缘”菜单项的状态更新处理,要求必须在选择过“月 

光宝盒”菜单项后才能选择“仙履奇缘 ”,否则“仙履奇缘”菜单项处于禁用状态。 

                                                                             

    (1)为主框架类添加一个成员变量,用以标记“月光宝盒”菜单项是否被选择过。要添 

加成员变量,首先应在 IDE 左侧单击“ClassView ”选项卡,展开“Classes ”节点,在 CMainFrame 

节点上单击鼠标右键,在弹出菜单中选择“Add Member Variable ”菜单项,打开“Add Member  

Variable ”对话框,如图 3…16 所示。在其中的“Variable Type ”变量类型文本框中输入“BOOL ”, 

在“Variable Name ”变量名文本框中输入“m_bHaveSeenMovie1 ”,并选中“Access ”区域中 

的“Public ”单选框。确认后即为 CMainFrame 添加了一个公共成员变量 m_bHaveSeenMovie1 。 

该变量的值将决定是否禁用“仙履奇缘”菜单项,当它的值为 TRUE 时,菜单项允许,为 FALSE 

时则被禁用。  



                                                                   



                          图 3…16    为 CMainFrame 添加的成员变量  



    (2 )初始化新创建的成员变量,初始值为 FALSE ,即“仙履奇缘”菜单项默认是被禁用 

的 。 在   IDE  工 作 区 的   ClassView 选 项 卡 下 , 展 开     CMainFrame , 双 击 类 的 构 造 函 数 

CMainFrame(),客户区自动打开 MainFrame。cpp 文件并定位在 CMainFrame::CMainFrame()函 

数上。在该函数中添加如下代码:  



    CMainFrame::CMainFrame()  



    {  



        // TODO: add member initialization code here  



        m_bHaveSeenMovie1 = FALSE;  



    }  



    (3 )在 CMainFrame  中添加“仙履奇缘”菜单项的更新用户接口对象状态命令消息处理 

函数。  

    在  IDE  主菜单中依次选择“View|ClassWizard ”菜单命令或者在开发界面中直接使用快 

捷键 Ctrl+W 打开“ClassWizard ”对话框,单击“Message Maps ”选项卡,在“Class name ” 

下拉列表框中选择 CMainFrame,在“Object  IDs ”列表框中选择 ID_MOVIE2  “仙履奇缘” 

项,双击“Messages ”列表框中的 UPDATE_MAND_UI  或者在其上单击鼠标左键,然 

后单击“Add Function ”按钮,为 ID_MOVIE2 添加更新用户接口对象状态命令消息处理函数。 

在 弹 出 的 如 图    3…2 所 示 的 对 话 框 中 直 接 单 击 “ OK ” 按 钮 ( 对 话 框 中 函 数 名 为 默 认 



 ·54 ·  


…………………………………………………………Page 64……………………………………………………………

                                                                            第 3 章    菜单与加速键  



OnUpdateMovie2 ),返回“ClassWizard ”对话框。可以看见在“Member functions ”列表中添 

加了一个名为 OnUpdateMovie2 的新函数。单击“Edit  Code ”按钮,则退出“ClassWizard ” 

对话框,并打开 MainFrm。cpp 文件,在刚添加的 CMainFrame::OnUpdateMovie2() 中添加如下 

代码:  



     void CMainFrame::OnUpdateMovie2(CCmdUI* pCmdUI)    



     {  



          // TODO: Add your mand update UI handler code here  



          pCmdUI…》Enable(m_bHaveSeenMovie1);  



     }  



     (4 )接着根据是否选择过“月光宝盒”菜单项设置“仙履奇缘”是否禁用。当选择“月 

光宝盒”菜单项后,使其消息处理函数将 m_bHaveSeenMovie1 设置为 TRUE 就可以激活“仙 

履奇缘”菜单项。在工作区 ClassView 选项卡中展开 CMainFrame,双击 OnMovie1()节点,IDE 

自动打开MainFrm。cpp 并定位 OnMovie1()函数。修改该函数代码如下:  



     void CMainFrame::OnMovie1()    



     {  



          // TODO: Add your mand handler code here  



          MessageBox(〃悟空你也太调皮了,我跟你说过叫你不要乱扔东西,你怎么又…〃;  



               〃月光宝盒〃);  



          m_bHaveSeenMovie1=TRUE;  



     }  



     (5 )编译并运行该程序,就可以实现既定功能。  

     在 CMainFrame::OnUpdateMovie2()函数中,参数 pCmdUI 指向当前要更新的菜单项的对 

象,这里即为“仙履奇缘”菜单项。通过 pCmdUI 的成员方法就可以改变菜单项的属性。下 

面分别介绍 CCmdUI 中改变菜单属性主要的成员方法:  



     o  Enable()  

     Enable() 函数用于设置菜单项是否有效。其原型为:  



     virtual void Enable(BOOL bOn = TRUE);  



     bOn 为 TRUE 时菜单项有效,反之菜单项无效,显示为灰色,不响应鼠标单击或者其他 

有同样效果的操作。bOn  的默认值是 TRUE 。下面的代码根据标志 m_bMenuItemEnable 变量 

设置某个菜单项是否有效:  



     void CMainFrame::OnUpdateMenuitem (CCmdUI* pCmdUI)    



     {  



          pCmdUI…》Enalbem_bMenuItemEnable);  



     }  



     无效的子菜单如图 3…17 所示。  



                                                         



                                    图 3…17    无效的菜单项 Menu  



                                                                                            ·55 ·  


…………………………………………………………Page 65……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通      



     o  SetCheck()  

     SetCheck()函数用于设置菜单项的复选状态。其原型为:  



     virtual void SetCheck(int nCheck = 1 );  



     nCheck 等于 0 时菜单项没有被选中,nCheck 等于  1 时菜单项被选中,在菜单项标题前 

有一个小勾。nCheck 的默认值为 1。下面的代码根据标志 m_bMenuItemChecked 变量是否为 

真设置某个菜单项是否被复选选中。  



     void CMainFrame::OnUpdateMenuitem (
返回目录 上一页 下一页 回到顶部 0 0
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!