?? lunarday.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 + -