Win32汇编获取和设置文本框的内容

看一下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

运行一下,如下;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值