首页
归档
友情链接
关于
Search
1
在wsl2中安装archlinux
80 阅读
2
nvim番外之将配置的插件管理器更新为lazy
58 阅读
3
2018总结与2019规划
54 阅读
4
PDF标准详解(五)——图形状态
33 阅读
5
为 MariaDB 配置远程访问权限
30 阅读
心灵鸡汤
软件与环境配置
博客搭建
从0开始配置vim
Vim 从嫌弃到依赖
archlinux
Emacs
MySQL
Git与Github
AndroidStudio
cmake
读书笔记
菜谱
编程
PDF 标准
从0自制解释器
qt
C/C++语言
Windows 编程
Python
Java
算法与数据结构
PE结构
登录
Search
标签搜索
c++
c
学习笔记
windows
文本操作术
编辑器
NeoVim
Vim
win32
VimScript
emacs
Java
linux
文本编辑器
elisp
反汇编
OLEDB
数据库编程
数据结构
内核编程
Masimaro
累计撰写
309
篇文章
累计收到
27
条评论
首页
栏目
心灵鸡汤
软件与环境配置
博客搭建
从0开始配置vim
Vim 从嫌弃到依赖
archlinux
Emacs
MySQL
Git与Github
AndroidStudio
cmake
读书笔记
菜谱
编程
PDF 标准
从0自制解释器
qt
C/C++语言
Windows 编程
Python
Java
算法与数据结构
PE结构
页面
归档
友情链接
关于
搜索到
1
篇与
的结果
2015-07-15
Windows程序设计学习笔记(五)——菜单资源和加速键的使用
菜单可能是Windows提供的统一用户界面中最重要的一种方式,菜单通常在标题栏的下一行显示,这一栏叫做菜单栏,菜单栏中的每一项称之为菜单项,菜单栏中的每一个菜单项在激活时会显现一个下拉菜单(也可以说是它的子菜单),下拉菜单中也可以有多个菜单项,每个菜单项又可以有子菜单,每个菜单项都有一个唯一的数字标示,称为菜单项的ID,但是有子菜单的菜单项没有ID。用户点击某项后,会产生一个WM_COMMAND消息发送到其父窗口,该消息中包含了这个菜单项的ID。菜单的创建可以通过可视化的方法创建,也可以通过编写资源脚本的方式创建菜单资源,在这里重点说明如何通过脚本编写的方式创建菜单//Menu IDM_MENU MENU BEGIN POPUP "文件(&F)" BEGIN MENUITEM "打开(&O)", IDM_OPEN MENUITEM "关闭(&C)", IDM_OPTION MENUITEM SEPARATOR MENUITEM "关闭(&X)", IDM_EXIT END POPUP "查看(&V)" BEGIN MENUITEM "字体(&V)...\tAlt + F", IDM_SETFONT MENUITEM "背景色(&B)...\tCtrl + Alt + B", 40009 MENUITEM SEPARATOR MENUITEM "被禁用的菜单项", ID_40010, INACTIVE MENUITEM "变绘的菜单项", ID_40011, GRAYED MENUITEM "大图标(&G)", 40012 MENUITEM "小图标(&M)", IDM_SMALL MENUITEM "列表(&L)", 40015 MENUITEM SEPARATOR MENUITEM "详细信息(&D)", IDM_DETAIL POPUP "工具栏" BEGIN MENUITEM "标准按钮(&S)", 40019 MENUITEM "文字标签(&C)", 40020 MENUITEM "命令栏(&I)", 40021 END MENUITEM "状态栏(&U)", 40022 END POPUP "帮助(&H)", HELP BEGIN MENUITEM "帮助主题(&H)\tF1", IDM_HELP MENUITEM "关于本程序(&A)...", 40025 END END IDA_MAIN ACCELERATORS BEGIN VK_F1, IDM_HELP, VIRTKEY, NOINVERT "B", IDM_SETCOLOR, VIRTKEY, CONTROL, ALT, NOINVERT "F", IDM_SETFONT, VIRTKEY, ALT, NOINVERT END下面来分析这段代码:首先是通过一些列的宏定义来定义各种菜单项的ID,菜单ID用于唯一标识一个菜单项,不同的菜单项所用的ID号应该不同除非这些菜单项完成相同的工作,菜单项的ID可以是16位的整数,同时菜单项也可以用字符串来表示,在调用相应的API函数的时候检测到这个值大于10000h的时候将它作为字符串指针,这个时候用字符串唯一标示菜单项,当这个数小于10000h时表示的是一个数字,这个时候用数字唯一标示。菜单在脚本中的定义格式为:菜单ID MENU [DISCARDABLE] BEGIN 菜单项的定义 END菜单ID:每个菜单都有的一个唯一的标示,可以是字符串,可以是数字。DISCARDABLE:菜单的内存属性,标示菜单在不再使用的时候可以暂时从内存中释放以节省内存菜单项的定义方法有3种分别对应不同类型的菜单项:MENUITEM 菜单文字,命令ID, [选项列表](用法1) MENUITEM SEPARATOR (用法2) popup 菜单文字 [,选项] BEGIN MENUITEM 菜单文字,命令ID, [选项列表] ......................... END (用法3)用法1:用于创建一个菜单项;用法2:用于创建一个分割符;用法3:用于创建一个菜单项的子菜单项;菜单文字:显示在菜单项上的文字,需要字符串中某个字母带下划线的话,可以在字母前面加上一个&符号,比如上面的“状态栏(&U)”,带下划线的字母被系统当做快捷键,比如我们点击查看菜单项,打开它的子菜单,在按下字母U就相当于直接点击菜单中的状态栏一项;命令ID:上述我们定义的菜单ID项,父窗口的WM_COMMAND消息的参数中带有这个值,通过这个值判断是哪个菜单项被点击;选项列表:用来定义菜单项的各种属性,他可以是下面的值:CHECKED——表示打上选定标志(菜单项前有一个钩)GRAYED——菜单项变灰INAVTIVE——菜单项不可用MENUBREAK或者MENUBARBREAK——表示这个菜单项和以后的菜单项在新的一列显示;对于popup后面的选项可以是下面值的一个:GRAYED——菜单项变灰INAVTIVE——菜单项不可用HELP——菜单项靠右边显示快捷键的定义格式为:快捷键ID ACCELERATORSBEGIN 键名, 命令 [, 类型] [,选项] END键名:表示加速键对应的按键,可以有3中方式定义:“^字母” :表示Ctrl加上字母”字母“:表示字母,这时类型必须指明为VIRTKEY数值:表示ASCii码为该数值的字母,这个时候类型必须指明为ASCii命令ID:按下加速键以后Windows向程序发送的命令ID,如果想把加速键和菜单项关联起来,这里就是相应的菜单项的ID类型:用以指定键的定义方式,可以是ASCii或者VIRTKEY选项:可以是Alt、control、shift中的一个或多个,表示这些键和键名定义的键一起组成一个快捷键菜单项的消息响应:菜单项的处理一般由菜单父窗口处理,菜单被选中中时会向其父窗口发送一条WM_COMMAND的消息,将该项的相关信息告诉给其父窗口,该消息的说明如下:WM_COMMAND wNotifyCode = HIWORD(wParam); // 通知码 若对应的资源为加速键该值为1,若为菜单项则为0 wID = LOWORD(wParam); // 菜单项、加速键、控件的ID hwndCtl = (HWND) lParam; // 控件句柄我们可以在WM_COMMAND消息的处理中添加如下的内容,让其显示我们选中的是那一项:if (IDM_HELP == LOWORD(wParam)) { MessageBox(hWnd, "您选中了帮助主题菜单项","提示", MB_OK); }当选择“帮助主题”的时候,会弹出一个消息框,如果按下F1键也会显示这样一个消息框,因为我们已经将加速键绑定到对应的菜单项上面。
2015年07月15日
6 阅读
0 评论
0 点赞