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

📄 tabmain.asm

📁 驾驶员考试系统,汇编编写,qq332779423
💻 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 + -