
这次我们将在我们的应用程序中加入一个菜单。
MyMenu MENU
{
[menu list here]
}
这和C语言中的结构体的定义非常相似。 MyMenu类似于被定义的变量,而MENU则类似于关键字。当然您可以用另外一种办法,那就是用BEGIN和END来代替花括号,这和PASCAL语言中的风格相同。
在菜单项的列表中是一大串的MENUITEM和POPUP语句。MENUITEM定义了一个菜单项,当选择后不会激活对话框。它的语法如下:
MENUITEM "&text", ID [,options]
它由关键字MENUITEM开头,紧跟在MENUITEM后的是指菜单项的名称字符串,符号“&“后的第一个字符将会带下划线,它也是该菜单项的快捷键。ID的作用当该菜单被选中时,WINDOWS的消息处理过程用来区分菜单项用的。毫无疑问,ID号必须唯一。
options有以下可供选择的属性:
GRAYED 代表该菜单项处于非激活状态,即当其被选中时不会产生 WM_COMMAND 消息。该菜单以灰色显示。
INACTIVE 代表该菜单项处于非激活状态,即当其被选中时不会产生 WM_COMMAND 消息。该菜单以正常颜色显示。
MENUBREAK 该菜单项和随后的菜单项会显示在新列中。
HELP 该菜单项和随后的菜单项右对齐。
POPUP的语法如下:
POPUP "&text" [,options]
{
[menu list]
}
POPUP定义了一个菜单项当该菜单项被选中时又会弹出一个子菜单。

另外有一种特别类型的MENUITEM语句 MENUITEM SEPARATOR,它表示在菜单项位置画一条分隔线。定义完菜单后,您就可以在程序中使用脚本中定义的菜单资源了。您可以在程序的两个地方(或叫做用两种方式)使用它们:
在 WNDCLASSEX结构体的成员 lpszMenuName中。譬如,您有一个菜单“FirstMenu“,您可以按如下方法把它联系到您的窗口:
.DATA
MenuName db "FirstMenu",0
...........................
...........................
.CODE
...........................
mov wc.lpszMenuName, OFFSET MenuName
...........................
在 CreateWindowEx函数中指明菜单的句柄:
.DATA
MenuName db "FirstMenu",0
hMenu HMENU ?
...........................
...........................
.CODE
...........................
invoke LoadMenu, hInst, OFFSET MenuName
mov hMenu, eax
invoke CreateWindowEx,NULL,OFFSET ClsName,\
OFFSET Caption, WS_OVERLAPPEDWINDOW,\
CW_USEDEFAULT,CW_USEDEFAULT,\
CW_USEDEFAULT,CW_USEDEFAULT,\
NULL,\
hMenu,\
hInst,\
NULL\
...........................
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-74865-1.html
稍有政治常识的人们都很清楚