翻译 tellmenow
菜单在Windows输入中占据重要位置。虽然每个应用程序可能有不同的键盘和手写笔界面,但几乎所有的应用程序都按Windows用户熟悉的结构来组织菜单。
在Windows CE程序中使用菜单有些不同于其它版本的Windows程序,最显著的不同是,在Windows CE里,菜单不是标准顶层窗口的一部分。相反,菜单被绑定到为窗口创建的命令条或者菜单条控件上。除了这一变化外,菜单的功能以及菜单的选择方式同其它版本的Windows大部分是相同的。鉴于这个普遍相似性,在本节我只对Windows菜单管理做一个基本介绍。
要创建菜单,只要简单调用HMENU CreateMenu(void)即可,该函数返回一个空菜单的句柄。要给菜单添加项,可以使用两种调用方式。第一种是调用BOOL AppendMenu (HMENU hMenu, UINT fuFlags, UINT idNewItem, LPCTSTR lpszNewItem),将在菜单末尾添加一个单独菜单项。可以用一系列标志来设置fuFlages参数,用来指示菜单项的初始情形。例如,菜单项开始可能是失效的(使用MF_GRAYED标志)或者有一个选择标记在旁边(使用MF_CHECKED标志)。几乎所有的调用都会指定MF_STRING标志,表示lpszNewItem参数是包含菜单项文本的字符串。idNewItem表示用户选择的菜单项ID或者需要改变的菜单项的状态。
添加菜单项的另一种方法是调用BOOL InsertMenu(HMENU hMenu, UINT uPosition, UINT uFlags, UINT uIDNewItem, LPCTSTR lpNewItem);
该函数与AppendMenu类似,但增加了灵活性,菜单项可以插到菜单的任何位置。对该函数来说,可以传给uFlags两个附加标志之一:MF_BYCOMMAND或MF_BYPOSITION,用来指出如何确定菜单项在菜单里的位置。
菜单可以采用嵌套来达到级联效果。要增加一个级联菜单或者子菜单,可以使用HMENU CreatePopMenu(void)来创建您想绑定的菜单,再用InsertMenu或者AppendMenu来构造该菜单,之后通过把标志位设置为MF_POPUP,调用InsertMenu或者AppendMenu来将该子菜单插入或者附加到主菜单上。在这种情况下,uIDNewItem包含的是子菜单的句柄,而lpNewItem包含的是显示在菜单项里的字符串。
有许多函数可以让您查询或者操纵菜单项,完成增加/去除选择标记、有效/无效菜单项等。
用函数EnableMenuItem来使菜单项有效/失效。
其函数原型如下:BOOL EnableMenuItem (HMENU hMenu, UINT uIDEnableItem, UINT uEnable);
uEnable中使用的标志和其它菜单函数中用的标志类似。在Windows CE中,使用MF_GRAYED而不是MF_DISABLED标志来使菜单项失效。
用函数CheckMenuItem来选择菜单项/去除选择。
其函数原型如下:DWORD CheckMenuItem (HMENU hmenu, UINT uIDCheckItem, UINT uCheck);
还有许多其它函数可以用来查询和操纵菜单项。要获取更多细节,请参阅SDK文档。
下面的代码片段创建了一个简单的菜单结构:
hMainMenu = CreateMenu ();
hMenu = CreatePopupMenu ();
AppendMenu (hMenu, MF_STRING | MF_ENABLED, 100, TEXT ("&New"));
AppendMenu (hMenu, MF_STRING | MF_ENABLED, 101, TEXT ("&Open"));
AppendMenu (hMenu, MF_STRING | MF_ENABLED, 101, TEXT ("&Save"));
AppendMenu (hMenu, MF_STRING | MF_ENABLED, 101, TEXT ("E&xit"));
AppendMenu (hMainMenu, MF_STRING | MF_ENABLED | MF_POPUP, (UINT)hMenu, TEXT ("&File"));
hMenu = CreatePopupMenu ();
AppendMenu (hMenu, MF_STRING | MF_ENABLED, 100, TEXT ("C&ut"));
AppendMenu (hMenu, MF_STRING | MF_ENABLED, 101, TEXT ("&Copy"));
AppendMenu (hMenu, MF_STRING | MF_ENABLED, 101, TEXT ("&Paste"));
AppendMenu (hMainMenu, MF_STRING | MF_ENABLED | MF_POPUP, (UINT)hMenu, TEXT ("&Edit"));
hMenu = CreatePopupMenu ();
AppendMenu (hMenu, MF_STRING | MF_ENABLED, 100, TEXT ("&About"));
AppendMenu (hMainMenu, MF_STRING | MF_ENABLED | MF_POPUP, (UINT)hMenu, TEXT ("&Help"));
一旦创建完菜单,就可以使用TrackPopupMenu来显示它。函数原型如下:
BOOL TrackPopupMenu (HMENU hMenu, UINT uFlags, int x, int y, HWND hWnd, LPTPMPARAMS lptpm);
第一个参数是菜单句柄。根据位置参数x和y,标志位uFlags用来设置菜单的对齐方式,其中一个标志TPM_RETURNCMD,会让函数返回被选择的菜单项的ID,而不是发送一个WM_COMMAND消息。hwnd是接收所有与菜单相关消息的窗口句柄,其中也包括用户选择菜单项时产生的WM_COMMAND消息。最后一个参数lptpm,是指向TPMPARAMS结构的指针,该结构包含一个尺寸值和一个矩形结构。矩形结构定义了菜单不能覆盖的屏幕矩形。如果没有要排除的矩形,则该参数可以是null。
处理菜单命令
当用户选择了一个菜单项,Windows会向拥有该菜单的窗口发送WM_COMMAND消息。wParam的低字位包含被选择的菜单项的ID。其高字位则包含通知码,对“菜单选择”这个动作来说,该值总是0。由选择菜单引发的WM_COMMAND消息,其lParam是0。所以为了响应一个菜单选择动作,窗口需要回应WM_COMMAND消息,解析出传入的ID,并根据选择的菜单项进行响应。
既然我已经涉及了菜单创建的基本过程,您可能想知道创建菜单的代码在Windows程序的哪里。我的回答是,它不存在。除了在运行中动态创建菜单外,大部分Windows程序都是简单的从资源中装载一个菜单模板。要了解更多关于资源的知识,就让我们用本章剩余的部分来看一看资源吧。
分享到:
相关推荐
lazarus-1.0.8-fpc-2.6.2-cross-arm-wince-win32 freepascal 用于开发WINCE程序
标题 "Lazarus-0.9.28.2-fpc-2.2.4-cross-arm-wince-win32" 暗示了一个用于开发针对Windows CE(掌上设备操作系统)应用程序的开源集成开发环境(IDE)——Lazarus的一个特定版本。Lazarus是Free Pascal编译器(FPC...
标题 "hobd汉化版-wince" 指向的是一个专为Windows CE(Wince)操作系统汉化的HOBD软件版本。HOBD,全称是"Handy OBD-II",是一款用于汽车诊断的工具,它可以连接到车辆的OBD-II接口,读取并解析车载计算机的数据,...
《WINCE程序设计》深入解析 Windows CE(简称WinCE)是微软公司开发的一款嵌入式操作系统,主要用于掌上设备、工业控制、汽车电子、医疗设备等领域的应用。它的设计思路是将完整的Windows桌面系统精简,形成一个轻...
描述中的".net-cf-wince-curve.rar"是一个包含用于Windows CE平台的曲线绘制控件的压缩文件。该控件可能提供API和方法,使开发者能够轻松地在Wince设备上生成实时数据曲线,这对于需要实时监测和分析数据的科学仪器...
C# 各种文件格式的转换 ----winCE试验版 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软 主要包括C# ASP.NET SQLDBA 源码 毕业设计 开题报告 答辩PPT等
首先,你需要下载适用于Windows CE的Qt源代码包,例如`qt-embedded-wince-opensource-src-4.4.0.zip`。 2. **安装Visual Studio 2005** 安装Visual Studio 2005是必要的,因为Qt的构建系统依赖于其编译器。在安装...
- Qt的嵌入式开发包:qt-embedded-wince-opensource-src-4.4.0.zip - Microsoft Visual Studio 2005 (VS2005),用于编译和调试 - Windows Mobile 5.0 Pocket PC SDK,提供针对Windows CE的开发环境 - Microsoft ...
- .NET Compact Framework:微软提供的.NET框架的精简版,允许开发者使用C#或VB.NET开发WinCE应用程序,享受丰富的类库和垃圾回收机制。 - WinAPI:WinCE提供了一套与Windows桌面系统类似的API,使得移植Windows...
兼容wince5.0/6.0 以下列出的是调试通过的型号列表,仅供参考. 1. WCDMA/DSDPA: Hua Wei E180 Hua Wei E220 Hua Wei E1750(Modem:COM6,ATCMD:COM8,COM7 not use) Hua Wei E1550 Hua Wei E156G(Modem:COM6,ATCMD:...
IDA教程-WinCE ARM调试器入门教程.pdf
本教程将深入探讨Wince程序设计的基础与高级特性,帮助初学者快速掌握这一领域的核心技能。 一、Windows CE概述 Windows CE是一个可裁剪、实时的、32位的操作系统,其设计目标是满足小型设备的特定需求。它提供了...
wince程序设计中文影印版 积分要多了,不好意思,我也不知道怎么取消 一共三个压缩包,须全部下载了解压,只让传10m,没办法啊 part1 http://download.csdn.net/source/257557 part2 ...
"VS2005-CoreCon-x86-WINCE600"这个安装包就是专门为Windows CE 6.00平台的开发设计的,它包含了构建、调试和测试嵌入式应用程序所需的工具和组件。 首先,"CoreCon"是Visual Studio 2005中的核心连接组件,它是...
注意,WinCE可能不支持某些桌面版Qt的功能,所以需要查阅文档以确认兼容性。 3. **配置项目**: 配置项目文件(.pro),确保它指定了正确的Qt模块和WinCE特定的编译选项。 4. **编译和调试**: 在开发环境中编译项目,...
标题中的“Image-update--WinCE-6.0.rar_gk7000_update WINCE_wince 6.0”指的是一个针对Windows CE 6.0操作系统进行更新的镜像文件,该更新是针对名为“gk7000”的特定硬件平台设计的。在Windows CE系统中,"image...
"基于ARM-WinCE的电机监控系统设计" 本文将对基于ARM-WinCE的电机监控系统设计进行详细的介绍,包括系统设计、系统结构、硬件电路设计、软件设计和测试过程等方面。 系统设计 基于ARM-WinCE的电机监控系统设计是...
- **实验目的**: 掌握使用MFC框架开发WinCE应用程序的方法。 - **实验内容**: - 设计简单的用户界面。 - 实现基本的应用逻辑。 - 测试应用程序的功能。 #### 4.3 基于WINCEDIRECTSHOW的多媒体播放机实验 - **...
EVC(Embedded Visual C++)是微软为开发WinCE应用程序提供的集成开发环境。 STL-WinCE是针对Windows CE平台定制的STL版本,它允许开发者在WinCE系统中使用如向量(vector)、列表(list)、映射(map)、集合(set...