《WIN32汇编语言程序设计》开发时关于程序与资源脚本中的等值定义的意义

之前一直没有确切地弄明白在主程序中进行等值定义的含义和作用。今天在读汇编语言相关书籍的例子时自己总结了一下,在此记录如下:

首先来看MenuHelp函数:

invoke MenuHelp,uMsg,wParam,lParam,hMenu,hInstance,hwndStatus,lpwIDs

显然这个逻辑在这里是这样实现的:在收到windows对于菜单类型的描述消息后,程序首先寻找程序中调用函数的对应参数, 在此是该函数参数IpwIDs的第二个双字。lpwIDs指向一个包含4个双字的数组,用来指定函数装入的字符串的ID值基数,第一个双字指定命令菜单项的基数,第二个双字指定弹出式菜单的基数。

本例中参数IpwIDs的值设置为dwMenuHelp    dd    0,IDM_MENUHELP,0,0

所以本例中第二个双字就是IDM_MENUHELP。然后基数+菜单ID就等于需要显示的字符串ID。

而在程序代码中做的等值定义IDM_MENUHELP=1300. 由于弹出式菜单没有ID,系统按照菜单的索引号(在资源脚本中菜单段中popup是第几个索引就是几)加上基数当做字符串ID

然后程序计算windows系统返回的索引号+基数的值后去资源脚本中的字符串列表——也就是stringtable    discardable段中寻找提示信息。因为IDM_MENUHELP在资源脚本中已经做了等值定义,因此如果windows返回的值是1301,则在字符串列表中找到IDM_MENUHELP+1。

注:例子为《WIN32汇编语言程序设计》9.2的STATUSBAR,相关代码在附带光盘文件中可以查找到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值