📄 tabmain.asm
字号:
include tabmain.inc
include kFormatDateTime.asm
include Random.asm
include playmidi.asm
include hook.asm
.code
if DEBUG
include \masm32\debug\Debug.asm
endif
include JmOdbc.asm
Tab1Proc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.if uMsg==WM_INITDIALOG
push hWnd
pop hTab1
invoke SetTimer,hTab1,ID_TIMER1,1000,NULL ;设置timer
invoke SetWindowsHookEx,WH_JOURNALRECORD,addr HookProc,hInstance,NULL
mov hHook,eax
.ELSEIF uMsg == WM_TIMER
.IF wParam==ID_TIMER1
invoke kFormatDateTime,addr szBuf,addr szTimeFormat,NULL
invoke SetDlgItemText,hTab1,IDC_LTEXT_Time,addr szBuf
.endif
.ELSEIF uMsg == WM_HOOK
mov eax,wParam
.if al == "A" || al=="a" || al=="1" || al=="!"
.elseif al == "B" || al=="b" || al=="2" || al=="@"
.elseif al == "C" || al=="c" || al=="3" || al=="#"
.endif
.ELSEIF uMsg == WM_CLOSE
invoke UnhookWindowsHookEx,hHook
invoke KillTimer, hTab1, ID_TIMER1
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
Tab1Proc endp
Tab2Proc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL @CurRecPosInCur:DWORD
.if uMsg==WM_INITDIALOG
push hWnd
pop hTab2
mov bSave,FALSE
invoke GetDlgItem,hTab2,IDC_FIRST
mov hFirst,eax
invoke GetDlgItem,hTab2,IDC_NEXT
mov hNext,eax
invoke GetDlgItem,hTab2,IDC_PRE
mov hPre,eax
invoke GetDlgItem,hTab2,IDC_LAST
mov hLast,eax
invoke GetDlgItem,hTab2,IDC_APPEND
mov hAppend,eax
invoke GetDlgItem,hTab2,IDC_MODIFY
mov hModify,eax
invoke GetDlgItem,hTab2,IDC_DELETE
mov hDelete,eax
invoke GetDlgItem,hTab2,IDC_EXIT
mov hExit,eax
invoke GetDlgItem,hTab2,IDC_EDITTEXT_TiGan
mov hTiGan,eax
invoke GetDlgItem,hTab2,IDC_EDITTEXT_DaAnA
mov hDaAnA,eax
invoke GetDlgItem,hTab2,IDC_EDITTEXT_DaAnB
mov hDaAnB,eax
invoke GetDlgItem,hTab2,IDC_EDITTEXT_DaAnC
mov hDaAnC,eax
invoke GetDlgItem,hTab2,IDC_COMBOBOX_ZhQuD
mov hZhQuDaAn,eax
invoke SendMessage,hZhQuDaAn,CB_ADDSTRING,0,addr szChioseA
invoke SendMessage,hZhQuDaAn,CB_ADDSTRING,0,addr szChioseB
invoke SendMessage,hZhQuDaAn,CB_ADDSTRING,0,addr szChioseC
invoke SendMessage,hZhQuDaAn,CB_SETCURSEL,0,0
;****************************************************
invoke CreateStatementHandle;通用语句句柄、追加、修改、删除和自定义句柄属性的设置
invoke SQLSetCursorName,hStmt,addr Cursor,sizeof Cursor
invoke OpenRecordset,hTab2
.if !eax
invoke MessageBox,hTab2,addr szErr_OpenRec,addr szNull,MB_OK
.endif
invoke BindColVariable,hStmt
invoke SQLFetchScroll,hStmt,SQL_FETCH_FIRST,0
mov retcode,ax
.if retcode!=SQL_ERROR
.if retcode!=SQL_NO_DATA
.while (retcode!=SQL_ERROR && retcode!=SQL_NO_DATA)
invoke SQLFetchScroll,hStmt,SQL_FETCH_NEXT,0
mov retcode,ax
.endw
mov CurRecPosInCur ,1
invoke SQLFetchScroll,hStmt,SQL_FETCH_FIRST,0
invoke DisplayRecordAtControl,hTab2,CurRecPosInCur
invoke EnableWindow,hPre,FALSE
.else
invoke MessageBox,hTab2,addr EmptyRec,addr TitleName,MB_OK
invoke ButtEnable,FALSE
.ENDIF
.ENDIF
.ELSEIF uMsg == WM_COMMAND
mov eax,wParam
mov edx,eax
shr edx,16
.if lParam
.if dx==BN_CLICKED
.if ax==IDC_FIRST
mov CurRecPosInCur ,1
invoke SQLFetchScroll,hStmt,SQL_FETCH_FIRST,0
invoke DisplayRecordAtControl,hTab2,CurRecPosInCur
invoke EnableWindow,hPre,FALSE
invoke EnableWindow,hNext,TRUE
.elseif ax==IDC_NEXT
xor eax,eax
push esi
lea esi,RowStatusArray
mov al,2
mul CurRecPosInCur
add esi,eax
.if (word ptr [esi]==SQL_ROW_SUCCESS||word ptr [esi]==SQL_ROW_ADDED||word ptr [esi]==SQL_ROW_UPDATED)
inc CurRecPosInCur
invoke DisplayRecordAtControl,hTab2,CurRecPosInCur
.else
invoke EnableWindow,hNext,FALSE
.endif
pop esi
invoke EnableWindow,hPre,TRUE
.elseif ax==IDC_PRE
dec CurRecPosInCur
.if CurRecPosInCur<1
invoke EnableWindow,hPre,FALSE
mov CurRecPosInCur,1
.else
invoke DisplayRecordAtControl,hTab2,CurRecPosInCur
.endif
invoke EnableWindow,hNext,TRUE
.elseif ax==IDC_LAST
mov CurRecPosInCur,0
invoke SQLFetchScroll,hStmt,SQL_FETCH_LAST,0
push esi
lea esi,RowStatusArray
.while word ptr [esi]!=SQL_ROW_NOROW
inc CurRecPosInCur
add esi,2
.break .if CurRecPosInCur>=ROWS
.endw
pop esi
invoke DisplayRecordAtControl,hTab2,CurRecPosInCur
invoke EnableWindow,hNext,FALSE
invoke EnableWindow,hPre,TRUE
.elseif ax==IDC_APPEND
.if !bSave
invoke SetWindowText,hAppend,addr Save
mov bSave,TRUE
invoke ButtEnable,FALSE
invoke EnableWindow,hExit,FALSE
invoke SetWindowText,hTiGan,szNull
invoke SetWindowText,hDaAnA,szNull
invoke SetWindowText,hDaAnB,szNull
invoke SetWindowText,hDaAnC,szNull
;invoke SetDlgItemInt,hTab2,IDC_EDITTEXT_TiGan,0,0
.else
invoke SQLPrepare,hAppendStmt,addr SQLAppStmt,sizeof SQLAppStmt
invoke BindParamVariable,hAppendStmt
invoke GetParam,hTab2
invoke SQLExecute,hAppendStmt
mov bSave,FALSE
invoke SetWindowText,hAppend,addr szAppend
invoke ButtEnable, TRUE
invoke EnableWindow,hExit,TRUE
invoke RefreshList,hTab2
invoke SendMessage,hTab2,WM_COMMAND,IDC_LAST,BM_CLICK
.endif
.elseif ax==IDC_MODIFY
invoke SQLSetPos,hStmt,CurRecPosInCur,SQL_POSITION,SQL_LOCK_NO_CHANGE
invoke SQLPrepare,hCustStmt,addr SQLModStmt,sizeof SQLModStmt
invoke BindParamVariable ,hCustStmt
invoke GetParam,hTab2
invoke SQLExecute,hCustStmt
.if !(ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO)
invoke MessageBox,hTab2,addr ModError,addr TitleName,MB_OK
invoke SQLFreeHandle, SQL_HANDLE_ENV, hStmt
.endif
invoke RefreshList,hTab2
.elseif ax==IDC_DELETE
invoke SQLSetPos,hStmt,CurRecPosInCur,SQL_POSITION,SQL_LOCK_NO_CHANGE
invoke SQLPrepare,hCustStmt,addr SQLDelStmt,sizeof SQLDelStmt
invoke SQLExecute,hCustStmt
.if !(ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO)
invoke MessageBox,hTab2,addr DelError,addr TitleName,MB_OK
invoke SQLFreeHandle, SQL_HANDLE_ENV, hStmt
.endif
invoke RefreshList,hTab2
.if ax==SQL_NO_DATA
invoke ButtEnable,FALSE
invoke SetWindowText,hTiGan,szNull
invoke SetWindowText,hDaAnA,szNull
invoke SetWindowText,hDaAnB,szNull
invoke SetWindowText,hDaAnC,szNull
.else
dec CurRecPosInCur
.if !CurRecPosInCur
mov CurRecPosInCur,1
.endif
invoke DisplayRecordAtControl,hTab2,CurRecPosInCur
.endif
.elseif ax==IDC_EXIT
invoke SendMessage,hAll,WM_CLOSE,NULL,NULL
.endif
.endif
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
Tab2Proc endp
Tab3Proc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.if uMsg==WM_INITDIALOG
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
Tab3Proc endp
Tab4Proc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.if uMsg==WM_INITDIALOG
invoke CreateWindowEx,0,CTXT("AniGIF"),0,WS_VISIBLE or WS_CHILD or WAGS_AUTOSIZE,10,20,10,10,hWnd,2000,hInstance,0
invoke SendDlgItemMessage,hWnd,2000,WAGM_LOADGIFFROMFILE,0,CTXT(".\test.gif")
invoke GetSysColor,COLOR_BTNFACE
invoke SendDlgItemMessage,hWnd,2000,WAGM_SETBKCOLOR,0,eax
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
Tab4Proc endp
DlgMainProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL ts:TC_ITEM
mov eax,uMsg
.if eax==WM_INITDIALOG
push hWnd
pop hAll
invoke GetDlgItem,hAll,IDC_OK
mov hExit,eax
;Create the tabs
invoke GetDlgItem,hAll,IDC_TAB1
mov hTab,eax
mov ts.imask,TCIF_TEXT
mov ts.lpReserved1,0
mov ts.lpReserved2,0
mov ts.iImage,-1
mov ts.lParam,0
mov ts.pszText,offset TabTitle1
mov ts.cchTextMax,sizeof TabTitle1
invoke SendMessage,hTab,TCM_INSERTITEM,0,addr ts
mov ts.pszText,offset TabTitle2
mov ts.cchTextMax,sizeof TabTitle2
invoke SendMessage,hTab,TCM_INSERTITEM,1,addr ts
mov ts.pszText,offset TabTitle3
mov ts.cchTextMax,sizeof TabTitle3
invoke SendMessage,hTab,TCM_INSERTITEM,2,addr ts
mov ts.pszText,offset TabTitle4
mov ts.cchTextMax,sizeof TabTitle4
invoke SendMessage,hTab,TCM_INSERTITEM,3,addr ts
;Create the tab dialogs
invoke CreateDialogParam,hInstance,IDD_TAB1,hTab,addr Tab1Proc,0
mov hTabDlg,eax
invoke CreateDialogParam,hInstance,IDD_TAB2,hTab,addr Tab2Proc,0
mov hTabDlg[4],eax
invoke CreateDialogParam,hInstance,IDD_TAB3,hTab,addr Tab3Proc,0
mov hTabDlg[8],eax
invoke CreateDialogParam,hInstance,IDD_TAB4,hTab,addr Tab4Proc,0
mov hTabDlg[12],eax
;*以后在此设置操作级别
.elseif eax==WM_COMMAND
mov eax,wParam
mov edx,eax
and eax,0FFFFh
shr edx,16
.if edx==BN_CLICKED
.if eax==IDC_OK ;点击确定按钮
invoke SendMessage,hAll,WM_CLOSE,0,0
.elseif eax==IDC_CANCEL ;点击取消按钮
invoke SendMessage,hAll,WM_CLOSE,0,0
.endif
.endif
.elseif eax==WM_NOTIFY
mov eax,lParam
mov eax,[eax].NMHDR.code
.if eax==TCN_SELCHANGE
;Tab selection
invoke SendMessage,hTab,TCM_GETCURSEL,NULL,NULL
.if eax!=SelTab
push eax
mov eax,SelTab
invoke ShowWindow,[hTabDlg+eax*4],SW_HIDE
pop eax
mov SelTab,eax
invoke ShowWindow,[hTabDlg+eax*4],SW_SHOWDEFAULT
.endif
.endif
.elseif eax==WM_CLOSE
invoke EndDialog,hAll,NULL
invoke SendMessage,hLOGIN_DIALOG,WM_CLOSE,NULL,NULL
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgMainProc endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -