神奇的汇编(六)

菜单和加速键是我一直都没有怎么用的东西,也没有仔细的去研究它,其实它是用一个脚本文件(.rc)来编写,同时也是用专门的编译器(同样叫rc.exe,vs自带的)来编译的。

菜单的定义和加速键的定义一般都有自己的格式,这里不重复了,但是要提一点的是,每个资源都要有一个资源号,通常是个16位的整数
每种资源这个号必须唯一

一般在程序中需要通过 loadmenu loadaccelerator 来读取这个模块的资源,使用这个资源号来表明读取那个资源。

对于加速键来说,它就是一个快速启动菜单功能的东西,它通常是一个键的定义对于一个command id,这个id和菜单项的command id要一样,这样
在使用加速键的时候就直接和这个菜单项的功能对应起来了。


对于加速键,当用户在窗口中使用的时候,会产生一个keydown消息,这个消息中带有了按键的信息,而这个信息并不是程序要处理的按键信息,而
是要将它做为一个command消息来处理,为了解决这个问题,消息循环通常这么些
   .while TRUE
          invoke GetMessage,addr @stMsg,NULL,0,0
          .break  .if eax==0
          invoke  TranslateAccelerator,hWinMain,@hAccelerator,addr @stMsg
          .if  eax ==0
                 invoke TranslateMessage ...
                 invoke DispatchMessage ...
          .endif
   .endw

TranslateAccelerator 函数收到keydown消息会加载加速键表,同时将收到的键在表中比较,如果发现了,则将相对应的command id包在WM_COMMAMD重发给消息
队列,同时返回TRUE,否则它返回FALSE,直接由TranslateMessage DispatchMessage 来处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值