EAX & MF_CHECKED 的疑问
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 这样写我还明白, 求解释
.if eax ;如果eax为真
.if !eax;如果eax不为真
.IF EAX&MF_CHECKED
API返回值eax 和 MF_CHECKED 与运算后,如果eax和MF_CHECKED一致,那么就是真了(与运算两边都是真才是真)
其实和EAX==MF_CHECKED差不多,说法是传说这样运行快点 dAb 发表于 2014-10-12 01:21
.if eax ;如果eax为真
.if !eax;如果eax不为真
API返回值eax 和 MF_CHECKED 与运算后,如果eax和MF_CHECKED一致,那么就是真了
& 这个是 按位与运算,是不是说如果 eax & MF_CHECKED他们的结果还是 eax 那就表示他们相等? 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 菜单条目是一个分隔符
格式
GetMenuStatehMenu, wID, wFlags
参数 说明
hMenu 指定的窗口句柄
wID 欲检查的菜单条目的标识符。如果在wFlags参数中设置了MF_BYCOMMAND标志,这个参数就用于指定要改变的菜单条目的命令ID。如果设置的是MF_BYPOSITION标志,这个参数就用于指定条目在菜单中的位置(第一个条目的位置为0)
wFlags 常数MF_BYCOMMAND或MF_BYPOSITION,取决于wID参数的设置
dAb 发表于 2014-10-12 17:03
与运算后结果只有真或假,MF_CHECKED是8,GetMenuState的返回值eax如果也是8,那么就是8和8进行与运行, ...
假如 eax 是8 那就是 8 & 8 我搞不懂这个 &到底是什么运算,这个& 是相当于 c 语言的 && 吗,如果是的话,那 8 & 8 两边不为零 肯定是真,如果是汇编的 按位与 运算 那结果就是8 Win32汇编的是
& 与
&& 逻辑与
不必纠结了,你以后就写 ==一样的 dAb 发表于 2014-10-12 22:12
Win32汇编的是
& 与
&& 逻辑与
大神,别放弃我。 不会,帮楼主顶上去
页:
[1]