WIN 下的超动态菜单(一)
WIN 下的超动态菜单(一)介绍
作者:黄山松,发表于博客园:http://www.cnblogs.com/tomview/
WINDOWS 编程中,通常弹出菜单的方法是在资源文件中建立菜单资源,然后在程序中装载资源显示菜单;另外可以用动态创建菜单的方法,但是逐次调用创建菜单添加菜单项的函数很麻烦。本文给出一个封装的自动创建动态菜单的类。
此类 auto_dynamenu 中只有一个静态函数 dynamenu,封装到类中的原因是这样可以把函数体放在头文件里面,使用的时候,直接包含头文件就可以了,不需要在工程内部添加实现文件,使用方便,这也是这个类叫做 auto_… 的原因。
叫超动态菜单的原因是各种菜单都可以非常容易地通过按照格式写简单的字符串来实现,不需要创建菜单资源,不需要再手工调用WIN32菜单函数,非常方便创建各种复杂的菜单。在代码中随时随地,通过写一个菜单的字符串就可以再通过一个函数调用显示菜单,获取菜单的选择。
先举几个例子:
【1】显示普通动态菜单:
char szMenu[] = "选项1=1\n"
"选项2=2\n"
"~\n"
"选项3=3\n"
; int index = auto_dynamenu::dynamenu(GetSafeHwnd(), 0, szMenu, 0, 0);

【2】显示多级动态普通菜单
char szMenu[] = "第一组|选项1=1\n"
"第一组|选项2=2\n"
"~\n"
"第二组|选项3=3\n"
; int index = auto_dynamenu::dynamenu(GetSafeHwnd(), 0, szMenu, 0, 0);

【3】显示有标记的菜单
char szMenu[] =
"第一组|^选项1=1\n"
"第一组|选项2=2\n"
"第一组|~\n"
"第一组|*选项3=3\n"
"第一组|选项4=4\n"
"~\n"
"第二组|#禁用的菜单=5\n"
"~\n"
"#禁用的菜单(灰色)=6\n"
;
int index = auto_dynamenu::dynamenu(GetSafeHwnd(), 0, szMenu, 0, 0);

【4】通过动态菜单设置标记位
自动在该位标记为1的选项上显示选中标记,菜单中可以有多个项有选中标记。
char szMenu[] =
"标记1=1\n"
"标记2=2\n"
"标记3=4\n"
"标记4=8\n"
"标记5=0x10\n"
"标记6=0x20\n"
"标记7=0x40\n"
"标记8=0x80\n"
;
flags = (DWORD)auto_dynamenu::dynamenu(GetSafeHwnd(), 0, szMenu, 2, flags);

【5】通过菜单选择整数值
自动在选定的整数选项前加选中标记,菜单项中仅有一项相等的数值的选中。
char szMenu[] =
"整数1=1\n"
"整数20=20\n"
"整数32=32\n"
"整数0x99=0x99\n"
; val = auto_dynamenu::dynamenu(GetSafeHwnd(), 0, szMenu, 1, val);

【6】根据程序数据生成动态的菜单字符串
手动管理每个菜单选项前面的选中标记。
char szMenu[1024] = {0};
int n = 0;
if (value == 2)
n += sprintf(szMenu + n, "^");
n += sprintf(szMenu + n, "值2=2\n");
if (value == 4)
n += sprintf(szMenu + n, "^");
n += sprintf(szMenu + n, "值4=4\n");
value = auto_dynamenu::dynamenu(GetSafeHwnd(), 0, szMenu, 0, 0);

【7】返回字符串的菜单
char szMenu[] =
"字符串1=字符串值1\n" //选这个选项,返回等号后字符串“字符串值1”
"字符串2\n" //这个选项没有等号,选这个选项,返回菜单字符串“字符串2”
; int index = auto_dynamenu::dynamenu(GetSafeHwnd(), 0, szMenu, 0, 0);
if (index != 0)
{
char* string = (char*)index;
}

【8】可以自动确定显示菜单的位置
可以指定显示菜单的坐标位置,也可以自动根据鼠标的当前位置的控件类型自动确定显示的菜单位置。譬如,自动显示在按钮的下方,显示在工具栏按钮的下方,显示在列表当前项的下方等,如下图所示:




下载
可以在下面的链接下载代码和示例程序:
http://files.cnblogs.com/files/tomview/dynamenu_20160524.rar
WIN 下的超动态菜单(一)的更多相关文章
- WIN 下的超动态菜单(三)代码
WIN 下的超动态菜单(一)简介 WIN 下的超动态菜单(二)用法 WIN 下的超动态菜单(三)代码 作者:黄山松,发表于博客园:http://www.cnblogs.com/tomview/ 超动态 ...
- WIN 下的超动态菜单(二)用法
WIN 下的超动态菜单(一)简介 WIN 下的超动态菜单(二)用法 WIN 下的超动态菜单(三)代码 作者:黄山松,发表于博客园:http://www.cnblogs.com/tomview/ ...
- Win下必备利器之Cmder
诚言,对于开发码字者,Mac和Linux果断要比Windows更贴心;但只要折腾下,Windows下也是有不少利器的.之前就有在Windows下效率必备软件一文中对此做了下记载:其虽没oh-my-zs ...
- 实战android菜单项之XML加载菜单与动态菜单项[转]
原文地址:http://blog.csdn.net/kaiwii/article/details/7767225 自定义android应用程序的菜单项首先要知道切入点.经过学习,知道主要是两个Acti ...
- [vim]vim 在win下乱码解决
vim在win下遇到汉字乱码早就知晓,本以为通过如下设置即可解决乱码问题 set encoding=utf-8 set fileencoding=utf-8,chinese 这样设置是可以解决源码文件 ...
- JS打字效果的动态菜单代码分享
这篇文章主要介绍了JS打字效果的动态菜单,推荐给大家,有需要的小伙伴可以参考下. 这是一款基于javascript实现的打字效果的动态菜单特效代码,分享给大家学习学习. 小提示:浏览器中如果不能正常运 ...
- win下 git gui 使用教程
现在很多都有git来托管项目或者来查找资料,但是看起来操作不是很方便,现在由于win下可以直接使用git gui,让使用git变得方便,当然这只是针对日常简单的使用,如果想详细的使用,可以去参考廖学峰 ...
- 两款【linux字符界面下】显示【菜单】,【选项】的powershell脚本模块介绍
两款[linux字符界面下]显示[菜单],[选项]的powershell脚本模块介绍 powershell linux ps1 menu choice Multiselect 传教士 菜单 powe ...
- 【vue】iView-admin2.0动态菜单路由
vue项目实现动态路由有俩种方式 一.前端在routers中写好--所有--路由表 <前端控制路由>,登录时根据用户的角色权限来动态的显示菜单路由 二.前端通过调用接口请求拿到当前用户-- ...
随机推荐
- Mac 连接阿里云服务器
1. 通过命令行连接 Server 并设置 1.1 连接 Server #: ssh root@hctec.top ssh: 远程连接工具 root: 远程服务器用户名, 此处我用的是: root 用 ...
- LR常见问题整理
1.LoadRunner录制脚本时为什么不弹出IE浏览器? 当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决. LR11 无法弹出ie浏览 ...
- [TypeScript] Dictionary范例
[TypeScript] Dictionary范例 Playground http://tinyurl.com/o7czcxo Samples class Dictionary { [index: s ...
- Trumbowyg - 轻量的 WYSIWYG 编辑器
Trumbowyg 是一个轻量,可定制的 jQuery 所见即所得(WYSIWYG)的编辑器插件.美丽的设计,生成语义化代码,带有功能强大的 API .编辑器和生成的代码进行了优化以支持 HTML5. ...
- 使用 HTML5 Canvas 绘制出惊艳的水滴效果
HTML5 在不久前正式成为推荐标准,标志着全新的 Web 时代已经来临.在众多 HTML5 特性中,Canvas 元素用于在网页上绘制图形,该元素标签强大之处在于可以直接在 HTML 上进行图形操作 ...
- 【web前端面试题整理06】成都第一弹,邂逅聚美优品
前言 上周四回了成都,休息了一下下,工作问题还是需要解决的,于是今天去面试了一下,现在面试回来了,我感觉还是可以整理一下心得. 这个面试题整理系列是为了以后前端方面的兄弟面试时候可以得到一点点帮助,因 ...
- [deviceone开发]-土地销售App开源
一.简介 这个是一个真实项目改造开源,虽然不是很花哨,但是中规中矩,小细节处理的也很好,非常值得参考和借鉴.里面的数据都缓存到本地,可以离线运行,但是调整一下代码,马上就可以和服务端完全对接.后续会有 ...
- word开发遇到的问题
1.系统不能安装多个office word版本,建议只安装一个2003版本,越完整越好. 2.安装时候ghost系统会遇到问题,由于很多组件没有完整的安装,因此缺少了很多安装时文件保护要进行提醒的dl ...
- SharePoint回环检查(Loopback Check)相关问题
Loopback Check(回环检查)本来不是一个SharePoint问题,是Windows Server为了增强自身安全性在Server 2003 SP1后引入的一个功能, 在近几个月中导致了一系 ...
- SharePoint 2010 人员选择器搜索范围的限定
客户AD中用户信息过多,而当前的SharePoint应用中不需要针对所有AD进行筛选,则需要通过STSADM来设置搜索范围: stsadm -o setsiteuseraccountdirectory ...