词条 | MenuHelp |
释义 | 很多程序都是有菜单和状态栏,当用鼠标点开菜单移动选择各菜单项的时候,会在状态栏显示关于该菜单项的说明。这个功能MFC是封装好的,用向导生成即可,但用API编程就得自己编写代码了,查了一下MSDN,有个MenuHelp函数可以做到,函数原型为: void MenuHelp( UINT uMsg, WPARAM wParam, LPARAM lParam, HMENU hMainMenu, HINSTANCE hInst, 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);就可以了。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。