winmain.asm

来自「一个十六进制编辑器源代码,cool!」· 汇编 代码 · 共 62 行

ASM
62
字号
WinMain		PROTO :DWORD,:DWORD,:DWORD,:DWORD
_isdlgmsg macro @hDlg
		.if @hDlg
			invoke IsDialogMessage,@hDlg,addr msg
			test eax,eax
			jnz @B
		.endif
		endm	
.code
WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD
	LOCAL wc   :WNDCLASSEX
	LOCAL msg  :MSG
	local @hAccel:DWORD	
	;---------------------
	;加载加速键
	invoke LoadAccelerators,NULL ,1000
	mov @hAccel,eax
	;注册主窗口类
	invoke RtlZeroMemory,addr wc,sizeof wc
	mov wc.cbSize,sizeof WNDCLASSEX
	mov wc.style,CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW
	m2m wc.hInstance,hInst
	mov wc.lpszMenuName,IDM_MAIN
	invoke LoadIcon,hInstance,IDI_MAIN
	mov wc.hIcon,eax
	mov wc.hbrBackground,NULL
	invoke LoadCursor,NULL,IDC_ARROW 
	mov wc.hCursor, eax
	mov wc.lpfnWndProc,offset WndProc
	mov wc.lpszClassName,offset szClassName
	invoke RegisterClassEx, addr  wc
	;建立主窗口框架
	mov eax,CW_USEDEFAULT
	invoke CreateWindowEx,WS_EX_CLIENTEDGE or WS_EX_ACCEPTFILES ,\
		addr szClassName,addr szWindowName,\
		WS_OVERLAPPEDWINDOW or WS_VSCROLL ,\
		eax,eax,eax,eax,\
		NULL,0,hInst,NULL
;-----------------------------------------
	invoke ShowWindow,hWnd,SW_SHOWNORMAL
	invoke UpdateWindow,hWnd
;-----------------------------------------
	call _InitApp;xHex.asm
@@:
	invoke GetMessage,addr  msg,NULL,0,0
	test eax, eax
	jz @F
	invoke TranslateAccelerator,hWnd ,@hAccel,addr msg
	.if eax==0
		_isdlgmsg g_hDlg_GoTo
		_isdlgmsg g_hDlg_Conv
		_isdlgmsg g_hDlg_Find
		invoke TranslateMessage, addr  msg
		invoke DispatchMessage, addr  msg
	.endif		
	jmp @B
@@:
;------------------------------------------------
	mov eax,msg.wParam
	ret
WinMain endp

⌨️ 快捷键说明

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