请用我的知识暴露我是汇编语言的新手。
我在这里有一个代码,可以将两者的值相加,textbox
并在我按下按钮时在第三个上显示结果。
我尝试使用该GetWindowText
命令构造参数,但有时它不会显示任何内容,它有时会崩溃,我用我正在工作的相同程序查看网络,但我只从 stackoverflow中找到了这个,不同之处在于他使用GetDlgItemText
我继续阅读的Microsoft 网站它在对话框中检索与控件关联的标题或文本,但我没有使用对话框,所以也许我会坚持使用该GetWindowText
功能。
这是我编写的代码,但老实说,我不知道这里发生了什么,我只是编造了它,因为我不知道如何为GetWindowText
函数构造参数。
您看到的一些代码是我几天前工作的程序的回收代码,这是一个简单的加法操作,当我在控制台中输入两个值时,它会添加数字并显示结果。现在,我想再做一次,但使用文本框和按钮,但我做错了。
减速:
.data?
EditIn1ID db 10 dup(?)
EditIn2ID db 10 dup(?)
EditOutID db 10 dup(?)
hButton HWND ?
hEditIn1 HWND ?
hEditIn2 HWND ?
hEditOut HWND ?
文本框和按钮功能
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.if uMsg == WM_DESTROY
invoke PostQuitMessage, 0
.elseif uMsg == WM_CREATE
invoke CreateWindowEx, NULL, addr ButtonClassName, addr ButtonAdd, WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON, 225, 10, 120, 30, hWnd, ButtonID, hInstance, NULL
mov hButton, eax
invoke CreateWindowEx, WS_EX_CLIENTEDGE, addr EditClassName, NULL, WS_CHILD or WS_VISIBLE, 10, 10, 120, 30, hWnd, EditIn1ID, hInstance, NULL
mov DWORD PTR [hEditIn1], eax
invoke CreateWindowEx, WS_EX_CLIENTEDGE, addr EditClassName, NULL, WS_CHILD or WS_VISIBLE, 10, 50, 120, 30, hWnd, EditIn2ID, hInstance, NULL
mov DWORD PTR [hEditIn2], eax
invoke CreateWindowEx, WS_EX_CLIENTEDGE, addr EditClassName, NULL, WS_CHILD or WS_VISIBLE, 10, 110, 120, 30, hWnd, EditOutID, hInstance, NULL
mov DWORD PTR [hEditOut], eax
.elseif uMsg == WM_COMMAND
mov eax, wParam
.if eax == ButtonID
shr eax, 16
.if ax == BN_CLICKED
invoke GetWindowText,EditIn1ID, eax, 10
invoke atodw, addr EditIn1ID
mov ebx, eax
invoke GetWindowText,EditIn2ID, ebx, 10
invoke atodw, addr EditIn2ID
add ebx, eax
invoke dwtoa, ebx, addr res
invoke SetWindowText,EditOutID, addr res
.endif
.endif
这是我对这行代码的看法:
invoke GetWindowText,EditIn1ID, eax, 10
在invoke GetWindowText
这行代码中调用函数 GetWindowText 来复制输入值。
EditIn1ID
此代码是我的文本框的唯一 ID,因此按钮具有此特定值。
eax
用于计算操作,可能会在附加操作中使用。
有些人还使用 esi 和 edi,但我从来没有遇到过这段代码,我不知道它们是否与 eax 和 ebx 略有相同,我用谷歌搜索了它的含义,但我怀疑是否可以在我的代码中使用它,所以我避免使用它。
请。给我建议,谢谢。