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中写好--所有--路由表 <前端控制路由>,登录时根据用户的角色权限来动态的显示菜单路由 二.前端通过调用接口请求拿到当前用户-- ...
随机推荐
- HTTP协议简解
1.什么是http协议 http协议: 浏览器客户端 与 服务器端 之间数据传输的规范 2.查看http协议的工具 1)使用火狐的firebug插件(右键->查看元素->网络) 2)使用 ...
- PHP两个数组相加
在PHP中,当两个数组相加时,会把第二个数组的取值添加到第一个数组上,同时覆盖掉下标相同的值: <?php $a = array("a" => "apple& ...
- CentOS安装zip unzip命令
yum install zip unzip
- 粒子动画Particleground.js
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 《Continuous Delivery》 Notes 2: Configuration Management
What is Configuration Management? Configuration Management refers to the process by which all artifa ...
- Python 获取一个对象的名字
Note: 这里的对象是广义的,一个列表也算 有name的不在讨论之列, 因为可以直接输出 没有name的,可以参考如下代码,使用到的是globals() except_word是用于过滤掉那些不想要 ...
- Resumable.js – 基于 HTML5 File API 的文件上传
Resumable.js 是一个 JavaScript 库,通过 HTML5 文件 API 提供,稳定和可恢复的批量上传功能.在上传大文件的时候通过每个文件分割成小块,每块在上传失败的时候,上传会不断 ...
- 如何获取应用宝APP ID
二百二维码支持绑定应用宝ID后,android 扫码下载后,微信直接下载APP,不打开应用宝页面,非常方便APP进行推广 那如何获取应用宝APP ID呢, 请参考下面的教程 一, 打开http: ...
- 你真的了解UIScrollView吗?
一:首先查看一下关于UIScrollView的定义 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIScrollView : UIView <NSCoding& ...
- NSString方法与NSMutableString方法
NSString方法+(id) stringWithContentsOfFile:path encoding:enc error:err创建一个新字符串并将其设置为path指定的文件的内容,使用字符编 ...