鱼C论坛

 找回密码
 立即注册
查看: 2123|回复: 8

EAX & MF_CHECKED 的疑问

[复制链接]
发表于 2014-10-11 20:44:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
invoke        GetMenuState,hMenu,EBX,MF_BYCOMMAND
                        .IF EAX  &  MF_CHECKED       
                                MOV EAX,MF_UNCHECKED
                        .else e
                                MOV EAX,MF_CHECKED
                        .endif

我搞不明白的就是 EAX  &  MF_CHECKED           这是怎么确定 EAX  就是等于  MF_CHECKED,这不是 按位与 操作吗,如果是        EAX  ==  MF_CHECKED         这样写我还明白,   求解释


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-12 01:21:03 | 显示全部楼层
.if   eax   ;如果eax为真
.if   !eax  ;如果eax不为真

.IF EAX  &  MF_CHECKED  
API返回值eax 和 MF_CHECKED 与运算后,如果eax和MF_CHECKED一致,那么就是真了(与运算两边都是真才是真)
其实和EAX  ==  MF_CHECKED差不多,说法是传说这样运行快点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-12 13:21:09 | 显示全部楼层
dAb 发表于 2014-10-12 01:21
.if   eax   ;如果eax为真
.if   !eax  ;如果eax不为真

API返回值eax 和 MF_CHECKED 与运算后,  如果eax和MF_CHECKED一致,那么就是真了  

& 这个是 按位与运算,是不是说如果 eax & MF_CHECKED  他们的结果还是 eax 那就表示他们相等?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-12 17:03:17 | 显示全部楼层
xiaosawanjava 发表于 2014-10-12 13:21
API返回值eax 和 MF_CHECKED 与运算后,  如果eax和MF_CHECKED一致,那么就是真了  

& 这个是 按位与 ...

与运算后结果只有真或假,MF_CHECKED是8,GetMenuState的返回值eax如果也是8,那么就是8和8进行与运行,结果当然是真了   
.IF EAX  &  MF_CHECKED    和    .IF EAX  ==  MF_CHECKED    可以当一样理解
所以 他们的结果还是 eax 那就表示他们相等? 应该说 他们的结果是真那就表示他们相等

GetMenuState

库:user32
获取指定菜单条目的状态
返回值
一系列标志的组合,请看下表。
如条目是个弹出式菜单,那么结构的最低字节就包含了状态标志,而第二个字节包含条目在弹出式菜单中的数量MF_HILITE 菜单条目加亮显示(处于选定状态)
MF_CHECKED 菜单条目处于复选状态
MF_DISABLED 菜单条目处于禁止状态
MF_GRAYED 菜单条目以灰色显示,处于禁用状态
MF_MENUBARBREAK 为这个条目指定一条分隔线。参考ModifyMenu函数
MF_MENUBREAK 为这个条目指定一个菜单分隔标志。参考ModifyMenu函数
MF_SEPARATOR 菜单条目是一个分隔符


格式
GetMenuState  hMenu, wID, wFlags
参数 说明
hMenu 指定的窗口句柄
wID 欲检查的菜单条目的标识符。如果在wFlags参数中设置了MF_BYCOMMAND标志,这个参数就用于指定要改变的菜单条目的命令ID。如果设置的是MF_BYPOSITION标志,这个参数就用于指定条目在菜单中的位置(第一个条目的位置为0)
wFlags 常数MF_BYCOMMAND或MF_BYPOSITION,取决于wID参数的设置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-12 21:28:17 | 显示全部楼层
dAb 发表于 2014-10-12 17:03
与运算后结果只有真或假,MF_CHECKED是8,GetMenuState的返回值eax如果也是8,那么就是8和8进行与运行, ...

假如 eax 是8   那就是   8 & 8   我搞不懂这个 &  到底是什么运算,这个& 是相当于 c 语言的 && 吗,如果是的话,那 8 & 8   两边不为零 肯定是真  ,如果是汇编的 按位与 运算   那结果就是8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-12 22:12:42 | 显示全部楼层
Win32汇编的是
&   与
&& 逻辑与

不必纠结了,你以后就写 ==  一样的  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-13 19:14:20 | 显示全部楼层
dAb 发表于 2014-10-12 22:12
Win32汇编的是
&   与
&& 逻辑与

  大神,别放弃我。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-13 23:01:22 | 显示全部楼层
不会,帮楼主顶上去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2014-10-31 23:49:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-18 18:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表