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中写好--所有--路由表 <前端控制路由>,登录时根据用户的角色权限来动态的显示菜单路由 二.前端通过调用接口请求拿到当前用户-- ...
随机推荐
- Java 经典实例: Unicode字符和String之间的转换
在Java诞生之际,Unicode码是一个16位的字符集,因此char值似乎顺其自然为16位宽,多年来一个char变量几乎可以表示任何Unicode字符. /** * Created by Frank ...
- Java final数据
许多程序设计语言都有自己的办法告诉编译器某个数据是"常数".常数主要应用于下述两个方面: 1)编译期常数,它永远不会改变: 2)在运行期间初始化的一个值,我们不希望它发生变化.ss ...
- 为jQuery-easyui的tab组件添加右键菜单功能
加入了右击TAB选项卡时显示关闭的上下文菜单 具体实现代码: 右键菜单 HTML: <div id="mm" class="easyui-menu" st ...
- svg-高斯模糊+swiper伦播
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 如何理解javascript closure ?
接触过javascript的人应该听过闭包(closure),有一种观点认为是闭包赋予了javascript的强大能力,也赋予了它具备OOP的特征.既然javascript closure如此重要,那 ...
- javascript通用事件封装
随着最近几年Html5的兴起,越来越多的应用采用html5进行实现,一个优秀的网页应用不但需要美观简洁的UI界面,更需要一个良好的交互.网页应用大部分的交互需要用javascript事件进行实现.虽然 ...
- [deviceone开发]-do_Viewshower的动画效果示例
一.简介 do_Viewshower组件也支持View之间的过场动画,支持大概12种,这个示例随机的切换12种动画中的一种,而且每次切换的动画时间不一样.直观的展示12种动画的效果.适合初学者. 二. ...
- python任务执行之线程,进程,与协程
一.线程 线程为程序中执行任务的最小单元,由Threading模块提供了相关操作,线程适合于IO操作密集的情况下使用 #!/usr/bin/env python # -*- coding:utf-8 ...
- web代理工具WebScarab
- 服务 {49A27252-A326-4EF1-B698-6EBC7068833C} 的计时器作业 id {573BE459-DF82-481C-84BD-CA14D287450B} 配置刷新的上一个实例仍在运行,因此将跳过当前的实例。请考虑增加作业之间的时间间隔。
在SharePoint2007的错误日志中发现大量如下错误: 07/02/2013 16:17:25.99 OWSTIMER.EXE (0x0958) 0x097C Window ...