看一下Win32汇编如何获取和设置文本框的内容;
资源文件如下;
#include <resource.h>
#define ICO_MAIN 0x1000 //图标
#define DLG_MAIN 1
#define IDC_TXT1 2001
#define IDC_TXT2 2002
ICO_MAIN ICON "Main.ico"
DLG_MAIN DIALOG 350, 250, 120, 150
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "对话框demo模板"
FONT 9, "宋体"
{
EDITTEXT IDC_TXT1, 5, 15, 100, 25, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
EDITTEXT IDC_TXT2, 5, 60, 100, 25, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
DEFPUSHBUTTON "获取并设置", IDOK, 58, 125, 50, 14
CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 6, 110, 103, 1
}
在资源文件中,定义对话框;定义2个文本框,标识分别是IDC_TXT1,IDC_TXT2;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; by bobo
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat, stdcall
option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN equ 1000h ;图标
DLG_MAIN equ 1
IDC_TXT1 equ 2001
IDC_TXT2 equ 2002
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
sztxt1 db 1024 dup (?)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain 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
invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
.elseif eax == WM_COMMAND
mov eax,wParam
.if ax == IDOK
;invoke EndDialog,hWnd,NULL
invoke GetDlgItemText,hWnd,IDC_TXT1,addr sztxt1,sizeof sztxt1
invoke SetDlgItemText,hWnd,IDC_TXT2,addr sztxt1
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
asm代码中,在 .data? 段,用dup定义一个db类型的区域;
sztxt1 db 1024 dup (?)
在按下按钮的消息处理分支 .if ax == IDOK 里面,调用 GetDlgItemText 和 SetDlgItemText,获取第一个文本框的值,设置为第二个文本框的值;
获取到第一个文本框的值是存在 sztxt1 里,然后用 sztxt1 的值去设置第二个文本框的内容; sztxt1前面加addr;
invoke GetDlgItemText,hWnd,IDC_TXT1,addr sztxt1,sizeof sztxt1
invoke SetDlgItemText,hWnd,IDC_TXT2,addr sztxt1
编译和构建的过程如下;
构建以后的文件;
可参阅此
https://blog.csdn.net/bcbobo21cn/article/details/104188812
运行一下,如下;