汇编语言学习笔记-使用菜单资源

先做菜单的资源文件,代码如下

代码


#define IDM_TEST 1
#define IDM_HELLO 2
#define IDM_GOODBYE 3
#define IDM_EXIT 4

FirstMenu MENU
{
POPUP "&PopUp"
{
MENUITEM "&Say Hello",IDM_HELLO
MENUITEM "Say &GoodBye", IDM_GOODBYE
MENUITEM SEPARATOR
MENUITEM "E&xit",IDM_EXIT
}
MENUITEM "&Test", IDM_TEST
}

保存为rsrc.rc,(注意名字一定要为这个)
再做汇编程序如下:

代码


.386
.model flat,stdcall
option casemap:none

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
ClassName db "SimpleWinClass",0
AppName db "Our First Window",0
MenuName db "FirstMenu",0 ; The name of our menu in the resource file.
Test_string db "You selected Test menu item",0
Hello_string db "Hello, my friend",0
Goodbye_string db "See you again, bye",0

.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?

.const
IDM_TEST equ 1 ; Menu IDs
IDM_HELLO equ 2
IDM_GOODBYE equ 3
IDM_EXIT equ 4

.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_WINDOW+1
mov wc.lpszMenuName,OFFSET MenuName ; Put our menu name here
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
hInst,NULL
mov hwnd,eax
invoke ShowWindow, hwnd,SW_SHOWNORMAL
invoke UpdateWindow, hwnd
.WHILE TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke DispatchMessage, ADDR msg
.ENDW
mov eax,msg.wParam
ret
WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.ELSEIF uMsg==WM_COMMAND
mov eax,wParam
.IF ax==IDM_TEST
invoke MessageBox,NULL,ADDR Test_string,OFFSET AppName,MB_OK
.ELSEIF ax==IDM_HELLO
invoke MessageBox, NULL,ADDR Hello_string, OFFSET AppName,MB_OK
.ELSEIF ax==IDM_GOODBYE
invoke MessageBox,NULL,ADDR Goodbye_string, OFFSET AppName, MB_OK
.ELSE
invoke DestroyWindow,hWnd
.ENDIF
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
WndProc endp
end start

 

1:project->compile resource file编译资源文件
2:project->assemble asm file  装载汇编程序
3:project->link obj file  链接程序
4:project->run program  运行程序

时间: 2024-10-25 11:33:08

汇编语言学习笔记-使用菜单资源的相关文章

spring学习笔记(2)文件资源访问接口Resource

spring 资源抽象接口下的几个常用实现类 实现类 说明 ClassPathResource 类路径下的资源,资源以相对类路径的方式表示 FileSystemResource 文件系统资源,资源以文件系统路径的的方式表示,如/home/root/test.txt ServletContextResource 为访问web上下文中的资源而设计的类,负责以相对于web应用根目录的路径加载资源,它支持以流和URL的方式访问,在war解包情况下,也可以通过File的方式访问,该类还可以直接从jar包中

《HTTP权威指南》学习笔记——URL和资源

URL与资源 URL是互联网资源的标准化名称 1.浏览互联网资源 URL是浏览器寻找信息时所需的资源位置 URI是一类更通用的资源标识符,URL是它的子集. URI的两个子集:URL和URN URL提供了一种统一的资源命名方式: URL方案(例如HTTP,FTP等)://服务器位置/路径 2.URL的语法 大部分URL方案的URL语法都建立在由9部分构成的通用格式上: <scheme>://<user>:<password>@<host>:<port&

汇编语言学习笔记-创建最基本的windows窗体

1如果你不熟悉开发环境的搭建请看此文:http://www.cnblogs.com/liulun/archive/2009/12/26/1632985.html2如果你看了此文的所有注释仍看不懂,请暂且不要再看本系列的其他文章了,先学学WINDOWS API的相关知识吧3以上代码摘自一个汇编语言全接触的CHM 是一个名叫Lxx的前辈翻译的4希望得到大家的支持 .386 .model flat,stdcall;内存平坦,参数传递约定 option casemap:none;大小写敏感 ;;;;;;

MFC学习笔记2添加资源

1.解决方案资源管理器-->>资源文件-->>添加-->>新建项-->>资源文件-->>输入名称,就创建了rc资源文件 此时head文件夹里也增加了相应的resource.h头文件 (resource.h头文件包含资源文件中资源的ID的定义) 2.资源视图-->添加资源可以添加相应的资源,如图: 明天接着说怎么在程序中引用资源 (资源的ID起到了关键作用)  

MFC学习笔记3引用资源

  代码 #include <afxwin.h>#include "resource.h"//引用是必须的,不然菜单不会出现 class MyFrameWindow:public CFrameWnd{public: afx_msg void OnPaint() { CPaintDC paintDC(this); paintDC.TextOut(0,0,"这是我的第一个窗口程序"); } afx_msg void OnFileExit() { PostMe

汇编语言学习笔记-使用窗体控件

代码 .386.model flat,stdcall;内存平坦,参数传递约定option casemap:none;大小写敏感 ;;;;;;引用一些必要的数据include D:\masm32\include\windows.incinclude D:\masm32\include\user32.incinclude \masm32\include\gdi32.inc includelib D:\masm32\lib\user32.libinclude D:\masm32\include\ker

汇编语言学习笔记-使用对话框

rsrc.rc文件 代码 #include <resource.h>#define IDC_EDIT 3000 #define IDC_BUTTON 3001 #define IDC_EXIT 3002 MyDialog DIALOG 10, 10, 205, 60 STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME |

汇编语言学习笔记-在窗口打印文本

代码 .386.model flat,stdcall;内存平坦,参数传递约定option casemap:none;大小写敏感 ;;;;;;引用一些必要的数据include D:\masm32\include\windows.incinclude D:\masm32\include\user32.incincludelib D:\masm32\lib\user32.libinclude D:\masm32\include\kernel32.incincludelib D:\masm32\lib\

汇编语言学习笔记-接收鼠标消息

代码 .386.model flat,stdcall;内存平坦,参数传递约定option casemap:none;大小写敏感 ;;;;;;引用一些必要的数据include D:\masm32\include\windows.incinclude D:\masm32\include\user32.incinclude \masm32\include\gdi32.inc includelib D:\masm32\lib\user32.libinclude D:\masm32\include\ker