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下配置WebDav
WebDav完全可以当成一个网络共享的文件服务器使用! # 1. 修改了两个配置文件 # 2. 创建web访问用户的用户名和口令 # 3. 创建了两个目录,并且设置了管理权限 # 切换目录 $ cd ...
- 每天一命令 git checkout
检出 checkout 是git常用命令之一.主要用于创建切换分支,覆盖本地修改等 git checkout 用于显示工作区,暂存区,版本库中文件的区别 git checkout -b branch ...
- JPA persistence
Play provides a set of very useful helpers to simplify the management of your JPA entities. Note tha ...
- CSDN数据库被爆 统计CSDN用户都喜欢哪些密码
今天有黑客在网上公开了知名网站CSDN的用户数据库,这是一次严重的暴库泄密事件,涉及到的账户总量高达600万个.有人写了一个小程序,统计了这次公布的 6428632 个 CSDN 哪些密码出镜率较高? ...
- 太可爱了!CSS3 & SVG 制作的米老鼠钟表
米老鼠是大家非常熟悉的迪斯尼动画形象.这是一个可爱的效果,结合 CSS & SVG 图形实现的米老鼠钟表效果.Web 技术让很多生活中的事物都能搬到网上去,后面的推荐阅读也有很多的效果,感兴趣 ...
- Aurelia – 模块化,简单,可测试的 JS 框架
Aurelia 是下一代 JavaScript 客户端框架,利用简单的约定来激发你的创造力.凭借其强大的专注于开发经验, Aurelia 可以使您不仅创造惊人的应用程序,同时也享受这个过程.它经过精心 ...
- 将PostGIS转化为GeoJSON
#!/usr/bin/env python # -*- coding: utf-8 -*- import psycopg2 import json from geojson import loads, ...
- [javascript svg fill stroke stroke-width circle 属性讲解] svg fill stroke stroke-width circle 属性 绘制圆形及引入方式讲解
<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...
- leetcode 第188题,我的解法,Best Time to Buy and Sell Stock IV
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...
- Java 静态语句块、语句块、构造函数执行顺序
class Parent{ static String name = "hello"; { System.out.println("3 parent block" ...