21,459
社区成员
发帖
与我相关
我的任务
分享
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
DLG_MAIN EQU 1000
IDC_COUNTER EQU 1001
IDC_PAUSE EQU 1002
.data?
hInstance dd ?
hWinMain dd ?
hWinCount dd ?
hWinPause dd ?
dwOption dd ? ;标志位
F_PAUSE EQU 0001h
F_STOP EQU 0002h
F_COUNTING EQU 0004h ;计算中
.const
szStop db '停止计数',0
szStart db '计数',0
.code
_Counter proc uses ebx esi edi _lParam
or dwOption,F_COUNTING
and dwOption,not (F_STOP OR F_PAUSE)
invoke SetWindowText,hWinCount,addr szStop
invoke EnableWindow,hWinPause,TRUE
xor ebx,ebx
.while ! (dwOption & F_STOP)
.if !(dwOption & F_PAUSE)
inc ebx
invoke SetDlgItemInt,hWinMain,IDC_COUNTER,ebx,FALSE
.endif
.endw
invoke SetWindowText,hWinCount,addr szStart
invoke EnableWindow,hWinPause,FALSE
and dwOption,not (F_COUNTING OR F_STOP OR F_PAUSE)
ret
_Counter endp
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
LOCAL @dwThreadID
mov eax,wMsg
.if eax == WM_COMMAND
mov eax,wParam
.if ax == IDOK
.if dwOption & F_COUNTING
or dwOption,F_STOP
.else
invoke CreateThread,NULL,0,offset _Counter,NULL,NULL,@dwThreadID
invoke CloseHandle,eax
.endif
.elseif ax == IDC_PAUSE
xor dwOption,F_PAUSE
.endif
.elseif eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
push hWnd
pop hWinMain
invoke GetDlgItem,hWnd,IDOK
mov hWinCount,eax
invoke GetDlgItem,hWnd,IDC_PAUSE
mov hWinPause,eax
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
end start
#include <resource.h>
#define DLG_MAIN 1000
#define IDC_COUNTER 1001
#define IDC_PAUSE 1002
DLG_MAIN DIALOGEX 10,10,237,111
CAPTION "计数"
FONT 8,"MS Sans Serif",0,0,0
STYLE WS_VISIBLE|WS_OVERLAPPEDWINDOW
BEGIN
CONTROL "",IDC_COUNTER,"Edit",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP,33,21,78,18,WS_EX_CLIENTEDGE
CONTROL "计数",IDOK,"Button",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP,36,63,60,24
CONTROL "暂停/恢复",IDC_PAUSE,"Button",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP,126,63,60,24
END