win32asm定时器demo

这篇博客展示了如何使用MASM32汇编语言编写一个简单的计时器程序,程序包括两个定时器,ID_TIMER1每秒更新一次计数值,ID_TIMER2每两秒触发一次蜂鸣声。通过`DialogBoxParam`创建对话框,`SetTimer`设置定时器,并使用`KillTimer`关闭定时器。资源文件`timer.rc`定义了对话框资源。
摘要由CSDN通过智能技术生成

timer.asm

.386
.model flat,stdcall
option casemap:none

include windows.inc
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib

;equ 等值定义

IDD_DLG1 equ 1000
IDC_COUNT equ 1000
ID_TIMER1 equ 10001
ID_TIMER2 equ 10002
.data?
	hInstance dd ?
	hWinMain dd ?
	idTimer dd ?
.code
	ProTimer proc _hWnd,uMsg,_idEvent,_dwTime
		pushad
		 invoke GetDlgItemInt,hWinMain,IDC_COUNT,NULL,FALSE
		 inc eax
		 invoke SetDlgItemInt,hWinMain,IDC_COUNT,eax,FALSE
		popad
		ret
	ProTimer endp
	
	
	ProDialogMain proc uses ebx esi edi,hWnd,uMsg,wParam,lParam
		mov eax,uMsg
		.if eax == WM_CLOSE
			invoke KillTimer,hWnd,ID_TIMER1
			invoke KillTimer,hWnd,ID_TIMER2
			invoke EndDialog,hWnd,NULL
		.elseif eax == WM_INITDIALOG
			push hWnd
			pop hWinMain
			invoke SetTimer,hWnd,ID_TIMER1,1000,offset ProTimer
			mov idTimer,eax
			invoke SetTimer,hWnd,ID_TIMER2,2000,NULL
		.elseif eax == WM_TIMER
			mov eax,wParam
			.if eax == ID_TIMER2
				invoke MessageBeep,-1
			.endif
		.else 
			mov eax,FALSE
			ret
		.endif
		mov eax,TRUE
		ret
	ProDialogMain endp
	start:
		invoke GetModuleHandle,NULL
		mov hInstance,eax
		invoke DialogBoxParam,hInstance,IDD_DLG1,NULL,offset ProDialogMain,NULL
		invoke ExitProcess,NULL
	end start

timer.rc

#define IDD_DLG1 1000
#define IDC_COUNT 1000

#include <resource.h>

IDD_DLG1 DIALOGEX 10,10,135,45
CAPTION "计时器"
FONT 8,"MS Sans Serif",0,0,0
STYLE 0x10CF0000
BEGIN
  CONTROL "计数:",-1,"Static",0x50020000,35,16,25,10
  CONTROL "",IDC_COUNT,"Static",0x50020000,62,16,37,11
END


编译命令:
ml /c /coff timer.asm
rc timer.rc
link /subsystem:windows timer.obj timer.res
环境:
masm32开发包 /windows系统

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值