MenuHelp

更新时间:2022-11-16 00:27:46 阅读: 评论:0

正文

很多程序都是有菜单和状态栏,当用鼠标点开菜单移动选择各菜单项的时候,会在状态栏显示关于该菜单项的说明。这个功能MFC是封装好的,用向导生成即可,但用API编程就得自己编写代码了,查了一下MSDN,有个MenuHelp函数可以做到,函数原型为:

void MenuHelp(

UINT uMsg,

WPARAM wParam,

LPARAM lParam,

HMENU hMainMenu,

HINSTANCEhInst,

HWND hwndStatus,

LPUINT lpWIDS

);

前面的参数好理解,关键是最后一个参数lpwIDs,MSDN说明是一个UINT数组指针,数组元素必须是成对的,第一个是字符串资源ID,第二个是菜单句柄,想想好象比较麻烦,得在程序加载菜单后得到每个菜单项的句柄然后填写这个数组?不厌其烦写了代码一试,却满不是那么回事,根本不起作用。于是看了看MFC的源代码,晕,居然没用这个函数,是自己处理的。再找其他SDK写的例程,发现这个数组只有4个元素,两对,第二对是0,0,标志数组结束,第一对中的字符串资源ID在资源中根本没有,第二个菜单句柄值为0x1100,代码中也没有再对这个数组进行操作了,但却能正常工作,这下更晕了。仔细研究了这个“神奇”的程序,终于知道了MenuHelp的用法:

UINT wIDs[] = {MH_BASE,0x1100,0,0}

这个MH_BASE可以随便定义一个数值,不过必须保证该值加上菜单命令ID的数值后不能超过0xFFFF。

然后在资源中加入帮助字符串,该字符串的资源ID必须是MH_BASE加上相应的菜单命令ID。而子菜单的字符串的资源ID必须是0x1100加上相应的序号,这个子菜单的帮助字符串是指:比如菜单上一般都会有“文件”这个菜单项,点开“文件”会弹出下拉菜单,显示“打开”,“关闭”等,鼠标移到这两个选项上在状态栏分别显示“打开文件”和“关闭”,而移出这两个选项并且下拉菜单未关闭,则会显示这个子菜单的帮助字符串“文件操作”。第二个子菜单比如“编辑”的帮助字符串资源ID就是0x1100+1。

比如菜单中“打开”和“关闭”的命令ID分别为CM_OPEN和CM_CLOSE,就需要在资源中如下定义字符串:

STRINGTABLE DISCARDABLE

BEGIN

MH_BASE + CM_OPEN 打开文件

MH_BASE + CM_CLOSE 关闭

0x1100 + 0 文件操作

END

程序中响应WM_MENUSELECT消息,在其中调用MenuHelp(WM_MENUSELECT,wParam,lParam,GetMenu(hWnd),hInstance,hStatusWnd,wIDs);就可以了。

本文发布于:2022-11-16 00:27:46,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/83/489819.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:HelpScribble
下一篇:HELP乐队
标签:MenuHelp
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图