欢迎来到天天文库
浏览记录
ID:40771108
大小:51.63 KB
页数:6页
时间:2019-08-07
《黑客手册第八课 菜单》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、黑客手册第八课菜单本课中我们将在我们的应用程序中加入个菜单。例子1,2,理论:菜单可以说是WINDOWS最重要的元素之。有了它,用户可以方便地选择操作命令用户只要细读下所有的菜单项就可以明了应用程序所提供的大概功能,而且可以立即操作,无须去阅读手册了.正因为菜单给了用户种方便的方式,所以您在应用程序中加入菜单时就要遵守般的标准.譬如:般头两个菜单项是"File"和"Edit",最后是"Help",您可以在这中间插入您要定义的菜单项.如果所运行的菜单命令会弹出个对话框,那么就要在该菜单项后加入省略符(...)菜单是种资源,除菜单外还有其它像对话框,字符串,图标,位图资源等.
2、在链接时链接程序将把资源加入到可执行程序中去,最后我们的执行程序中就既包括机器指令又包括了资源.您可以在任何文本编辑器中编写脚本文件,在文件中您可以指定资源呈现出来的外观和其它的些属性当然更直观的方法是用资源编辑器,通常资源编辑器都打包在编译环境中,像Visua1C++,Bor1andC++等都带了资源编辑器我们可以按以下方式来定义个菜单资源:MyMenuMENU{[menulisthereJ这和C语言中的结构体的定义非常相似。MyMenu类似于被定义的变量,而MENU则类似于关键字。当然您可以用另外一种办法,那就是用BEGIN和END来代替花括号,这和PASCAL语言中
3、的风格相同。在菜单项的列表中是一大串的MENUITEM和问PUP语句。MENUITEM定义了一个菜单项,当选择后不会激活对话框。它的语法如下:MENU口EM飞text",ID[,optionsJ它由关键字MENUITEM开头,紧跟在MENUITEM后的是指菜单项的名称字符串,符号"&"后的第个字符将会带下画线,它也是该菜单项的快捷键。ID的作用当该菜单被选中时,WINDOWS的消息处理过程用来区分菜单项用的。毫无疑问,ID号必须唯。options有以下可供选择的属性:•GRAYED代表该菜单项处于非激活状态,即当其被选中时不会产生阳ωMMAND消息。该菜单以灰色显示。•I
4、NACTIVE代表该菜单项处于非激活状态,即当其被选中时不会产生阳COMMAND消息。该菜单以正常颜色显示。•ME阳BREAK该菜单项和随后的菜单项会显示在新列中。(译者注:比较难描述,请做实验。)•HELP该菜单项和随后的菜单项右对齐。(译者注:我在WINDOWS2000下编译有该标志的菜单项,该标志好像没起作用)您可以单独使用以上标志位,也可以把它们或在起。当然INACTIVE和GRAYED不能同时使用。POPUP的语法如下:POPUP飞text"[,optionsJ[menulistJ)POPUP定义了一个菜单项当该菜单项被选中时又会弹出一个子菜单。另外有一种特别类
5、型的MENUITEM语句MENUITEMSEPARATOR,它表示在菜单项位置画一条分隔线。定义完菜单后,您就可以在程序中使用脚本中定义的菜单资源了。您可以在程序的两个地方(或叫做用两种方式)使用它们:·在WNDCLASSEX结构体的成员lpszMenuName中。譬如,您有个菜单"FirstMenu",您可以按如下方法把它联系到您的窗口:.DATAMenuNamedb"FirstMenu",OFUHU口UEUmovwc.lpszMenuName,OFFSETMenuName.在CreateWindowEx函数中指明菜单的句柄:.DATAMenuNamedb"FirstM
6、enu",ObMenuHMENU?invokeLoadMenu,hlnst,OFFSETMenuNamemovhMenu,eaxinvokeCreateWindowEx,NULL,OFFSETClsName,OFFSETCaption,WSOVERLAPPEDWINDOW,CWUSEDEFAULT,CWUSEDEFAULT,CWUSEDEFAULT,CWUSEDEFAULT,NULL,bMenu,hlnst,NULLfg也许会问,这两着之间有什么不同呢?当您用第种方法时,由于是在窗口类中指定,故所有由该窗口类派生的窗口都将有相同的菜单。如果您想要从相同的类
7、中派生的窗口有不同的菜单那就要使用第二中方法,该方法中通过函数CreateWindowEx指定的菜单会"覆盖"WNDCLASSEX结构体中指定的菜单。接下来我们看看当用户选择了一个菜单项时它是如何通知WINDOWS窗口过程的:当用户选择了一个菜单项时,WINDOWS窗口过程会接收到一个阳COMMAND消息,传进来的参数wParam的底字节包含了菜单项的ID号。好了,上面就是关于菜单项的一切,下面我们就来实践。例子:第一个例子显示了指定一个菜单项的第一种方法:.386•r【lodelflat,stdcalloptioncasem
此文档下载收益归作者所有