masm32之一个使用rc资源的窗口文件
简短记录一下masm下第一个使用rc资源编译的窗口文件
注:代码完全来自于某个博主的博客,当初也只是想着复制,编译链接,运行一下看看效果。
hello.rc
// 资源文件注释格式为双斜杠
// 包含资源头文件,以能使用头键字
#include
// 指定对话框ID,asm文件中要定义同值变量才可引用
#define DLG_HELLOWORLD 1
// 定义对话框结构
DLG_HELLOWORLD DIALOG 350,200,213,164
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Helloworld Program"
FONT 11,"宋体"
{
CTEXT "Win32 Assembly Helloworld Program",-1,50,54,170,21
CONTROL "",-1,"Static",SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE,6,79,203,1
DEFPUSHBUTTON "quit",IDOK,158,86,50,21
}
没有学过资源文件编写相关,当初看感觉还有点懵,现在再看,感觉结构清晰,一看就知道哪个部分有什么效果。
hello.asm
; asm文件注释格式为分号
; 定义程序模式
.386
.model flat,stdcall
option casemap :none
; 包含必要头文件,基本每个win32 汇编程序都需要包含这几个
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
; 指定对话框ID,该ID要与rc文件中的ID值相同
; 理论上,asm文件与rc文件中的控件是通过ID值关联的,控件名并不需要与rc文件相同,不过为了易看一般取一样的
; 比如这里重点是equ 1,叫不叫DLG_HELLOWORLD无所谓,不过为了易看所以选择与rc文件保持一致
DLG_HELLOWORLD equ 1
; 数据段
.data?
hInstance dd ?
; 代码段
.code
; 对话框处理过程
_ProcDlgHelloworld proc uses ebx edi esi hWnd,wMsg,wParam,lParam
mov eax,wMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
;invoke LoadIcon,hInstance,ICO_MAIN
;incoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
.elseif eax == WM_COMMAND
mov eax,wParam
.if ax == IDOK
invoke EndDialog,hWnd,NULL
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgHelloworld endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
; 弹出对话框,对话框与及处理过程在这里绑定
invoke DialogBoxParam,hInstance,DLG_HELLOWORLD,NULL,offset _ProcDlgHelloworld,NULL
invoke ExitProcess,NULL
; 指定程序入口点为start标识处
end start
编译链接过程:
C:\Users\17724\Desktop\318>rc hello.rc
C:\Users\17724\Desktop\318>ml -c -coff hello.asm
Microsoft (R) Macro Assembler Version 12.00.21005.1
Copyright (C) Microsoft Corporation. All rights reserved.
Assembling: hello.asm
***********
ASCII build
***********
C:\Users\17724\Desktop\318>link -subsystem:windows hello.obj hello.RES
Microsoft (R) Incremental Linker Version 12.00.21005.1
Copyright (C) Microsoft Corporation. All rights reserved.
C:\Users\17724\Desktop\318>hello.exe
C:\Users\17724\Desktop\318>