dialog.asm
来自「用汇编写的win32程序一些例子。」· 汇编 代码 · 共 104 行
ASM
104 行
.386
.model flat,STDCALL
include win32.asi ; some 32-bit constants and structures
include win32.ase
.code
CenterWindow PROC hwnd : dword
LOCAL wrect : RECT, wWidth : dword, wHeight : dword
lea eax,[wrect]
call GetWindowRect,[hwnd],eax
call GetSystemMetrics,SM_CXSCREEN
mov [wWidth],eax
call GetSystemMetrics,SM_CYSCREEN
mov [wHeight],eax
mov ecx,[wrect.rcRight]
sub ecx,[wrect.rcLeft]
mov eax,[wWidth]
sub eax,ecx
shr eax,1
mov edx,[wrect.rcBottom]
sub edx,[wrect.rcTop]
mov ebx,[wHeight]
sub ebx,edx
shr ebx,1
call MoveWindow,[hwnd],eax,ebx,ecx,edx,0
ret
CenterWindow ENDP
;-----------------------------------------------------------------------------
;
; For dialog boxes that only have an 'ok' button
;
Public WaitingProc
WaitingProc proc uses ebx edi esi, hdlg:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD
; now if we have a WM_COMMAND message one of the dialog controls
; has been clicked so see which one
;
cmp [wmsg],WM_COMMAND
jnz wpchkcenter
cmp [wparam],IDOK
jnz nomsg
;
; ok selected, close the dialog and return to the other window
;
exitdlg:
call EndDialog,[hdlg],0
nomsg:
sub eax,eax
ret
wpchkcenter:
cmp [wmsg],WM_INITDIALOG
jnz wpx
call CenterWindow,[hdlg]
wpx:
sub eax,eax
ret
WaitingProc endp
;-----------------------------------------------------------------------------
;
; For dialog boxes that have Yes/No buttons
;
Public YesNoProc
YesNoProc proc uses ebx edi esi, hdlg:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD
; now if we have a WM_COMMAND message one of the dialog controls
; has been clicked so see which one
;
cmp [wmsg],WM_COMMAND
jnz ynchkcenter
cmp [wparam],IDYES
mov eax,1
jz ynend
cmp [wparam],IDNO
mov eax,0
jz ynend
cmp [wparam],IDCANCEL
mov eax,-1
jz ynend
sub eax,eax
ret
ynend:
call EndDialog,[hdlg],eax
sub eax,eax
ret
ynchkcenter:
cmp [wmsg],WM_INITDIALOG
jnz ynx
call CenterWindow,[hdlg]
ynx:
sub eax,eax
ret
YesNoProc endp
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?