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

📄 winmain.asm

📁 驾驶员考试系统,汇编编写,qq332779423
💻 ASM
字号:
DEBUG		equ		1
include	WinMain.inc
.code
if		DEBUG
include		\masm32\debug\Debug.asm
endif
include TabAdd.asm
include kFormatDateTime.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
	LOCAL wc:WNDCLASSEX
	LOCAL msg:MSG
	LOCAL hwnd:HWND
	LOCAL 	ScreenX	:DWORD
	LOCAL ScreenY_tmp	:DWORD
	LOCAL ScreenY	:DWORD
	LOCAL hDC	:HWND
	LOCAL stRectWin:RECT
	
	
	mov   wc.cbSize,SIZEOF WNDCLASSEX
	mov   wc.style, CS_HREDRAW or CS_VREDRAW
	mov   wc.lpfnWndProc, OFFSET WndProc
	mov   wc.cbClsExtra,NULL
	mov   wc.cbWndExtra,NULL
	push  hInstance
	pop   wc.hInstance
	mov   wc.hbrBackground,COLOR_BTNFACE+1
	mov   wc.lpszMenuName,NULL
	mov   wc.lpszClassName,OFFSET ClassName
	
	invoke LoadIcon,NULL,IDI_APPLICATION
	mov   wc.hIcon,eax
	mov   wc.hIconSm,eax
	
	invoke LoadCursor,NULL,IDC_ARROW
	mov   wc.hCursor,eax
	
	invoke RegisterClassEx, addr wc
;**********************************************************	
	invoke CreateDC, ADDR szDisplay, NULL, NULL, NULL
	mov hDC,eax
	invoke GetDeviceCaps, hDC, HORZRES
	mov ScreenX, eax
	invoke GetDeviceCaps, hDC, VERTRES
	mov ScreenY,eax
	invoke DeleteDC, hDC
;**********************************************************		
	INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppNameMain,\
           WS_POPUP or WS_VISIBLE,\
           0, 0, ScreenX,ScreenY,NULL,NULL,\
           hInst,NULL
	mov   hwnd,eax
	
	invoke ShowWindow, hwnd,SW_SHOWNORMAL
	invoke UpdateWindow, hwnd
	
	.WHILE TRUE
		invoke GetMessage, ADDR msg,NULL,0,0
		.BREAK .IF (!eax)
		invoke TranslateAccelerator,hwnd,hAccel,ADDR msg
		.IF (!eax)
		invoke TranslateMessage, ADDR msg
		invoke DispatchMessage, ADDR msg
		.endif
	.ENDW
	
	mov     eax,msg.wParam
	ret
WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
	LOCAL	@stRectDeskTop :RECT
	LOCAL	tci:TCITEM
	
	.IF uMsg==WM_DESTROY
		invoke	KillTimer, hWnd, 1
		invoke PostQuitMessage,NULL
	.ELSEIF uMsg==WM_CREATE
		invoke    SetTimer,hWnd,1,1000,NULL  ;设置timer
		invoke CreateWindowEx,NULL, ADDR StaticClassName,addr szTittleLabel,\
				WS_VISIBLE or WS_CHILD or  BS_LEFTTEXT  ,0,0,640,25,\
				hWnd,ID_Tittle_Lable,hInstance,NULL
		invoke CreateWindowEx,NULL, ADDR StaticClassName,addr szTimeFormat,\
				WS_VISIBLE or WS_CHILD or  BS_LEFTTEXT  ,0,460,640,20,\
				hWnd,ID_Time_Format,hInstance,NULL
		mov		hTimeFormat,eax
		;invoke BmpButton,hWnd,300,400,203,204,600
		invoke CreateWindowEx,0,CTXT("AniGIF"),0,WS_VISIBLE or WS_CHILD or WAGS_AUTOSIZE,700,10,10,10,hWnd,1000,hInstance,0
		invoke SendDlgItemMessage,hWnd,1000,WAGM_LOADGIFFROMFILE,0,CTXT(".\test.gif")
		invoke GetSysColor,COLOR_BTNFACE
		invoke SendDlgItemMessage,hWnd,1000,WAGM_SETBKCOLOR,0,eax

        szText bTxt1,"退出程序"
        invoke PushButton,ADDR bTxt1,hWnd,120,420,150,25,500	;   数字意义	按钮位置, 按钮位置,按钮长,按钮高 ,按钮消息号
																;例如        .if wParam == 500
		invoke CreateWindowEx,NULL, ADDR ButtonClassName,addr RadioButtonText2,\
				WS_VISIBLE or WS_CHILD or BS_AUTORADIOBUTTON or BS_TOP ,\
				150,495,75,20,hWnd,ID_BUTTON_RADIO1,hInstance,NULL
		mov	hwndButtonRadio,eax

  		invoke	CreateWindowEx,WS_EX_CLIENTEDGE,offset szSysTabClass,NULL,\
			LVS_REPORT or WS_CHILD or WS_VISIBLE or WS_BORDER,\
			10,30,530,350,\
			hWnd,IDC_SysTab,hInstance,NULL
		mov	hTab,eax
;----------------- [Fill the Tab Control Item structure and insert the item] --------------------
		mov     tci.imask, TCIF_TEXT or TCIF_PARAM	; Text
		mov     tci.lpReserved1, 0               	; Reserved
		mov     tci.lpReserved2, 0               	; Reserved
		mov     tci.pszText, offset szTabLabel1    	; pointer to string containing tab text 
		mov     tci.cchTextMax, sizeof szTabLabel1 	; Size of szTabLabel1
		mov     tci.iImage, -1                   	; Index to tab control's image 
		mov     tci.lParam, 0                    	; Extra info
		INVOKE     SendMessage, hTab, TCM_INSERTITEM, 0, addr	tci		
		mov	tci.pszText,offset szTabLabel2
		mov	tci.cchTextMax, sizeof szTabLabel2
		invoke SendMessage,hTab,TCM_INSERTITEM,1,addr tci
		mov	tci.pszText,offset szTabLabel3
		mov	tci.cchTextMax, sizeof szTabLabel3
		invoke SendMessage,hTab,TCM_INSERTITEM,2,addr tci
		mov	tci.pszText,offset szTabLabel4
		mov	tci.cchTextMax, sizeof szTabLabel4
		invoke SendMessage,hTab,TCM_INSERTITEM,3,addr tci

;		invoke SendMessage,hTab,TCM_SETCURSEL,eax,0


	.ELSEIF uMsg ==  WM_TIMER
		.IF		wParam==1
			invoke	kFormatDateTime,addr szBuf,addr szTimeFormat,NULL
			invoke	SetWindowText,hTimeFormat,addr szBuf
			invoke	MessageBeep, 0
		.endif	
	.ELSEIF uMsg == WM_COMMAND
        .if wParam == 500
			invoke SendMessage,hWnd,WM_DESTROY,0,0
		.ENDIF

		invoke SetFocus ,hWnd;测试成功,可以响应wm_char啦,必须放在最后!!!
	.ELSEIF	uMsg==WM_CHAR
		invoke	MessageBeep, 0
		_Debug	"显示寄存器或 double word 变量","EAX的值为",wParam
	.ELSE
		invoke DefWindowProc,hWnd,uMsg,wParam,lParam		
		ret
	.ENDIF
	
	xor eax,eax
	ret
WndProc endp

⌨️ 快捷键说明

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