📄 cfbutton.asm
字号:
CBBu_GetActiveTextCol_Funct proc uses edi,lpTHIS:dword
SetObject edi, CFButton
mov eax,[edi].m_ActiveTextCol
ReleaseObject edi
ret
CBBu_GetActiveTextCol_Funct endp
; --=====================================================================================--
; #METHOD: SetActiveTextCol (:DWORD)
; #DESCRIPTION: 设置鼠标移动到上边的文本颜色
; #PARAM: Col RGB Color should be setted..
; #RETURN: Nothing..
; --=====================================================================================--
CBBu_SetActiveTextCol_Funct proc uses edi,lpTHIS:dword,Col:dword
SetObject edi, CFButton
mov eax,Col
mov [edi].m_ActiveTextCol,eax
ReleaseObject edi
ret
CBBu_SetActiveTextCol_Funct endp
; --=====================================================================================--
; #METHOD: GetInactiveTextCol (NONE)
; #DESCRIPTION: 取非Active的文本颜色
; #RETURN: Inactive Text Color..
; --=====================================================================================--
CBBu_GetInactiveTextCol_Funct proc uses edi,lpTHIS:dword
SetObject edi, CFButton
mov eax,[edi].m_InactiveTextCol
ReleaseObject edi
ret
CBBu_GetInactiveTextCol_Funct endp
; --=====================================================================================--
; #METHOD: SetInactiveTextCol (:DWORD)
; #DESCRIPTION: 设置非Active的文本颜色
; #PARAM: Col RGB Color should be setted..
; #RETURN: Nothing..
; --=====================================================================================--
CBBu_SetInactiveTextCol_Funct proc uses edi,lpTHIS:dword,Col:dword
SetObject edi, CFButton
mov eax,Col
mov [edi].m_InactiveTextCol,eax
ReleaseObject edi
ret
CBBu_SetInactiveTextCol_Funct endp
; --=====================================================================================--
; #METHOD: GetActiveBkCol (NONE)
; #DESCRIPTION: 取Active状态按钮的背景颜色
; #RETURN: Active back color..
; --=====================================================================================--
CBBu_GetActiveBkCol_Funct proc uses edi,lpTHIS:dword
SetObject edi, CFButton
mov eax,[edi].m_ActiveBkCol
ReleaseObject edi
ret
CBBu_GetActiveBkCol_Funct endp
; --=====================================================================================--
; #METHOD: SetActiveBkCol (:DWORD)
; #DESCRIPTION: 设置Active状态按钮的背景颜色
; #PARAM: Col RGB Color should be setted..
; #RETURN: Nothing..
; --=====================================================================================--
CBBu_SetActiveBkCol_Funct proc uses edi,lpTHIS:dword,Col:dword
SetObject edi, CFButton
mov eax,Col
mov [edi].m_ActiveBkCol,eax
ReleaseObject edi
ret
CBBu_SetActiveBkCol_Funct endp
; --=====================================================================================--
; #METHOD: GetInactiveBkCol (NONE)
; #DESCRIPTION: 取非Active状态按钮的背景颜色
; #RETURN: Inactive Back Color..
; --=====================================================================================--
CBBu_GetInactiveBkCol_Funct proc uses edi,lpTHIS:dword
SetObject edi, CFButton
mov eax,[edi].m_InactiveBkCol
ReleaseObject edi
ret
CBBu_GetInactiveBkCol_Funct endp
; --=====================================================================================--
; #METHOD: SetInactiveBkCol (:DWORD)
; #DESCRIPTION: 设置非Active状态按钮的背景颜色
; #PARAM: Col RGB Color should be setted..
; #RETURN: Nothing..
; --=====================================================================================--
CBBu_SetInactiveBkCol_Funct proc uses edi,lpTHIS:dword,Col:dword
SetObject edi, CFButton
mov eax,Col
mov [edi].m_InactiveBkCol,eax
ReleaseObject edi
ret
CBBu_SetInactiveBkCol_Funct endp
; --=====================================================================================--
; #METHOD: GetActiveIcon(NONE)
; #DESCRIPTION: 取Active状态按钮的图标
; #RETURN: Handle of Active Icon ..
; --=====================================================================================--
CBBu_GetActiveIcon_Funct proc uses edi,lpTHIS:dword
SetObject edi, CFButton
mov eax,[edi].m_hIconActive
ReleaseObject edi
ret
CBBu_GetActiveIcon_Funct endp
; --=====================================================================================--
; #METHOD: SetActiveIcon(:DWORD,:DWORD)
; #DESCRIPTION: 设置Active状态按钮的图标
; #PARAM: hInst Instance of parent window..
; #PARAM: IconID resource identifier of icon..
; #RETURN: Nothing..
; --=====================================================================================--
CBBu_SetActiveIcon_Funct proc uses edi,lpTHIS:dword,hInst:dword,IconID:dword
SetObject edi, CFButton
invoke LoadIcon,hInst,IconID
mov [edi].m_hIconActive,eax
ReleaseObject edi
ret
CBBu_SetActiveIcon_Funct endp
; --=====================================================================================--
; #METHOD: GethWnd (NONE)
; #DESCRIPTION: 取按钮句柄
; #RETURN: Handle of button..
; --=====================================================================================--
CBBu_GethWnd_Funct PROC uses edi lpTHIS:DWORD
SetObject edi, CFButton
mov eax, [edi].m_hWnd
ReleaseObject edi
ret
CBBu_GethWnd_Funct ENDP
; --=====================================================================================--
; #METHOD: GetIconBtn(NONE)
; #DESCRIPTION: 取按钮图标
; #RETURN: Handle of general icon..
; --=====================================================================================--
CBBu_GethIconBtn_Funct PROC uses edi lpTHIS:DWORD
SetObject edi, CFButton
mov eax, [edi].m_hIcon
ReleaseObject edi
ret
CBBu_GethIconBtn_Funct ENDP
; --=====================================================================================--
; #METHOD: SetIconBtn(:DWORD,:DWORD)
; #DESCRIPTION: 设置按钮图标
; #PARAM: hInst Instance of parent window..
; #PARAM: IconID Icon resource identifier..
; #RETURN: Handle of previous general icon..
; --=====================================================================================--
CBBu_SethIconBtn_Funct PROC uses edi lpTHIS:DWORD, hInst:DWORD, IconID:DWORD
SetObject edi, CFButton
mov eax, [edi].m_hIcon
push eax
invoke LoadIcon,hInst,IconID
mov [edi].m_hIcon, eax
pop eax
ReleaseObject edi
ret
CBBu_SethIconBtn_Funct ENDP
; --=====================================================================================--
; #METHOD: GetCursor (NONE)
; #DESCRIPTION: 取鼠标在按钮上的形状
; #RETURN: Nothing..
; --=====================================================================================--
CBBu_GetCursor_Funct proc uses edi,lpTHIS:dword
SetObject edi, CFButton
mov EAX,[edi].m_hCursor
ReleaseObject edi
ret
CBBu_GetCursor_Funct endp
; --=====================================================================================--
; #METHOD: SetCursor (:DWORD,:DWORD)
; #DESCRIPTION: 设置鼠标在按钮上的形状
; #PARAM: hInst Instance of parent window..
; #PARAM: CurID resource identifier of cursor..
; #RETURN: Nothing..
; --=====================================================================================--
CBBu_SetCursor_Funct proc uses edi,lpTHIS:dword,hInst:dword,CurID:dword
SetObject edi, CFButton
invoke LoadCursor,hInst,CurID
mov [edi].m_hCursor,eax
ReleaseObject edi
ret
CBBu_SetCursor_Funct endp
; --=====================================================================================--
; #METHOD: IconBtnProc (:DWORD,:DWORD,:DWORD,:DWORD)
; #DESCRIPTION: 设置处理按钮的过程(或函数)
; --=====================================================================================--
CBBu_IconBtnProc_Funct proc uses edi hWnd:dword,uMsg:dword,wParam:dword,lParam:dword
LOCAL @rect:RECT
invoke GetWindowLong,hWnd,GWL_USERDATA
mov edi,eax
assume edi:ptr CFButton
invoke GetClientRect,[edi].m_hWnd,addr @rect
mov eax,uMsg
.if eax == WM_MOUSEMOVE
mov eax,wParam
.if (eax & MK_LBUTTON) && ([edi].m_MouseOnButton == FALSE)
;If the mouse enter the button with the left button pressed then do nothing
invoke CallWindowProc,[edi].m_lpCtrlProc, hWnd, uMsg, wParam, lParam
ret
.endif
invoke GetCapture
.if eax != [edi].m_hWnd
invoke SetCapture,[edi].m_hWnd
mov [edi].m_MouseOnButton,TRUE
invoke InvalidateRect,[edi].m_hWnd,addr @rect,TRUE
.else
mov eax,lParam
mov ecx,eax
and eax,0ffffh
shr ecx,16
.if !(eax >= @rect.left && eax < @rect.right && ecx >= @rect.top && ecx < @rect.bottom)
;Redraw only if mouse goes out
.if [edi].m_MouseOnButton == TRUE
mov [edi].m_MouseOnButton,FALSE
invoke InvalidateRect,[edi].m_hWnd,addr @rect,TRUE
.endif
mov eax,wParam
.if !(eax & MK_LBUTTON)
;;If user is NOT pressing left button then release capture!
invoke ReleaseCapture
.endif
.endif
.endif
.elseif eax == WM_CAPTURECHANGED
.if [edi].m_MouseOnButton == TRUE
invoke ReleaseCapture
invoke InvalidateRect,[edi].m_hWnd,addr @rect,TRUE
.endif
.elseif eax == WM_KILLFOCUS
.if [edi].m_MouseOnButton == TRUE
mov [edi].m_MouseOnButton,FALSE
invoke InvalidateRect,[edi].m_hWnd,addr @rect,TRUE
.ENDIF
.elseif eax == WM_SETCURSOR
.if [edi].m_hCursor != 0
invoke SetCursor,[edi].m_hCursor
xor eax,eax
ret
.endif
.endif
invoke CallWindowProc,[edi].m_lpCtrlProc, hWnd, uMsg, wParam, lParam
assume edi:nothing
ret
CBBu_IconBtnProc_Funct endp
endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -