您的位置:首页 > 其它

Win32汇编之使用资源--菜单和加速键

2014-08-10 19:45 344 查看
///我们在使用软件时可以看到菜单、图标、版本信息等,它们是可执行文件的组成

   部分也是Windows中的不同类型的资源。这些资源并不在源码的数据段中定义,

   而是单独放在一个节区中,需要这些资源时必须借助API装入方可使用。///

使用资源-菜单和加速菜单
创建资源脚本文件menu.rc

因为在resource.h文件中包括了资源的预定义值,所以将resource.h文件包含到脚本文件头部方便使用。

将资源的引用(资源ID)用#define语句定义为便于记忆的字符串。

一、创建菜单

       编写一个菜单栏需要两个步骤:

      1、定义菜单

            菜单ID  MENU  [discardable]
            BEGIN
                      ......
            END

            菜单ID用来指定菜单的ID值,[discardable]指定内存属性

      2、定义菜单项目

           用法1--定义普通菜单:
                       MENUITEM 菜单文字,命令ID,[选项列表]

           用法2--菜单项间具有分隔线
                      MENUITEM SEPARATOR

           用法3--弹出式菜单
                     POPUP 菜单文字,[选项列表]

                     BEGIN

                               ......
                     END 

二、加速键的定义
       加速键ID ACCELERATORS
       BEGIN

                   键名,命令ID[,类型][,选项]

                     ......
       END

       注:a.同类型的多个资源,资源的ID必须不同

               b.不同类型的资源ID可以相同

三、使用菜单和加速键

        在完成资源的编写后需要将其加载到窗口中才能成为实现菜单中的功能。

        加载方法有两个:1.在注册窗口类的时候指定默认菜单。2.建立窗口时指定菜单句柄。

        1、加载菜单

              对于这两种加载方法来说,首先使用LoadMenu函数来获取菜单句柄hMenu。

             方法:
                       invoke  LoadMenu,hInstance,IDM_MAIN
                       mov     hMenu,eax

        2、加载加速键

              方法:invoke LoadAccelerators,hInstance,IDA_MAIN

                           mov    @hAccelerator,eax

        3、分析菜单和加速键的消息

              当用户选择了菜单项或按下加速键时,Windows向窗口发送WM_COMMAND消息。

              消息的参数定义是:

              wParam的高位:wNotifyCode    //通知码(菜单是0,加速键是1)

              wParam的低位:wID                   //命令ID

              IParam:hwndCtl                           // 发送WM_COMMAND的子窗口句柄  

              此分支的一般结构。

        4、修改菜单项

              相关函数有:AppendMenu用来在一个菜单的最后添加菜单选项,InsertMenu

              在中间插入菜单项,ModifyMenu可以修改一个菜单项的文字,DleteMenu 和

              RemoveMenu则可以删除一个菜单项。

       5、使用系统菜单

             系统菜单指的是按下标题栏中的图标后弹出的菜单,选中后,Windows向窗口

             发送的是WM_SYSCOMMAND消息。系统菜单默认的有 还原、移动、关闭等菜单

             项。在程序中WM_SYSCOMMAND消息一般交给DefWindowProc处理而非程序本身

             利用AppendMenu可以在系统菜单中添加自己的菜单项。

       6、右键弹出菜单

            利用TrackPopupMenu函数实现右键弹出菜单。

            用法:

             invoke  TrackPopupMenu,hMenu,uFlags,x,y,nReserved,hWnd,IpRect 

  

这只是一个简单的总结,我会在以后进行更加完善的补充。(宇)         
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息