当前位置: 代码迷 >> 汇编语言 >> 对话框有关问题求解惑
  详细解决方案

对话框有关问题求解惑

热度:144   发布时间:2016-05-02 04:39:23.0
对话框问题求解惑
_ProcMain	proc	uses esi ebx edi 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
 ; .endif
; .else
; mov eax,FALSE
; ret
; .endif
mov eax,TRUE
ret

_ProcMain endp

对话框过程的代码,2个地方不太明白
1._ProcMain proc uses esi ebx edi hWnd,wMsg,wParam,lParam 开头这一句,如果将esi
ebx edi 这3个删掉不用,那么就出错,这是为什么呢?
对话框过程书本上面这么写的 DialogProc proc  hwndDlg,uMsg,wParam,lParam,没指定一定要写esi ebx edi等等的寄存器啊!
2.如果将代码注释掉,仅保留最后2句,那么生成的对话框就是个没边框没背景的,这我有点不太明白,既然仅保留mov eax,TRUE ret ,不就是表示不处理任何消息,仅让对话框管理器自行处理吗?源程序中已经调用dialogboxparam了,应该是正常显示出一个对话框啊,只不过没任何功能而已!

------解决方案--------------------
1. 这个是说明你的子程里使用到了这三个寄存器,编译器会自动在子程开始时加上 push 它们的指令,子程的结束前有相应的 pop 指令;但你这个示例没有使用到这三个子程,所以基本没有了这个说明,也不应该有问题的。
2. 你没有对消息进行处理,应该是返回 FALSE=0  而非 TRUE=1 吧?
  相关解决方案