⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap3_8.htm

📁 着重介绍基于C++的web编程技术
💻 HTM
字号:
<html>

<head>
<title>3.8 快捷菜单</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>

<body link="#3973DE" alink="#3973DE">
<font SIZE="5"><b><div align="center"><center>

<table border="0" width="615" cellspacing="0" cellpadding="0">
  <tr>
    </b><td><div align="center"><center><table border="0" width="615" cellpadding="0" cellspacing="0" height="20">
      <tr>
        <td width="377" bgcolor="#15397D" height="20"></td>
        <td width="238" bgcolor="#000000" height="20"><p align="right"></font><span style="text-decoration: none"><a href="../../index.htm"><font color="#FFFFFF">电脑报Visual 
        C++网络教程</font></a></span></td>
      </tr>
    </table>
    </center></div><font FACE="Times New Roman" SIZE="4"><b><p ALIGN="CENTER"></b></font><font color="#3973DE" FACE="Times New Roman" SIZE="4">3.8 </font><font SIZE="4" color="#3973DE">快捷菜单</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>Windows95</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">Windows 
    3.x</font><font SIZE="3">在界面上的一个重大差别就是</font><font FACE="Times New Roman" SIZE="3">Windows95</font><font SIZE="3">增加了功能强大的右键快捷菜单。在任何一个对象上按鼠标右键,就会弹出一个与所选当前对象相关的菜单,菜单中列出了一组针对当前对象的操作。在</font><font FACE="Times New Roman" SIZE="3">Visual Studio</font><font SIZE="3">中就有大量这样的菜单。比如,在项目工作区中单击右键时弹出菜单,让用户选择</font><font FACE="Times New Roman" SIZE="3">Docking View</font><font SIZE="3">(停泊视图)、</font><font FACE="Times New Roman" SIZE="3">Hide</font><font SIZE="3">(隐藏)和</font><font FACE="Times New Roman" SIZE="3">Properties</font><font SIZE="3">(属性)操作。现在我们来讨论如何使用</font><font FACE="Times New Roman" SIZE="3">Visual C++</font><font SIZE="3">为应用程序增加右键菜单。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p></font><font SIZE="3">这里我们也不是手工编程,而是使用</font><font FACE="Times New Roman" SIZE="3">Visual Studio</font><font SIZE="3">提供的构件工具</font><font FACE="Times New Roman" SIZE="3">Component Gallery</font><font SIZE="3">(组件画廊)向框架窗口添加快捷菜单。有关</font><font FACE="Times New Roman" SIZE="3">Componet Gallery</font><font SIZE="3">的概念参见<a href="../chap2/chap2_1.htm">第二课</font><font FACE="Times New Roman" SIZE="3">2.1.5</font><font SIZE="3">节</a>。选择</font><font FACE="Times New Roman" SIZE="3">Project-&gt;Add to 
    Project-&gt;Component and Controls</font><font SIZE="3">菜单,弹出</font><font FACE="Times New Roman" SIZE="3">Component and Controls Gallery</font><font SIZE="3">对话框,选择</font><font FACE="Times New Roman" SIZE="3">Developer Studio Components</font><font SIZE="3">目录,在该目录下选择</font><font FACE="Times New Roman" SIZE="3">Popup Menu</font><font SIZE="3">构件,如图</font><font FACE="Times New Roman" SIZE="3">3-15</font><font SIZE="3">所示。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p align="center"></font><font SIZE="3"><img src="T3_15.gif" alt="T3_15.gif (10360 bytes)" WIDTH="533" HEIGHT="400"></font><font FACE="Times New Roman" SIZE="3"></p>
    <p align="center"></font><font SIZE="3">图</font><font FACE="Times New Roman" SIZE="3">3-15</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">按</font><font FACE="Times New Roman" SIZE="3">Insert</font><font SIZE="3">按钮。弹出</font><font FACE="Times New Roman" SIZE="3">Poup Menu</font><font SIZE="3">对话框,在</font><font FACE="Times New Roman" SIZE="3">Add popup menu to</font><font SIZE="3">下拉列表框中选择</font><font FACE="Times New Roman" SIZE="3">CMainFrame</font><font SIZE="3">,点</font><font FACE="Times New Roman" SIZE="3">OK</font><font SIZE="3">按钮,关闭</font><font FACE="Times New Roman" SIZE="3">Popup Menu</font><font SIZE="3">对话框。按</font><font FACE="Times New Roman" SIZE="3">Close</font><font SIZE="3">按钮关闭</font><font FACE="Times New Roman" SIZE="3">Component and Controls Gallery</font><font SIZE="3">对话框。编译运行</font><font FACE="Times New Roman" SIZE="3">Hello</font><font SIZE="3">,弹出窗口后按右键,就弹出如图</font><font FACE="Times New Roman" SIZE="3">3-16</font><font SIZE="3">所示的快捷菜单。菜单中包含三项:</font><font FACE="Times New Roman" SIZE="3">cut</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">copy</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">paste</font><font SIZE="3">。因为没有对应的消息矗立函数,所有这些菜单都是灰色的、非活动的。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="center"></font><img src="T3_16.gif" alt="T3_16.tif (23222 bytes)" WIDTH="79" HEIGHT="61"><font FACE="Times New Roman" SIZE="3"></p>
    <p align="center"></font><font SIZE="3">图 </font><font FACE="Times New Roman" SIZE="3">3-16</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">现在,我们看看</font><font FACE="Times New Roman" SIZE="3">Component Gallery</font><font SIZE="3">是如何实现快捷菜单的。首先看资源视图的菜单资源,</font><font FACE="Times New Roman" SIZE="3">Component Gallery</font><font SIZE="3">在其中增加了一个</font><font FACE="Times New Roman" SIZE="3">ID</font><font SIZE="3">为</font><font FACE="Times New Roman" SIZE="3">CG_IDR_POPUP_MAIN_FRAME</font><font SIZE="3">的菜单,菜单中包含了刚才我们看到的三个菜单项:</font><font FACE="Times New Roman" SIZE="3">cut</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">copy</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">paste</font><font SIZE="3">。切换到类视图,浏览</font><font FACE="Times New Roman" SIZE="3">CMainFrame</font><font SIZE="3">类,可以看到</font><font FACE="Times New Roman" SIZE="3">CMainFrame</font><font SIZE="3">增加了一个</font><font FACE="Times New Roman" SIZE="3">OnContextMenu</font><font SIZE="3">的成员函数,它是</font><font FACE="Times New Roman" SIZE="3">CWnd</font><font SIZE="3">的一个方法,用于处理鼠标右键单击消息,原型如下:</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p>afx_msg void OnContextMenu(CWnd* pWnd,CPoint point);</p>
    <p></font><font SIZE="3">其中</font><font FACE="Times New Roman" SIZE="3">pWnd</font><font SIZE="3">指向右键单击的窗口,它可以是一个本窗口的一个子窗口。比如,我们在工具条上单击右键时也弹出同样的菜单,工具条就是框架窗口的一个子窗口。</font><font FACE="Times New Roman" SIZE="3">OnContextMenu</font><font SIZE="3">函数定义如清单</font><font FACE="Times New Roman" SIZE="3">3.6</font><font SIZE="3">所示。<b></p>
    <p>清单</font><font FACE="Times New Roman" SIZE="3">3.6 </font><font SIZE="3">右键菜单</font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p>void CMainFrame::OnContextMenu(CWnd*, CPoint point)</p>
    <p>{</p>
    <p>// CG: This block was added by the Pop-up Menu component</p>
    <p>{</p>
    <p>if (point.x == -1 &amp;&amp; point.y == -1){</p>
    <p>//</font><font SIZE="3">如果是键盘激活的快捷菜单,则在窗口左上角</font><font FACE="Times New Roman" SIZE="3">5,5</font><font SIZE="3">的位置显示快捷菜单</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>CRect rect;</p>
    <p>GetClientRect(rect);</p>
    <p>ClientToScreen(rect);</p>
    <p>point = rect.TopLeft();</p>
    <p>point.Offset(5, 5);</p>
    <p>}</p>
    <p>//</font><font SIZE="3">载入快捷菜单资源</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>CMenu menu;</p>
    <p>VERIFY(menu.LoadMenu(CG_IDR_POPUP_MAIN_FRAME));</p>
    <p>//</font><font SIZE="3">取得本菜单的第一个子菜单</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>CMenu* pPopup = menu.GetSubMenu(0);</p>
    <p>ASSERT(pPopup != NULL);</p>
    <p>CWnd* pWndPopupOwner = this;</p>
    <p>//</font><font SIZE="3">如果当前窗口是一个子窗口,取其父窗口作为弹出菜单的拥有者</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>while (pWndPopupOwner-&gt;GetStyle() &amp; WS_CHILD)</p>
    <p>pWndPopupOwner = pWndPopupOwner-&gt;GetParent();</p>
    <p>//</font><font SIZE="3">在</font><font FACE="Times New Roman" SIZE="3">point.x</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">point.y</font><font SIZE="3">处显示弹出式菜单并跟踪其选择项</font><font FACE="Times New Roman" SIZE="3"></p>
    <p>pPopup-&gt;TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, 
    point.y,pWndPopupOwner);</p>
    <p>}</p>
    <p>}</p>
    <p></font><font SIZE="3">一般的,我们都可以使用</font><font FACE="Times New Roman" SIZE="3">Component Gallery</font><font SIZE="3">的</font><font FACE="Times New Roman" SIZE="3">Popup menu</font><font SIZE="3">构件为某个窗口、对话框、视图等增加快捷菜单而无需手工编程。我们要做的只是编辑修改缺省的菜单为我们自己的快捷菜单,并用</font><font FACE="Times New Roman" SIZE="3">ClassWizard</font><font SIZE="3">生成必要的成员函数,在加入自己的代码。如果确实要手工做的话,首先应当用菜单编辑器增加一个菜单,然后为对应的窗口添加</font><font FACE="Times New Roman" SIZE="3">OnContextMenu</font><font SIZE="3">方法,</font><font FACE="Times New Roman" SIZE="3">OnContextMenu</font><font SIZE="3">的定义可以参考上面的程序。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">Component Gallery</font><font SIZE="3">的功能远不止向程序添加快捷菜单这一项,它还可以增加启动画面(</font><font FACE="Times New Roman" SIZE="3">Splash Window</font><font SIZE="3">)、多页式对话框、口令检查对话框等多种功能。读者可以试着往</font><font FACE="Times New Roman" SIZE="3">Hello</font><font SIZE="3">程序中添加</font><font FACE="Times New Roman" SIZE="3">Splash Window</font><font SIZE="3">和口令对话框,体验一下</font><font FACE="Times New Roman" SIZE="3">Component Gallery</font><font SIZE="3">的强大功能。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="CENTER"></font><font SIZE="4"><b> </p>
    <p ALIGN="CENTER">小 结</b></font><font FACE="Times New Roman" SIZE="3"></p>
    <p></font><font SIZE="3">在这一章里,我们主要向读者介绍:</p>
    <blockquote>
      <p ALIGN="JUSTIFY">如何使用<font FACE="Times New Roman" SIZE="3">AppWizard</font>生成<font FACE="Times New Roman" SIZE="3">Hello</font>框架程序,并手工修改代码,让窗口显示<font SIZE="3"> </font>“<font FACE="Times New Roman" SIZE="3">Hello,World</font>!”,并介绍了<font FACE="Times New Roman" SIZE="3">AppWizard</font>所生成的文件。</p>
      <p>应用程序的执行机制:框架调用缺省的<font FACE="Times New Roman" SIZE="3">WinMain</font>函数,首先执行<font FACE="Times New Roman" SIZE="3">InitInstance</font>初始化应用程序类的一个实例,然后调用<font FACE="Times New Roman" SIZE="3">Run</font>进入消息循环。</p>
      <p>框架窗口的使用:包括窗口的创建、注册类、窗口的关闭和撤消。</p>
      <p ALIGN="JUSTIFY">在窗口中加入菜单,分为三步工作:第一步,用菜单编辑器编辑菜单;第二步,用</font><font FACE="Times New Roman" SIZE="3">ClassWizard</font><font SIZE="3">生成消息处理函数;第三步,手工编辑消息处理函数,完成特定的功能。</p>
      <p>用户接口更新消息:接口更新机制原理,如何控制菜单的使能、灰化、选中。</p>
      <p>快捷菜单编程:使用</font><font FACE="Times New Roman" SIZE="3">Component 
      Gallery</font><font SIZE="3">给应用程序添加快捷菜单。</font></p>
    </blockquote>
    <div align="center"><center><table border="0" cellpadding="0" cellspacing="0" width="615">
      <tr>
        <td width="280"><a href="chap3_7.htm">上一页</a></td>
        <td width="335"></td>
      </tr>
    </table>
    </center></div><font SIZE="5"><hr noshade color="#3973DE" size="1">
    <p align="center"></font><font size="2" color="#000000">本教程由<a href="http://vcdynasty.yeah.net">Visual C++王朝(Where programmers come together)</a>协助制作<br>
    未经许可,请勿以任何形式复制</font></td>
    <b>
  </tr>
</table>
</center></div>

<p ALIGN="CENTER"></b><font SIZE="5"> </font><font FACE="Times New Roman" SIZE="5"></p>
</font><font FACE="Times New Roman" SIZE="3">

<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
</font></b>

<p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>

<p></font> </p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -