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

📄 wndprocbak.asm

📁 一个十六进制编辑器源代码,cool!
💻 ASM
字号:
;---------------------------------------------------------------------------

WndProc		PROTO :DWORD,:DWORD,:DWORD,:DWORD
_OnVScroll	proto:DWORD ,:DWORD
_OnLeftButtonDown	proto:DWORD ,:DWORD 
_OnLeftButtonUp 	proto:DWORD ,:DWORD 
_OnRightButtonUp 	proto:DWORD ,:DWORD 
_OnMouseMove	proto:DWORD ,:DWORD 
_OnKeyDown proto:DWORD ,:DWORD 

_SetPos proto:DWORD 
_Point2Pos proto:DWORD 
include on_char.asm
include show_data.asm
include copy.asm
include struct.asm
include hash\hash.asm
include cmpfile.asm
include on_command.asm
.code
;------------------------------
WndProc proc hWin,uMsg,wParam ,lParam
Local @ps:PAINTSTRUCT
local @szBuf[255]:BYTE 
	mov eax,uMsg
	.if eax==WM_CREATE
		m2m hWnd,hWin
	.elseif eax==WM_COMMAND 
		_OnCommand
	.elseif eax==WM_CLOSE
		call _GetModify
		.if eax!=IDCANCEL 			
			invoke DestroyWindow,hWin
		.endif
	.elseif eax==WM_DESTROY		
		call _AppEnd
		invoke PostQuitMessage,NULL
	.elseif eax==WM_PAINT 
		invoke BeginPaint,hWin,addr @ps
		.if lpMemFile
			call _OnPaint
		.endif
		invoke EndPaint,hWin,addr @ps
	.elseif eax==WM_VSCROLL 
		invoke  _OnVScroll,wParam,lParam
	.elseif eax==WM_LBUTTONDOWN 
		invoke _OnLeftButtonDown,wParam,lParam
	.elseif eax==WM_LBUTTONUP 
		invoke _OnLeftButtonUp,wParam,lParam
	.elseif eax==WM_RBUTTONUP
		invoke _OnRightButtonUp,wParam,lParam
	.elseif eax==WM_MOUSEMOVE 
		invoke _OnMouseMove,wParam,lParam
	.elseif eax==WM_CHAR 
		_OnChar
	.elseif eax==WM_MOUSEWHEEL
		mov eax,wParam
		shr eax,16
		.if SWORD ptr ax<0
			invoke SendMessage,hWin,WM_VSCROLL ,SB_LINEDOWN ,0
		.else
			invoke SendMessage,hWin,WM_VSCROLL ,SB_LINEUP ,0
		.endif
	.elseif eax==WM_KEYDOWN 
		invoke _OnKeyDown ,wParam,lParam
	.elseif eax==WM_TIMER
		xor dwColorFlash,COLOR_CURSOR
		call _ReDraw
	.elseif eax==WM_INITMENUPOPUP
		push edi
		.if dwFileType==FILE_NORMAL
			xor edi,edi;mov edi,MF_ENABLED 
		.else
			mov edi,MF_GRAYED 
		.endif
		;插入,删除只有在正常模式才能使用
		invoke EnableMenuItem,hMenu,40011,edi
		invoke EnableMenuItem,hMenu,40012,edi
		invoke EnableMenuItem,hMenu,40010,edi
		invoke EnableMenuItem,hMenu,40015,edi
		pop edi
	.elseif eax==WM_DROPFILES 
		invoke DragQueryFile,wParam,0,addr @szBuf,255
		call _GetModify
		.if eax!=IDCANCEL		
				invoke _OpenFile,addr @szBuf			
		.endif
	.elseif eax==WM_SIZE 
		invoke SendMessage,hStatusBar,WM_SIZE ,wParam,lParam
	.else
		invoke DefWindowProc,hWin,uMsg,wParam,lParam		
		ret
	.endif
_ret_:
	xor eax,eax
	ret
WndProc endp
;-------------------------------------------------

;-------------------------------------------
_OnVScroll proc wParam,lParam
local sci:SCROLLINFO 
	pushad
	mov sci.cbSize,sizeof SCROLLINFO 
	mov sci.fMask,SIF_ALL 
	invoke GetScrollInfo,hWnd,SB_VERT,addr sci
	mov ebx,sci.nPos
	mov eax,wParam
	.if ax==SB_LINEUP
		dec ebx
	.elseif ax==SB_LINEDOWN 
		inc ebx
	.elseif ax==SB_PAGEUP
		mov eax,g_LastVisible
		sub eax,g_FirstVisible
		inc eax
		sub ebx,eax
	.elseif ax==SB_PAGEDOWN
		mov eax,g_LastVisible
		sub eax,g_FirstVisible
		inc eax
		add ebx,eax
	.elseif ax==SB_THUMBPOSITION || ax==SB_THUMBTRACK
		mov ebx,sci.nTrackPos;和上2句同效
	.endif
	.if sdword ptr ebx<0
		xor ebx,ebx
	.elseif ebx>g_TotalLine
		mov ebx,g_TotalLine
	.endif
	mov g_TopLine,ebx
	mov sci.fMask,SIF_POS 
	mov sci.nPos,ebx
	invoke SetScrollInfo,hWnd,SB_VERT ,addr sci,TRUE 
	call _ReDraw
	popad
	ret
_OnVScroll endp
;------------------------------------------
_OnLeftButtonDown proc uses edx wParam,lParam
	;鼠标左键按下,重新设置dwBlockStart(如果按住Shift则不设置dwBlockStart)和dwBlockEnd
	mov m_y,hiword(lParam)
	mov m_x,loword(lParam)
	invoke _Point2Pos,lParam
	.if edx>=2
		.if !(wParam & MK_SHIFT)
			mov dwBlockStart,eax
		.endif
		mov dwBlockEnd,eax
		or FLAG_ALL,FLAG_DRAGING
		and FLAG_ALL,not FLAG_INPUTLOWBYTE
		and FLAG_ALL,not FLAG_BLOCKSEL
	.endif
	ret
_OnLeftButtonDown endp
;-------------------------------------
_OnMouseMove proc uses edx wParam,lParam
;鼠标移动的时候,如果有按住左键,则设置选择区
local @szBuf[100]:BYTE 
	.if FLAG_ALL & FLAG_DRAGING 
		invoke _Point2Pos,lParam
		.if edx>=2
			mov dwBlockEnd,eax
			call _ReDraw
		.endif
	.endif
	ret
_OnMouseMove endp
;---------------------------------------
_OnLeftButtonUp proc uses edx wParam,lParam
;左键松开,如果不是处于拖动状态,则重新设置dwBlockStart,dwBlockEnd
	invoke _Point2Pos,lParam
	.if edx>=2
		m2m dwPrePos,dwCurPos
		mov dwBlockEnd,eax
		mov dwCurPos,eax
		.if !(FLAG_ALL & FLAG_DRAGING)
			mov dwBlockStart,eax
		.endif
		.if eax<dwBlockStart
			push eax
			push dwBlockStart
			pop dwBlockEnd
			pop dwBlockStart
		.endif

		and FLAG_ALL,not FLAG_DRAGING
		call _ReDraw
		call _ShowData
	.endif
	ret
_OnLeftButtonUp endp
;------------------------------------------------------------------------------
_OnRightButtonUp proc wParam,lParam
;右键弹出菜单
	Local @pt:POINTL 
	invoke GetCursorPos,addr @pt
	invoke GetSubMenu,hMenu,1
	invoke TrackPopupMenu,eax,TPM_LEFTBUTTON or TPM_RIGHTBUTTON ,@pt.x,@pt.y,0,hWnd,NULL 
	ret
_OnRightButtonUp endp
;---------------------------
_OnKeyDown proc uses ecx ebx wParam,lParam
;处理翻页,方向键移动光标
	mov eax,wParam
	mov ecx,dwCurPos
	mov ebx,g_LastVisible
	sub ebx,g_FirstVisible
	inc ebx;ebx为一页
	.if eax==VK_UP 
		sub ecx,10h
	.elseif eax==VK_DOWN 
		add ecx,10h
	.elseif eax==VK_LEFT
			dec ecx
	.elseif eax==VK_RIGHT
			inc ecx
	.elseif eax==VK_PGUP
		sub ecx,ebx
	.elseif eax==VK_PGDN 
		add ecx,ebx
	.elseif eax==VK_HOME 
		and ecx,not 0fh
	.elseif eax==VK_END 
		or ecx,0fh
	.else
		xor eax,eax
		ret
	.endif
	invoke _SetPos,ecx
	ret
_OnKeyDown endp
;-----------------------------------
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<



⌨️ 快捷键说明

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