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

2022-05-09 11:28:59 浏览数 (2)

rsrc.rc文件

代码语言:javascript复制
#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文件

代码语言:javascript复制
.386 
.model flat,stdcall 
option casemap:none 

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

include D:masm32includewindows.inc 
include D:masm32includeuser32.inc 
include D:masm32includekernel32.inc 
includelib D:masm32libuser32.lib 
includelib D:masm32libkernel32.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
asm

0 人点赞