《windows环境下32位汇编语言程序设计》

下载本书

添加书签

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


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!

; Include 文件定义

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

include          windows。inc

include          user32。inc

includelib       user32。lib

include          kernel32。inc

includelib       kernel32。lib

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

; Equ 等值定义

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

ICO_MAIN         equ      1000h   ;图标

IDM_MAIN         equ      2000h   ;菜单

IDA_MAIN         equ      2000h   ;加速键

IDM_OPEN         equ      4101h

IDM_OPTION       equ      4102h

IDM_EXIT         equ      4103h

IDM_SETFONT      equ      4201h

IDM_SETCOLOR     equ      4202h

IDM_INACT        equ      4203h

IDM_GRAY         equ      4204h

IDM_BIG          equ      4205h

IDM_SMALL        equ      4206h

IDM_LIST         equ      4207h

IDM_DETAIL       equ      4208h

IDM_TOOLBAR      equ      4209h

IDM_TOOLBARTEXT  equ      4210h

IDM_INPUTBAR     equ      4211h

IDM_STATUSBAR    equ      4212h

IDM_HELP         equ      4301h

IDM_ABOUT        equ      4302h

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

; 数据段

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

                 。data?

hInstance        dd       ?

hWinMain         dd       ?

hMenu            dd       ?

hSubMenu         dd       ?

                 nst

szClassName      db   'Menu Example';0

szCaptionMain    db   'Menu';0

szMenuHelp       db   '帮助主题(&H)';0

szMenuAbout      db   '关于本程序(&A)。。。';0

szCaption        db   '菜单选择';0

szFormat         db   '您选择了菜单命令:%08x';0

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

; 代码段

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

                 de

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

_DisplayMenuItem      proc     _dwmandID

                      local    @szBuffer'256':byte

 

                 pushad

                 invoke   wsprintf;addr @szBuffer;addr szFormat;_dwmandID

                 invoke   MessageBox;hWinMain;addr @szBuffer;

                          offset szCaption;MB_OK



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


第5章 使用资源


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

    
                 popad

                 ret

 

_DisplayMenuItem          endp

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

_Quit            proc

 

                 invoke   DestroyWindow;hWinMain

                 invoke   PostQuitMessage;NULL

                 ret

 

_Quit            endp

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

_ProcWinMain     proc     uses ebx edi esi hWnd;uMsg;wParam;lParam

                 local    @stPos:POINT

                 local    @hSysMenu

 

                 mov  eax;uMsg

                 。if      eax   WM_CREATE

                          invoke  GetSubMenu;hMenu;1

                          mov     hSubMenu;eax

;********************************************************************

;在系统菜单中添加菜单项

;********************************************************************

                          invoke  GetSystemMenu;hWnd;FALSE

                          mov     @hSysMenu;eax

                          invoke  AppendMenu;@hSysMenu;MF_SEPARATOR;0;NULL

                          invoke  AppendMenu;@hSysMenu;

                                 0;IDM_HELP;offset szMenuHelp

                          invoke  AppendMenu;@hSysMenu;

                                 0;IDM_ABOUT;offset szMenuAbout

;********************************************************************

; 处理菜单及加速键消息

;********************************************************************

                 。elseif  eax   WM_MAND

                          invoke  _DisplayMenuItem;wParam

                          mov     eax;wParam

                          movzx   eax;ax

                          。if     eax  IDM_EXIT

                          call    _Quit

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

_WinMain         proc

                 local    @stWndClass:WNDCLASSEX

                 local    @stMsg:MSG

                 local    @hAccelerator

                 invoke   GetModuleHandle;NULL

                 mov      hInstance;eax

                 invoke   LoadMenu;hInstance;IDM_MAIN

                 mov      hMenu;eax

                 invoke   LoadAccelerators;hInstance;IDA_MAIN

                 mov      @hAccelerator;eax

;********************************************************************

; 注册窗口类

;********************************************************************

                 invoke   RtlZeroMemory;addr @stWndClass;sizeof @stWndClass

                 invoke   LoadIcon;hInstance;ICO_MAIN

                 mov      @stWndClass。hIcon;eax

                 mov      @stWndClass。hIconSm;eax

                 push     hInstance

                 pop      @stWndClass。hInstance

                 mov      @stWndClass。cbSize;sizeof WNDCLASSEX

                 mov      @stWndClass。style;CS_HREDRAW or CS_VREDRAW

                 mov      @stWndClass。lpfnWndProc;offset _ProcWinMain

                 mov      @stWndClass。hbrBackground;COLOR_WINDOW + 1

                 mov      @stWndClass。lpszClassName;offset szClassName

                 invoke   RegisterClassEx;addr @stWndClass

;********************************************************************

; 建立并显示窗口

;********************************************************************

                 invoke   CreateWindowEx;WS_EX_CLIENTEDGE;
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架