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

📄 xp.asm

📁 用ASM实现Server及sql操作
💻 ASM
📖 第 1 页 / 共 5 页
字号:
PopupSubSystemMenu	endp

DeleteXpResource	PROC
	invoke DeleteObject,hBmpTitleLeft
	invoke DeleteObject,hBmpTitleRight
	invoke DeleteObject,hBmpTitleCenter
	invoke DeleteObject,hBmpCloseNoActive
	invoke DeleteObject,hBmpCloseActive
	invoke DeleteObject,hBmpCloseDown
	invoke DeleteObject,hButtonBmpNoActive
	invoke DeleteObject,hButtonBmpSetFocus
	invoke DeleteObject,hButtonBmpActive
	invoke DeleteObject,hButtonBmpDown
	invoke DeleteObject,hButtonBmpDisable
	invoke DeleteObject,hXpBrush
	ret
DeleteXpResource	ENDP
; 向列表框中循环添加数据的子程序
AddListDataSub	proc uses esi ebx,hWin:DWORD,lpDlg:DWORD,lpSZ:DWORD
	invoke GetDlgItem,hWin,lpDlg
	mov ebx,eax
	mov esi,lpSZ
	.repeat
		invoke SendMessage,ebx,CB_INSERTSTRING,-1,esi
		invoke lstrlen,esi
		add esi,eax
		inc esi
	.until byte ptr [esi] == 0
	invoke SendMessage,ebx,CB_SETCURSEL,0,0
	ret
AddListDataSub	endp
; 自绘制组合框
.data
hComboBoxDrop					db 0
.code
DrawComboBoxItem	proc uses ebx,hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
	LOCAL	hBrush	:DWORD
	LOCAL	hdc		:DWORD
	LOCAL	szFont	:DWORD
	LOCAL	hBakFont:DWORD
	LOCAL	hMemDC	:DWORD,hBmp:DWORD
	LOCAL	hBakBmp	:DWORD,hBakMode:DWORD,hBakColor:DWORD,hTxtColor:DWORD
	LOCAL	Ps		:PAINTSTRUCT
	LOCAL	rct		:RECT
	LOCAL	pt		:POINT
	LOCAL	@stFont	:LOGFONT
	LOCAL	TempBuffer[MAX_PATH]:BYTE
mov eax,uMsg
.if eax == WM_PAINT
	invoke BeginPaint,hWin,addr Ps
	mov    hdc,eax
	invoke GetBkMode,hdc
	mov hBakMode,eax
	invoke GetBkColor,hdc
	mov hBakColor,eax
	invoke GetTextColor,hdc
	mov hTxtColor,eax
	invoke SetBkMode,hdc,TRANSPARENT
	invoke CreateCompatibleDC,NULL
	mov hMemDC,eax
	invoke GetClientRect,hWin,addr rct
	invoke InflateRect,addr rct,-1,-1
	invoke IsWindowEnabled,hWin
	.if eax == FALSE
		invoke GetSysColor,COLOR_GRAYTEXT
		push eax
		invoke SetTextColor,hdc,eax
		pop eax
		invoke DrawRectEdge,hdc,addr rct,eax,1
		mov ebx,XPBKCOLOR
		push 73
	.else
		invoke DrawRectEdge,hdc,addr rct,XPEDGECOLOR,1
		mov ebx,White
		invoke SetTextColor,hdc,Black
		.if hComboBoxDrop == 0
			push 71
		.else
			push 72
		.endif
	.endif
	pop eax
	invoke LoadBitmap,hInstance,eax
	invoke SetBmpColor,eax,ebx,15,16
	mov hBmp,eax
	invoke SelectObject,hMemDC,eax
	mov hBakBmp,eax
	invoke InflateRect,addr rct,-1,-1
	m2m rct.left,rct.right
	sub rct.left,15
	invoke BitBlt,hdc,rct.left,rct.top,15,16,hMemDC,0,0,SRCCOPY
	invoke SelectObject,hMemDC,hBakBmp
	invoke DeleteObject,hBmp
	invoke DeleteDC,hMemDC
	invoke SetBkColor,hdc,ebx
	m2m rct.right,rct.left
	m2m rct.left,2
	invoke ExtTextOut,hdc,0,0,ETO_OPAQUE,addr rct,0,0,0
	dec rct.right
	invoke GetWindowText,hWin,addr TempBuffer,sizeof TempBuffer
	invoke SendMessage,hWin,WM_GETFONT,0,0
	mov	szFont,eax
	invoke GetObject,szFont,sizeof LOGFONT,addr @stFont
	invoke CreateFontIndirect,addr @stFont
	mov szFont,eax
	invoke SelectObject,hdc,szFont
	mov hBakFont,eax
	add rct.left,2
	invoke DrawText,hdc,addr TempBuffer,-1,addr rct,DT_VCENTER or DT_SINGLELINE
	invoke SelectObject,hdc,hBakFont
	invoke DeleteObject,szFont
	invoke SetTextColor,hdc,hTxtColor
	invoke SetBkColor,hdc,hBakColor
	invoke SetBkMode,hdc,hBakMode
	invoke EndPaint,hWin,addr Ps
	xor eax,eax
	ret
.endif
invoke	GetWindowLong,hWin,GWL_USERDATA
invoke	CallWindowProc,eax,hWin,uMsg,wParam,lParam
ret
DrawComboBoxItem	endp
; 绘制旋转按钮
.data?
hUdmTopState	db ?
hUdmBottomState	db ?
.code
DrawUdmItem	proc uses ebx,hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
	LOCAL	hdc		:DWORD
	LOCAL	hMemDC	:DWORD,hBakColor:DWORD
	LOCAL	hBakBmp	:DWORD,hBmp1:DWORD,hBmp2:DWORD
	LOCAL	hState	:DWORD
	LOCAL	Ps		:PAINTSTRUCT
	LOCAL	rct		:RECT
mov eax,uMsg
.if eax == WM_PAINT
	invoke BeginPaint,hWin,addr Ps
	mov    hdc,eax
	invoke GetClientRect,hWin,addr rct
	invoke CreateCompatibleDC,NULL
	mov hMemDC,eax
	invoke GetBkColor,hdc
	mov hBakColor,eax
	invoke IsWindowEnabled,hWin
	.if eax == TRUE
		mov hState,0
	.else
		mov hState,1
	.endif
	.if hState == 1
		mov ebx,XPBKCOLOR
		push 85
	.else
		invoke GetSysColor,COLOR_WINDOW
		mov ebx,eax
		.if hUdmTopState == 0
			push 81
		.else
			push 83
		.endif
	.endif
	pop eax
	invoke LoadBitmap,hInstance,eax
	invoke SetBmpColor,eax,ebx,17,9
	mov hBmp1,eax
	invoke SelectObject,hMemDC,eax
	mov hBakBmp,eax
	invoke SetBkColor,hdc,ebx
	invoke ExtTextOut,hdc,0,0,ETO_OPAQUE,addr rct,0,0,0
	invoke BitBlt,hdc,0,0,17,9,hMemDC,0,0,SRCCOPY
	.if hState == 1
		push 86
	.else
		.if hUdmBottomState == 0
			push 82
		.else
			push 84
		.endif
	.endif
	pop eax
	invoke LoadBitmap,hInstance,eax
	invoke SetBmpColor,eax,ebx,17,8
	mov hBmp2,eax
	invoke SelectObject,hMemDC,eax
	invoke DeleteObject,hBmp1
	invoke BitBlt,hdc,0,9,17,8,hMemDC,0,0,SRCCOPY
	invoke SelectObject,hMemDC,hBakBmp
	invoke DeleteObject,hBmp2
	invoke DeleteDC,hMemDC
	.if hState == 1
		invoke GetSysColor,COLOR_GRAYTEXT
	.else
		mov eax,XPEDGECOLOR
	.endif
	mov ebx,eax
	invoke GetWindowLong,hWin,GWL_STYLE
	.if eax & UDS_AUTOBUDDY
		xor eax,eax
	.else
		m2m eax,1
	.endif
	invoke DrawRectEdge,hdc,addr rct,ebx,eax
	invoke SetBkColor,hdc,hBakColor
	invoke EndPaint,hWin,addr Ps
	xor eax,eax
	ret
.elseif eax == WM_LBUTTONDOWN
	.if word ptr lParam+2 < 9
		inc hUdmTopState
	.else
		inc hUdmBottomState
	.endif
.elseif eax == WM_LBUTTONUP
	mov hUdmBottomState,0
	mov hUdmTopState,0
.endif
invoke GetWindowLong,hWin,GWL_USERDATA
invoke CallWindowProc,eax,hWin,uMsg,wParam,lParam
ret
DrawUdmItem	endp
; 绘制选择按钮
DrawCheckButton	proc	hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
	LOCAL hdc			:DWORD
	LOCAL hMemDC		:DWORD
	LOCAL hBmpCheck		:DWORD
	LOCAL hBakBmp		:DWORD
	LOCAL hPen			:DWORD
	LOCAL hBakPen		:DWORD
	LOCAL hBrush		:DWORD,hCheckFont:DWORD,hBakFont:DWORD
	LOCAL hBakBrush		:DWORD,hBakMode:DWORD,hBakColor:DWORD,hTxtColor:DWORD
	LOCAL hButtonStyle	:BYTE
	LOCAL hState		:BYTE
	LOCAL hPoint		:POINT
	LOCAL rct			:RECT
	LOCAL rect			:RECT
	LOCAL Ps			:PAINTSTRUCT
	LOCAL @stFont		:LOGFONT
	LOCAL TempBuffer	[MAX_PATH]:BYTE
	mov eax,uMsg
	.if eax == WM_PAINT
		invoke BeginPaint,hWin,addr Ps
		mov hdc,eax
		invoke GetWindowText,hWin,addr TempBuffer,sizeof TempBuffer
		invoke GetBkMode,hdc
		mov hBakMode,eax
		invoke GetBkColor,hdc
		mov hBakColor,eax
		invoke GetTextColor,hdc
		mov hTxtColor,eax
		invoke SetBkMode,hdc,TRANSPARENT
		invoke GetClientRect,hWin,addr rect
		invoke MemCopy,addr rect,addr rct,sizeof RECT
		invoke SetBkColor,hdc,XPBKCOLOR
		invoke ExtTextOut,hdc,0,0,ETO_OPAQUE,addr rct,0,0,0
		invoke GetCursorPos,addr hPoint
		invoke WindowFromPoint,hPoint.x,hPoint.y
		;mov rct.right,13
		invoke CreateCompatibleDC,NULL
		mov hMemDC,eax
		invoke GetWindowLong,hWin,GWL_STYLE
		mov hButtonStyle,al
		invoke IsWindowEnabled,hWin
		.if eax == TRUE
			invoke SendMessage,hWin,BM_GETCHECK,0,0		; 确定是否选中状态
			.if eax == TRUE
				mov eax,hWin
				.if lpFloatButtonDown == 1 && lpFloatButtonWin == eax
					.if hButtonStyle == BS_AUTORADIOBUTTON
						push 66
					.else
						push 56
					.endif
				.else
					.if lpFloatButtonItalic == 1 && lpFloatButtonWin == eax
						.if hButtonStyle == BS_AUTORADIOBUTTON
							push 64
						.else
							push 54
						.endif
					.else
						.if hButtonStyle == BS_AUTORADIOBUTTON
							push 62
						.else
							push 52
						.endif
					.endif
				.endif
			.else
				mov eax,hWin
				.if lpFloatButtonDown == 1 && lpFloatButtonWin == eax
					.if hButtonStyle == BS_AUTORADIOBUTTON
						push 65
					.else
						push 55
					.endif
				.else
					.if lpFloatButtonItalic == 1 && lpFloatButtonWin == eax
						.if hButtonStyle == BS_AUTORADIOBUTTON
							push 63
						.else
							push 53
						.endif
					.else
						.if hButtonStyle == BS_AUTORADIOBUTTON
							push 61
						.else
							push 51
						.endif
					.endif
				.endif
			.endif
			mov hState,0
		.else
			.if hButtonStyle == BS_AUTORADIOBUTTON
				invoke CreateSolidBrush,XPBKCOLOR		; 创建XP色的画刷作为背景色
				mov hBrush,eax
				invoke GetSysColor,COLOR_GRAYTEXT
				invoke CreatePen,PS_INSIDEFRAME,1,eax	; 64ff创建白色的画刷作为边框色
				mov hPen,eax
				invoke SelectObject,hdc,hBrush
				mov hBakBrush,eax
				invoke SelectObject,hdc,hPen
				mov hBakPen,eax
				invoke Ellipse,hdc,0,0,13,13
				invoke SendMessage,hWin,BM_GETCHECK,0,0
				.if eax == TRUE
					invoke GetSysColor,COLOR_GRAYTEXT
					invoke CreateSolidBrush,eax
					push eax
					invoke SelectObject,hdc,eax
					invoke DeleteObject,hBrush
					pop eax
					mov hBrush,eax
					invoke Ellipse,hdc,4,4,9,9
				.endif
				invoke SelectObject,hdc,hBakPen
				invoke SelectObject,hdc,hBakBrush
				invoke DeleteObject,hPen
				invoke DeleteObject,hBrush
				push 0
			.else
				invoke SendMessage,hWin,BM_GETCHECK,0,0
				.if eax == TRUE
					push 58
				.else
					push 57
				.endif
			.endif
			mov hState,1
		.endif
		pop eax
		.if eax != 0
			invoke LoadBitmap,hInstance,eax
			.if hButtonStyle == BS_AUTORADIOBUTTON
				invoke SetBmpColor,eax,XPBKCOLOR,13,13
			.endif
			mov hBmpCheck,eax
			invoke SelectObject,hMemDC,hBmpCheck
			mov hBakBmp,eax
			invoke BitBlt,hdc,0,0,rct.right,rct.bottom,hMemDC,0,0,SRCCOPY
			invoke SelectObject,hMemDC,hBakBmp
			invoke DeleteObject,hBmpCheck
		.endif
		invoke DeleteDC,hMemDC
		invoke MemCopy,addr rect,addr rct,sizeof RECT
		add rct.left,16
		invoke SendMessage,hWin,WM_GETFONT,0,0
		lea edx,@stFont
		invoke GetObject,eax,sizeof LOGFONT,edx
		invoke CreateFontIndirect,addr @stFont
		mov hCheckFont,eax
		invoke SelectObject,hdc,eax
		mov hBakFont,eax
		.if hState == 0
			invoke SetTextColor,hdc,Black
			invoke DrawText,hdc,addr TempBuffer,-1,addr rct,DT_SINGLELINE or DT_VCENTER
		.else
			invoke SetTextColor,hdc,White
			invoke OffsetRect,addr rct,1,1
			invoke DrawText,hdc,addr TempBuffer,-1,addr rct,DT_SINGLELINE or DT_VCENTER
			invoke GetSysColor,COLOR_GRAYTEXT
			invoke SetTextColor,hdc,eax
			invoke OffsetRect,addr rct,-1,-1
			invoke DrawText,hdc,addr TempBuffer,-1,addr rct,DT_SINGLELINE or DT_VCENTER
		.endif
		invoke SelectObject,hdc,hBakFont
		invoke DeleteObject,hCheckFont
		invoke SetTextColor,hdc,hTxtColor
		invoke SetBkColor,hdc,hBakColor
		invoke SetBkMode,hdc,hBakMode
		invoke EndPaint,hWin,addr Ps
		xor eax,eax
		ret
	.elseif eax == BM_SETSTATE || eax == BM_SETCHECK	; 处理用鼠标点击复选窗口时的消息并重绘窗口
		invoke RedrawWindow,hWin,0,0,RDW_INVALIDATE
	.elseif	eax == WM_SETFOCUS
		invoke RedrawWindow,hWin,0,0,RDW_INVALIDATE
	.endif
	invoke UpdateFloatButton,hWin,uMsg,wParam,lParam
	ret
DrawCheckButton	endp
; 绘制超级链接窗口
HyperLinkProc	proc	hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
	LOCAL TempBuffer[MAX_PATH]:BYTE
	LOCAL hdc:DWORD,hTxtColor:DWORD
	LOCAL hBakFont:DWORD,hBakColor:DWORD,hBakMode:DWORD
	LOCAL httpFont:DWORD
	LOCAL hColor:DWORD
	LOCAL rct:RECT
	LOCAL Ps:PAINTSTRUCT
	LOCAL hPoint:POINT
	LOCAL @stFont:LOGFONT
	mov	eax,uMsg
	.if	eax ==	WM_LBUTTONUP
		invoke GetCursorPos,addr hPoint
		invoke WindowFromPoint,hPoint.x,hPoint.y
		.if eax == hWin && lpFloatButtonMove == 1
			invoke GetWindowText,hWin,addr TempBuffer,sizeof TempBuffer
			invoke IsEmailHttp,addr TempBuffer
			.if	eax != 0
				invoke lstrcpy,addr TempBuffer,STEXT('mailto:')
				invoke lstrlen,addr TempBuffer
				lea edx,TempBuffer
				add eax,edx
				invoke GetWindowText,hWin,eax,sizeof TempBuffer
			.endif
			invoke ShellExecute,0,0,addr TempBuffer,0,0,0
		.endif
	.elseif	eax ==	WM_SETCURSOR

⌨️ 快捷键说明

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