_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 吧?