21,453
社区成员
发帖
与我相关
我的任务
分享
.data
hInstance dd ?
sz_1 db '1', 0
.elseif uMsg==WM_COMMAND
mov eax,wParam
and eax,0ffffh
.if eax==IDOK
;invoke SendMessage,hWnd,WM_CLOSE,TRUE,0
.elseif eax==IDCANCEL
invoke SendMessage,hWnd,WM_CLOSE,0,0
.elseif eax==VK_NUMPAD1
;这里该怎么写
invoke SetDlgItemText,hDlgItem,3,"1"
invoke UpdateWindow,hWnd
.endif
我在第9行设置了断点,运行程序后点‘1’按钮还是没有反应,是不是说‘eax==VK_NUMPAD1’这里写的不对啊?
;MASMPlus 代码模板 - 以对话框做为主窗口的程序
.386
.Model Flat, StdCall
Option Casemap :None
Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
include macro.asm
DlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
DLG_MAIN equ 100
IDC_RTEXT EQU 101
.data?
hInstance dd ?
sz_1 db '1',0
.CODE
START:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,0,offset DlgProc,0
invoke ExitProcess,0
DlgProc proc hWnd,uMsg,wParam,lParam
.if uMsg==WM_INITDIALOG
invoke LoadIcon,hInstance,100
invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,eax
invoke SendDlgItemMessage,hWnd,3,EM_SETREADONLY,TRUE,NULL
invoke GetDlgItem,hWnd,IDC_RTEXT
;mov hDlgItem,eax
.elseif uMsg==WM_COMMAND
mov eax,wParam
and eax,0ffffh
.if eax==IDOK
;invoke SendMessage,hWnd,WM_CLOSE,TRUE,0
.elseif eax==IDCANCEL
invoke SendMessage,hWnd,WM_CLOSE,0,0
.elseif eax==VK_NUMPAD1
;这里该怎么写
invoke SetDlgItemText,hWnd,3,addr sz_1
;invoke UpdateWindow,hWnd
.endif
.elseif uMsg==WM_CLOSE
invoke EndDialog,hWnd,wParam
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
END START
我多加了这句‘invoke SendDlgItemMessage,hWnd,3,EM_SETREADONLY,TRUE,NULL’将文本框改成了只读的。
;MASMPlus 代码模板 - 以对话框做为主窗口的程序
.386
.Model Flat, StdCall
Option Casemap :None
Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
include macro.asm
DlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
DLG_MAIN equ 100
IDC_RTEXT EQU 101
.data?
hInstance dd ?
.CODE
START:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,0,offset DlgProc,0
invoke ExitProcess,0
DlgProc proc hWnd,uMsg,wParam,lParam
local hDlgItem
.if uMsg==WM_INITDIALOG
invoke LoadIcon,hInstance,100
invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,eax
invoke GetDlgItem,hWnd,IDC_RTEXT
mov hDlgItem,eax
.elseif uMsg==WM_COMMAND
mov eax,wParam
and eax,0ffffh
.if eax==IDOK
;invoke SendMessage,hWnd,WM_CLOSE,TRUE,0
.elseif eax==IDCANCEL
invoke SendMessage,hWnd,WM_CLOSE,0,0
.elseif eax==VK_NUMPAD1
;这里该怎么写
invoke SetDlgItemText,hDlgItem,3,"1"
invoke UpdateWindow,hWnd
.endif
.elseif uMsg==WM_CLOSE
invoke EndDialog,hWnd,wParam
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
END START
这是资源文件
#include <resource.h>
#define ICO_MAIN 0x1000
#define DLG_MAIN 100
DLG_MAIN DIALOG 10,10,230,150
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "我的计算器"
{
control "",3,"Edit", ES_RIGHT + WS_BORDER ,10,10,210,30
DEFPUSHBUTTON "1",VK_NUMPAD1,10,60,35,14
DEFPUSHBUTTON "2",VK_NUMPAD2,50,60,35,14
DEFPUSHBUTTON "3",VK_NUMPAD3,90,60,35,14
DEFPUSHBUTTON "4",VK_NUMPAD4,10,75,35,14
DEFPUSHBUTTON "5",VK_NUMPAD5,50,75,35,14
DEFPUSHBUTTON "6",VK_NUMPAD6,90,75,35,14
DEFPUSHBUTTON "7",VK_NUMPAD7,10,90,35,14
DEFPUSHBUTTON "8",VK_NUMPAD8,50,90,35,14
DEFPUSHBUTTON "9",VK_NUMPAD9,90,90,35,14
DEFPUSHBUTTON "0",VK_NUMPAD0,10,105,75,14
DEFPUSHBUTTON "+",VK_ADD,130,60,35,14
DEFPUSHBUTTON "-",VK_SUBTRACT,170,60,35,14
DEFPUSHBUTTON "*",VK_MULTIPLY,130,75,35,14
DEFPUSHBUTTON "/",VK_DIVIDE,170,75,35,14
DEFPUSHBUTTON ".",VK_DECIMAL,90,105,35,14
DEFPUSHBUTTON "=",IDOK,130,105,75,14
PUSHBUTTON "EXIT",IDCANCEL,130,125,50,14
}
第6,7行可以成功执行说明“.elseif uMsg==WM_COMMAND”这句没问题,问题就应该是出在“.elseif eax==VK_NUMPAD1”这里。
#include <resource.h>
#define ICO_MAIN 0x1000
#define DLG_MAIN 100
DLG_MAIN DIALOG 10,10,230,150
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "我的计算器"
{
control "",3,"Edit", ES_RIGHT + WS_BORDER ,10,10,210,30
DEFPUSHBUTTON "1",VK_NUMPAD1,10,60,35,14
DEFPUSHBUTTON "2",VK_NUMPAD2,50,60,35,14
DEFPUSHBUTTON "3",VK_NUMPAD3,90,60,35,14
DEFPUSHBUTTON "4",VK_NUMPAD4,10,75,35,14
DEFPUSHBUTTON "5",VK_NUMPAD5,50,75,35,14
DEFPUSHBUTTON "6",VK_NUMPAD6,90,75,35,14
DEFPUSHBUTTON "7",VK_NUMPAD7,10,90,35,14
DEFPUSHBUTTON "8",VK_NUMPAD8,50,90,35,14
DEFPUSHBUTTON "9",VK_NUMPAD9,90,90,35,14
DEFPUSHBUTTON "0",VK_NUMPAD0,10,105,75,14
DEFPUSHBUTTON "+",VK_ADD,130,60,35,14
DEFPUSHBUTTON "-",VK_SUBTRACT,170,60,35,14
DEFPUSHBUTTON "*",VK_MULTIPLY,130,75,35,14
DEFPUSHBUTTON "/",VK_DIVIDE,170,75,35,14
DEFPUSHBUTTON ".",VK_DECIMAL,90,105,35,14
DEFPUSHBUTTON "=",IDOK,130,105,75,14
PUSHBUTTON "EXIT",IDCANCEL,130,125,50,14
}
.elseif eax==VK_NUMPAD1
;这里该怎么写
invoke SetDlgItemText,hDlgItem,3,"1"
invoke UpdateWindow,hWnd