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

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 | DS_3DLOOK
CAPTION
"我的对话框"
{
EDITTEXT IDC_EDIT,
15,17,111,13, ES_AUTOHSCROLL | ES_LEFT
DEFPUSHBUTTON
"显示编辑框中的内容", IDC_BUTTON, 141,10,52,13
PUSHBUTTON
"退出程序", IDC_EXIT, 141,26,52,13
}

asm文件

代码
.386
.model flat,stdcall
option casemap:none

DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD

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

.data
DlgName db
'MyDialog',0
AppName db
'My own dialog',0


.data
?
hInstance HINSTANCE
?
buffer db
512 dup(?)

.
const
IDC_EDIT equ
3000
IDC_BUTTON equ
3001
IDC_EXIT equ
3002


.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL
invoke ExitProcess,eax

DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg
==WM_INITDIALOG
invoke GetDlgItem, hWnd,IDC_EDIT
invoke SetFocus,eax
.ELSEIF uMsg
==WM_CLOSE
invoke EndDialog, hWnd,NULL
.ELSEIF uMsg
==WM_COMMAND
mov eax,wParam
.IF eax
==IDC_BUTTON
invoke GetDlgItemText,hWnd,IDC_EDIT,ADDR buffer,
512
invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK
.ELSEIF ax
==IDC_EXIT
invoke EndDialog, hWnd,NULL
.ENDIF
.ELSE
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc endp
end start
原文地址:https://www.cnblogs.com/liulun/p/1660192.html