⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lunarday.asm

📁 输入阴历可以转化阳历 输入阳历转化阴历.
💻 ASM
字号:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 申明:
; 1. 本开发包为共享软件,你可以免费传播、使用本软件,但不得用于商业目的。
; 2. 传播时请不要改动版权信息,并注明出处。
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Author:	罗云彬
; Web:		http://asm.yeah.net (罗云彬的编程乐园)
; E-mail:	bigluo@telekbird.com.cn
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Version	1.0
;		Date: 2000.09.15
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 阳历/农历转换计算开发包
;
; 文件包括:
;	Lunar.inc -- Win32Asm 语言的 include 文件,定义了使用的数据结构
;		     如果使用 C 或其他语言请自行修改格式
;	Lunar.dll -- 动态连接库文件
;	Lunar.lib -- Lunar.dll 对应的导入库文件
;
; 开发包包括一个 Win32Asm 的使用例子在 Example 目录中
;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 功能:计算 1901 - 2050 的农历、节气数据
; 使用:
;	1. 定义 LUNARDATA 数据结构(在 Lunar.inc 文件中已定义)
;	2. 填写 LUNARDATA 数据结构的输入字段并调用 _GetLunarData
;	3. 输出结果在 LUNARDATA 数据结构的输出字段中
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

		.386
		.model flat, stdcall
		option casemap :none   ; case sensitive

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;	Include 数据
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

include		windows.inc
include		user32.inc
include		kernel32.inc
include		comctl32.inc
include		comdlg32.inc
include		Lunar.inc

includelib	user32.lib
includelib	kernel32.lib
includelib	comctl32.lib
includelib	comdlg32.lib
includelib	Lunar.lib

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;	Equ 数据
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN	equ		1000

DLG_MAIN	equ		2000
ID_YEAR		equ		2001
ID_MONTH	equ		2002
ID_DAY		equ		2003
ID_INFO1	equ		2004
ID_INFO2	equ		2005
ID_INFO3	equ		2006

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;	数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

		.data?

hInstance	dd	?
szBuffer	db	256 dup	(?)

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;	子程序声明
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain	PROTO	:DWORD,:DWORD,:DWORD,:DWORD

		.data

szFormat	db	'农历%d年%d月%d日',0
szYear		db	'年'
szBlank		db	' ',0

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;	代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

		.code

;********************************************************************
;	将窗口移动到屏幕中间
;	参数:窗口句柄
;********************************************************************
_CenterWindow	proc	hWnd:DWORD
		local	@stRectDeskTop:RECT,@stRectWin:RECT
		local	@dwWidth:DWORD,@dwHeight:DWORD

		invoke	GetWindowRect,hWnd,addr @stRectWin
		invoke	GetDesktopWindow
		mov	ebx,eax
		invoke	GetWindowRect,ebx,addr @stRectDeskTop

		mov	eax,@stRectWin.bottom
		sub	eax,@stRectWin.top
		mov	@dwHeight,eax
		mov	eax,@stRectWin.right
		sub	eax,@stRectWin.left
		mov	@dwWidth,eax

		mov	ebx,@stRectDeskTop.bottom
		sub	ebx,@dwHeight
		shr	ebx,1
		mov	ecx,@stRectDeskTop.right
		sub	ecx,@dwWidth
		shr	ecx,1

		invoke	MoveWindow,hWnd,ecx,ebx,@dwWidth,@dwHeight,FALSE
		ret

_CenterWindow	endp
;********************************************************************
_ProcDlgMain	proc	uses ebx edi esi, \
		hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
		local	@stLunarData:LUNARDATA,@dwMonth,@dwDay,@dwTmp
		local	@stSystemTime:SYSTEMTIME

		mov	eax,wMsg
;********************************************************************
		.if	eax ==	WM_CLOSE
			invoke	EndDialog,hWnd,NULL
;********************************************************************
		.elseif	eax ==	WM_INITDIALOG
			invoke	_CenterWindow,hWnd
			invoke	GetLocalTime,addr @stSystemTime
			xor	eax,eax
			mov	ax,@stSystemTime.wYear
			invoke	SetDlgItemInt,hWnd,ID_YEAR,eax,FALSE
			xor	eax,eax
			mov	ax,@stSystemTime.wMonth
			invoke	SetDlgItemInt,hWnd,ID_MONTH,eax,FALSE
			xor	eax,eax
			mov	ax,@stSystemTime.wDay
			invoke	SetDlgItemInt,hWnd,ID_DAY,eax,FALSE
			invoke	SendMessage,hWnd,WM_COMMAND,IDOK,NULL
;********************************************************************
		.elseif	eax ==	WM_COMMAND
			mov	eax,wParam
			.if	eax == IDOK
;********************************************************************
				invoke	GetDlgItem,hWnd,ID_YEAR
				invoke	SetFocus,eax
				invoke	GetDlgItemInt,hWnd,ID_YEAR,addr @dwTmp,FALSE
				mov	@stLunarData.dwYear,eax
				invoke	GetDlgItemInt,hWnd,ID_MONTH,addr @dwTmp,FALSE
				mov	@stLunarData.dwMonth,eax
				invoke	GetDlgItemInt,hWnd,ID_DAY,addr @dwTmp,FALSE
				mov	@stLunarData.dwDay,eax
				invoke	_GetLunarData,addr @stLunarData
;********************************************************************
				invoke	wsprintf,addr szBuffer,addr szFormat,\
					@stLunarData.dwLunarYear,\
					@stLunarData.dwLunarMonth,\
					@stLunarData.dwLunarDay
;********************************************************************
				invoke	SendDlgItemMessage,hWnd,ID_INFO1,WM_SETTEXT,NULL,addr szBuffer
;********************************************************************
				invoke	lstrcpy,addr szBuffer,addr @stLunarData.szLunarYear
				invoke	lstrcat,addr szBuffer,addr szBlank
				invoke	lstrcat,addr szBuffer,addr @stLunarData.szLunarYearA
				invoke	lstrcat,addr szBuffer,addr szYear
				invoke	lstrcat,addr szBuffer,addr @stLunarData.szLunarMonth
				invoke	lstrcat,addr szBuffer,addr @stLunarData.szLunarDay
				invoke	SendDlgItemMessage,hWnd,ID_INFO2,WM_SETTEXT,NULL,addr szBuffer
;********************************************************************
				invoke	lstrcpy,addr szBuffer,addr @stLunarData.szWeekDay
				invoke	lstrcat,addr szBuffer,addr szBlank
				invoke	lstrcat,addr szBuffer,addr @stLunarData.szLunarHolDay
				invoke	SendDlgItemMessage,hWnd,ID_INFO3,WM_SETTEXT,NULL,addr szBuffer
;********************************************************************
			.endif
		.else
;********************************************************************
;	注意:对话框的消息处理后,要返回 TRUE,对没有处理的消息
;	要返回 FALSE
;********************************************************************
			mov	eax,FALSE
			ret
		.endif		   
		mov	eax,TRUE
		ret
		
_ProcDlgMain	endp
;********************************************************************
start:
		invoke	InitCommonControls
		invoke	GetModuleHandle,NULL
		mov	hInstance,eax
		invoke	DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,0
		invoke	ExitProcess,NULL
;********************************************************************
		end	start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -