(译)win32asm实例-5

原创 2002年03月20日 09:06:00
 

5.0 - Adding a menu添加菜单

Our program should have a menu to set some options. Firstly we need to create our menu in the resource file:

我们的程序应该有一个菜单来设置一些选项。首先,我们需要在资源文件中创建我们的菜单。

5.1 - Creating a menu创建菜单

A menu is fairly easy to make in your resource file. If you take a look at the resource text below you will see it's self explaining. Popup menus are menus that have submenus, a menuitem is just a menuitem with an associated ID. These IDs will be defined and can be used in your program to find out which menu item the user clicked on. Finally, the ampersands (&) will underline the character the precede, indicating a shortkey can be used.

在你的资源文件中,很容易就可以创建一个菜单。如果你看一看下面的资源文本,你会看到它是其意自明的。Popup(弹出)菜单是有子菜单的菜单,一个菜单项仅是一个有关联ID的菜单项。这些ID将被定义而且可以被用于你的程序来找出用户点击的是哪个菜单项。最后,&号会下划线首字母,表示它可以使用快捷键。

Add this below the ICON definitions:

添加下面的ICON 定义:

MAINMENU    MENU DISCARDABLE
BEGIN
    POPUP   "&File"
    BEGIN
        MENUITEM "&New Game", MI_NEWGAME
        MENUITEM "&Open Bitmap ", MI_OPENBITMAP
        POPUP "&Difficulty"
        BEGIN
            MENUITEM "&Easy", MI_EASY
            MENUITEM "&Medium", MI_MEDIUM
            MENUITEM "&Hard", MI_HARD
        END
    END
    POPUP "&Picture"
    BEGIN
        MENUITEM "Use &standard picture", MI_USESTANDARD
        MENUITEM "Use &numbers", MI_USENUMBERS
        MENUITEM "Use &bitmap file", MI_USEFILE
    END
    POPUP "&Colors"
    BEGIN
        MENUITEM "&Blue color scheme", MI_COLORBLUE
        MENUITEM "&Red color scheme", MI_COLORRED
        MENUITEM "&Green color scheme", MI_COLORGREEN
        MENUITEM "&Ugly color scheme", MI_COLORUGLY
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&About", MI_ABOUT
    END
END

Add this below the icon defines (before the code above!):

添加下面的菜单项定义(在前面的代码前!)

#define         MAINMENU            301

#define         MI_NEWGAME          101
#define         MI_OPENBITMAP       102
#define         MI_EASY             103
#define         MI_MEDIUM           104
#define         MI_HARD             105
#define         MI_USESTANDARD      106
#define         MI_USENUMBERS       107
#define         MI_USEFILE          108
#define         MI_COLORBLUE        109
#define         MI_COLORRED         110
#define         MI_COLORGREEN       111
#define         MI_COLORUGLY        112
#define         MI_ABOUT            113

5.2 - Defining the Ids定义ID

Now you'll have to convert the C definitions to asm equates:

现在我们必须把C定义翻译为asm

MAINMENU        equ 301

MI_NEWGAME      equ 101
MI_OPENBITMAP   equ 102
MI_EASY         equ 103
MI_MEDIUM       equ 104
MI_HARD         equ 105
MI_USESTANDARD  equ 106
MI_USENUMBERS   equ 107
MI_USEFILE      equ 108
MI_COLORBLUE    equ 109
MI_COLORRED     equ 110
MI_COLORGREEN   equ 111
MI_COLORUGLY    equ 112
MI_ABOUT        equ 113

When you've converted them, place them in mosaic.inc.

在你翻译完它们后,把它们放入mosaic.inc中。

The resource file and mosaic inc should now look like this: res1.zip

资源和mosaic.inc文件应该和这个一样:res1.zip

5.3 - Adding the menu to your window把菜单加入你的窗口


[in your .data? section]<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

[在你的.data?部分]
hMenu           dd      ?

[in your .code section]

[在你的.code部分]
    ......
    invoke  RegisterClassEx, addr wc      ;AFTER THIS LINE!
    invoke  LoadMenu, hInstance, MAINMENU ;load menu
    mov     hMenu, eax                    ;store handle
    INVOKE  CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,/
            WS_OVERLAPPEDWINDOW-WS_MAXIMIZEBOX-WS_SIZEBOX,/
            CW_USEDEFAULT, CW_USEDEFAULT,258,350,NULL,hMenu,/ ;!!!!
            hInst,NULL
            ;NOTE: notice addition of the hMenu parameter
            ;      in the CreateWindowEx call.
    ......

The hMenu is added to the uninitialized data section to hold the menu handle when it's loaded. LoadMenu will load a menu resource from the instance hInstance (mosaic.exe) with a certain ID (MAINMENU). The handle is stored with 'mov hMenu, eax', then the handle is passed to CreateWindowEx to create a window with a menu. After you have run make.bat you should have a main window with a menu (that does nothing):

HMenu被加入未初始化data部分来在菜单载入后保存菜单句柄。LoadMenu会从实例hInstancemosaic.exe)中用某个IDMAINMENU)载入菜单。句柄用‘mov  hMenu, eax’保存,然后句柄传递给CreateWindowEx来创建一个有菜单的窗口。在你运行了make.bat之后,你应当有了一个带菜单的主窗口(它什么也不干):

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />   

mosaic_menu.gif   mosaic_menu2.gif

 

Your source file should look like this now: mosaic.asm

现在你的资源文件应该是这样:mosaic.asm

(译)win32asm实例-0

  这个教程写得非常好,希望你能喜欢。-译者Mosaic tutorial拼图游戏教程Introduction介绍In this lesson you will create a simple mos...
  • taowen2002
  • taowen2002
  • 2002年03月18日 19:03
  • 1062

(译)win32asm教程-5

 6.0 文件结构汇编源文件被分成了几个部分。这些部分是code,data,未初始化data,constants,resource和relocations,资源部分是资源文件创建的,后面会有更多的讨论...
  • taowen2002
  • taowen2002
  • 2002年03月14日 09:51
  • 800

(译)win32asm实例-3

 翻译以得到原作者的授权。在此向他表示感谢!-译者3.0 - Resource file资源文件We will only add some icons to our resource file for...
  • taowen2002
  • taowen2002
  • 2002年03月18日 09:12
  • 808

(译)win32asm实例-1

  1.0 - New project新的工程Create a new folder named mosaic in your asm projects folder (it is adviceabl...
  • taowen2002
  • taowen2002
  • 2002年03月18日 19:03
  • 1143

(译)win32asm实例-6

 6.0 - The tiles window图块窗口We will now create a static control which we will draw the tiles on.我们将创建...
  • taowen2002
  • taowen2002
  • 2002年03月21日 08:53
  • 1080

(译)win32asm实例-7

 7.0 - Drawing the tiles画图块The tile control is already made, now its time for the drawing of the til...
  • taowen2002
  • taowen2002
  • 2002年03月22日 19:09
  • 979

(译)win32asm实例-4

 4.0 - Creating the main frame创建主框架Now we will create the main frame of our program:现在我们将创建我们程序的主框架:...
  • taowen2002
  • taowen2002
  • 2002年03月20日 09:06
  • 884

(译)win32asm实例-2

 2.0 - Design of the game游戏的设计Before we get started with programming, we will design the game first....
  • taowen2002
  • taowen2002
  • 2002年03月18日 19:04
  • 918

(译)win32asm教程-9

 10.0 masm的优点如果你不在使用masm,你可以跳过这章并尝试着转换所有的例子,或不论如何地读一下,并试着说服自己使用masm。当然,这是你的选择。但masm真的使汇编语言更容易了。10.1 ...
  • taowen2002
  • taowen2002
  • 2002年03月15日 09:00
  • 758

(译)win32asm教程-2

 3.0 asm基础知识这章将教你汇编语言的基础知识1.  1伪代码(opcodes)汇编程序是用伪代码创建的。一个伪代码是一条处理器可以理解的指令。例如:ADDAdd指令把两个数加到一起。大部分伪代...
  • taowen2002
  • taowen2002
  • 2002年03月13日 08:59
  • 981
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(译)win32asm实例-5
举报原因:
原因补充:

(最多只允许输入30个字)