很多程序都是有菜单和状态栏,当用鼠标点开菜单移动选择各菜单项的时候,会在状态栏显示关于该菜单项的说明。这个功能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小时内删除。
留言与评论(共有 0 条评论) |