友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
读书室 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

windows环境下32位汇编语言程序设计-第22部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!

主菜单中的“查看”菜单,所以按鼠标右键弹出的菜单和下拉菜单中的“查看”菜单是一模一样的。



 
来源:电子工业出版社 作者:罗云彬 上一页         回书目         下一页          
上一页         回书目         下一页          
  


第5章 使用资源


5。1 菜单和加速键(7)

    
7。 菜单状态的检测和设置

在程序中经常要对菜单项的状态进行设置,如剪贴板中没有数据时,“粘贴”菜单项应该灰化,窗口中没有被选中的字符时,“拷贝”菜单项也应该灰化,这样可以给使用者一个善意的提醒。同样,对菜单的状态也常常需要检测,如查看菜单项的状态是否处于灰化状态或选中状态以便进行下一步操作等。

对菜单项状态的检测可以用GetMenuState函数来完成,用法是:

    invoke  GetMenuState;hMenu,uId,uFlags

参数hMenu是菜单的句柄,uId用来定位要检测的菜单项,当uFlags是MF_BYMAND的时候,uId用菜单项的命令ID指定,当uFlags是MF_BYPOSITION的时候,uId的值是位置索引,函数执行后的返回值为-1时表示失败,否则会是MF_CHECKED,MF_DISABLED,MF_GRAYED,MF_HILITE,MF_MENUBARBREAK,MF_MENUBREAK和MF_SEPARATOR的组合值,它们分别表示菜单项的状态是选中、禁用、灰化、高亮显示以及3种分隔线,读者可以用test指令测试相应的数据位来分辨菜单项处于哪种状态,一般的测试代码如下:

invoke    GetMenuState;hMenu;IDM_XXX;MF_BYMAND

。if       eax & MF_CHECKED

          ;表示IDM_XXX菜单项现在是选中状态

。endif

同样,读者也可以用eax & MF_DISABLED和eax & MF_GRAYED等条件测试其他状态。

设置菜单项的状态可以用下列3个函数来实现不同的功能:

invoke  EnableMenuItem;hMenu;uIDEnableItem;uEnable

invoke  CheckMenuItem;hMenu;uIDCheckItem;uCheck

invoke  CheckMenuRadioItem;hMenu;idFirst;idLast;idCheck;uFlags

EnableMenuItem函数将菜单项在禁用、可用和灰化状态之间切换,uEnable可以取值为MF_DISABLED,MF_ENABLED和MF_GRAYED,分别代表这3种状态。

CheckMenuItem函数将菜单项在非互斥的选定状态和非选定状态之间切换(即前面是否有对钩),uCheck的取值可以是MF_CHECKED或MF_UNCHECKED,代表选定或非选定状态。

CheckMenuRadioItem将菜单项在互斥的选定状态和非选定状态之间切换(即前面是否有圆点标志),由于互斥的菜单项在一个范围内只有一个是可以选定的,当选定另一个的时候,原来的选定应该撤销,idFirst和idLast就指定了这个互斥范围。函数在选定idCheck指定的菜单项的同时将自动清除idFirst和idLast范围内的其他选定。所以uFlags中无需指定状态,只需指定MF_BYMAND或MF_BYPOSITION定位方法。

在这些函数的参数中,uIDEnableItem,uIDCheckItem,idFirst,idLast和idCheck用来定位菜单项,同样,参数的取值可以是菜单项的命令ID或位置索引,可以在状态参数(uEnable,uCheck,uFlags)中组合定义MF_BYMAND或MF_BYPOSITION来决定使用哪种方法。

在例子程序中,当选中IDM_TOOLBAR和IDM_STATUSBAR之间的菜单项的时候,程序先用invoke GetMenuState;hMenu;ebx;MF_BYMAND获取当前的状态,检查是否选定,并将选定状态反转后用CheckMenuItem重新设置:

。elseif eax 》=  IDM_TOOLBAR && eax =  IDM_BIG && eax 》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

#include           

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

#define   ICO_BIG            Ox1000

#define   ICO_SMALL          Ox1001

#define   CUR_2               Ox1000

#define   IDM_MAIN                Ox2000

#define   IDM_EXIT                Ox2101

#define   IDM_BIG             Ox2201

#define   IDM_SMALL          Ox2202

#define   IDM_CUR1                Ox2203

#define   IDM_CUR2                Ox2204

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

ICO_SMALL          ICON       〃Small。ico〃

ICO_BIG            ICON       〃Big。ico〃

CUR_2              CURSOR     〃2。cur〃

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

IDM_MAIN  menu     discardable

BEGIN

          popup    〃文件(&F)〃

          BEGIN

                   menuitem   〃退出(&X)〃;     IDM_EXIT

          END

          popup    〃图标和光标(&I)〃

          BEGIN

                   menuitem   〃大图标(&G)〃;   IDM_BIG

                   menuitem   〃小图标(&M)〃;   IDM_SMALL

                   menuitem   separator

                   menuitem   〃光标A(&A)〃;   IDM_CUR1

                   menuitem   〃光标B(&B)〃;   IDM_CUR2

          END

END

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

经过上一节的“洗礼”,读者对菜单的定义应该很熟悉了,这里就不再说明IDM_MAIN的定义了,脚�
返回目录 上一页 下一页 回到顶部 赞(2) 踩(5)
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!