📄 cfbutton.asm
字号:
ifndef _CBButton_
_CBButton_ equ 1
; --=====================================================================================--
; #类名: CFButton
; #版本: 1.0
; --=====================================================================================--
; 类方法声明
; --=====================================================================================--
CFButton_Init PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
; --=====================================================================================--
; 函数指针声明
; --=====================================================================================--
CBBu_destructorPto TYPEDEF PROTO :DWORD
CBBu_GetFlatPto TYPEDEF PROTO :DWORD
CBBu_SetFlatPto TYPEDEF PROTO :DWORD, :DWORD
CBBu_DrawItemPto TYPEDEF PROTO :DWORD, :DWORD
CBBu_GetTextPto TYPEDEF PROTO :DWORD
CBBu_SetTextPto TYPEDEF PROTO :DWORD, :DWORD
CBBu_GetActiveTextColPto TYPEDEF PROTO :DWORD
CBBu_SetActiveTextColPto TYPEDEF PROTO :DWORD, :DWORD
CBBu_GetInactiveTextColPto TYPEDEF PROTO :DWORD
CBBu_SetInactiveTextColPto TYPEDEF PROTO :DWORD, :DWORD
CBBu_GetActiveBkColPto TYPEDEF PROTO :DWORD
CBBu_SetActiveBkColPto TYPEDEF PROTO :DWORD, :DWORD
CBBu_GetInactiveBkColPto TYPEDEF PROTO :DWORD
CBBu_SetInactiveBkColPto TYPEDEF PROTO :DWORD, :DWORD
CBBu_GetActiveIconPto TYPEDEF PROTO :DWORD
CBBu_SetActiveIconPto TYPEDEF PROTO :DWORD, :DWORD, :DWORD
CBBu_GetHandlePto TYPEDEF PROTO :DWORD
CBBu_GetIconBtnPto TYPEDEF PROTO :DWORD
CBBu_SetIconBtnPto TYPEDEF PROTO :DWORD, :DWORD, :DWORD
CBBu_GetCursorPto TYPEDEF PROTO :DWORD
CBBu_SetCursorPto TYPEDEF PROTO :DWORD, :DWORD, :DWORD
CBBu_IconBtnProcPto TYPEDEF PROTO :DWORD, :DWORD, :DWORD, :DWORD
; --=====================================================================================--
; 类结构
; --=====================================================================================--
CLASS CFButton, CBBu
CMETHOD destructor
CMETHOD GetFlat
CMETHOD SetFlat
CMETHOD DrawItem
CMETHOD GetText
CMETHOD SetText
CMETHOD GetActiveTextCol
CMETHOD SetActiveTextCol
CMETHOD GetInactiveTextCol
CMETHOD SetInactiveTextCol
CMETHOD GetActiveBkCol
CMETHOD SetActiveBkCol
CMETHOD GetInactiveBkCol
CMETHOD SetInactiveBkCol
CMETHOD GetActiveIcon
CMETHOD SetActiveIcon
CMETHOD GetHandle
CMETHOD GetIconBtn
CMETHOD SetIconBtn
CMETHOD GetCursor
CMETHOD SetCursor
CMETHOD IconBtnProc
m_IsFlat dd ?
m_hIcon dd ?
m_hIconActive dd ?
m_hCursor dd ?
m_ActiveTextCol dd ?
m_ActiveBkCol dd ?
m_InactiveTextCol dd ?
m_InactiveBkCol dd ?
m_hWnd dd ?
m_lpCtrlProc dd ?
m_MouseOnButton dd ?
m_BtnText db 32 dup (?)
Rect RECT <>
CFButton ENDS
.data
;类初始化
BEGIN_INIT
dd offset CBBu_destructor_Funct
dd offset CBBu_GetFlat_Funct
dd offset CBBu_SetFlat_Funct
dd offset CBBu_DrawItem_Funct
dd offset CBBu_GetText_Funct
dd offset CBBu_SetText_Funct
dd offset CBBu_GetActiveTextCol_Funct
dd offset CBBu_SetActiveTextCol_Funct
dd offset CBBu_GetInactiveTextCol_Funct
dd offset CBBu_SetInactiveTextCol_Funct
dd offset CBBu_GetActiveBkCol_Funct
dd offset CBBu_SetActiveBkCol_Funct
dd offset CBBu_GetInactiveBkCol_Funct
dd offset CBBu_SetInactiveBkCol_Funct
dd offset CBBu_GetActiveIcon_Funct
dd offset CBBu_SetActiveIcon_Funct
dd offset CBBu_GethWnd_Funct
dd offset CBBu_GethIconBtn_Funct
dd offset CBBu_SethIconBtn_Funct
dd offset CBBu_GetCursor_Funct
dd offset CBBu_SetCursor_Funct
dd offset CBBu_IconBtnProc_Funct
dd FALSE
dd NULL
dd NULL
dd NULL
dd 0
dd 0
dd 0
dd 0
dd NULL
dd NULL
dd FALSE
db 32 dup (0)
dd 0, 0, 0, 0
END_INIT
.code
; --=====================================================================================--
; #METHOD: CONSTRUCTOR (:DWORD,:DWORD,:DWORD,:DWORD)
; #DESCRIPTION: 类初始化
; #PARAM: hInst Instance of parent window..
; #PARAM: hWnd Handle of parent window..
; #PARAM: IconID the resource identifier of icon
; to be setted..
; #PARAM: BtnID resource identifier of this button..
; #RETURN: Nothing..
; --=====================================================================================--
CFButton_Init PROC uses edi esi lpTHIS:DWORD, hInst:DWORD, hWnd:DWORD,IconID:DWORD,BtnID:DWORD
SET_CLASS CFButton
SetObject edi, CFButton
invoke GetDlgItemText,hWnd,BtnID,addr [edi].m_BtnText,32
invoke GetDlgItem,hWnd,BtnID
mov [edi].m_hWnd, eax
invoke GetWindowLong,eax,GWL_STYLE
or eax,BS_OWNERDRAW
invoke SetWindowLong,[edi].m_hWnd,GWL_STYLE,eax
invoke LoadIcon,hInst,IconID
mov [edi].m_hIcon, eax
invoke GetSysColor,COLOR_BTNFACE
mov [edi].m_ActiveBkCol,eax
mov [edi].m_InactiveBkCol,eax
invoke GetSysColor,COLOR_BTNTEXT
mov [edi].m_ActiveTextCol,eax
mov [edi].m_InactiveTextCol,eax
invoke SetWindowLong,[edi].m_hWnd,GWL_USERDATA,edi
invoke SetWindowLong,[edi].m_hWnd,GWL_WNDPROC,[edi].IconBtnProc
mov [edi].m_lpCtrlProc,eax
ReleaseObject edi
ret
CFButton_Init ENDP
; --=====================================================================================--
; #METHOD: destructor (NONE)
; #DESCRIPTION: 类注销
; #RETURN: Nothing..
; --=====================================================================================--
CBBu_destructor_Funct PROC uses edi lpTHIS:DWORD
SetObject edi, CFButton
ReleaseObject edi
ret
CBBu_destructor_Funct ENDP
; --=====================================================================================--
; #METHOD: GetFlat(NONE)
; #DESCRIPTION: 取按钮Flat
; #RETURN: if zero,not a flat button;otherwise is..
; --=====================================================================================--
CBBu_GetFlat_Funct proc uses edi,lpTHIS:dword
SetObject edi, CFButton
mov eax,[edi].m_IsFlat
ReleaseObject edi
ret
CBBu_GetFlat_Funct endp
; --=====================================================================================--
; #METHOD: SetFlat(:DWORD)
; #DESCRIPTION: 设置按钮Flat
; #PARAM: FFlags if zero,not a flat button;otherwise is(Default is zero) ..
; #RETURN: Nothing..
; --=====================================================================================--
CBBu_SetFlat_Funct proc uses edi,lpTHIS:dword,FFlags:dword
LOCAL @rect:RECT
SetObject edi, CFButton
mov eax,FFlags
.if eax
mov [edi].m_IsFlat,TRUE
.else
mov [edi].m_IsFlat,FALSE
.endif
invoke GetClientRect,[edi].m_hWnd,addr @rect
invoke InvalidateRect,[edi].m_hWnd,addr @rect,TRUE
ReleaseObject edi
ret
CBBu_SetFlat_Funct endp
; --=====================================================================================--
; #METHOD: DrawItem(:DWORD)
; #DESCRIPTION: 重画按钮
; #PARAM: lParam the lParam parameter of WM_DRAWITEM..
; #RETURN: Nothing..
; --=====================================================================================--
CBBu_DrawItem_Funct PROC uses edi esi lpTHIS:DWORD, lParam:DWORD
SetObject edi, CFButton
mov esi,lParam
assume esi:ptr DRAWITEMSTRUCT
mov eax, [esi].hwndItem
.if ( eax == [edi].m_hWnd )
.if [edi].m_MouseOnButton == TRUE
invoke CreateSolidBrush,[edi].m_ActiveBkCol
invoke FillRect,[esi].hdc,addr [esi].rcItem,eax
invoke SetTextColor,[esi].hdc,[edi].m_ActiveTextCol
.else
invoke CreateSolidBrush,[edi].m_InactiveBkCol
invoke FillRect,[esi].hdc,addr [esi].rcItem,eax
invoke SetTextColor,[esi].hdc,[edi].m_InactiveTextCol
.endif
invoke SetBkMode,[esi].hdc,TRANSPARENT
.if [edi].m_MouseOnButton == TRUE && [edi].m_hIconActive
invoke DrawIcon,[esi].hdc,[esi].rcItem.left,[esi].rcItem.top,[edi].m_hIconActive
.else
invoke DrawIcon,[esi].hdc,[esi].rcItem.left,[esi].rcItem.top,[edi].m_hIcon
.endif
.if [edi].m_MouseOnButton == TRUE || [edi].m_IsFlat == FALSE
invoke DrawEdge,[esi].hdc,addr [esi].rcItem, EDGE_RAISED, BF_RECT
.endif
mov eax,[esi].itemState
.if eax & ODS_SELECTED
INVOKE DrawEdge,[esi].hdc,addr [esi].rcItem, EDGE_SUNKEN, BF_RECT
.endif
.if [edi].m_BtnText != NULL
INVOKE DrawText,[esi].hdc,addr [edi].m_BtnText,-1,addr [esi].rcItem,DT_VCENTER or DT_RIGHT or DT_SINGLELINE
.endif
.endif
assume esi:nothing
ReleaseObject edi
ret
CBBu_DrawItem_Funct ENDP
; --=====================================================================================--
; #METHOD: GetText(NONE)
; #DESCRIPTION: 取按钮显示文本
; #RETURN: Return a pointer to the button text..
; --=====================================================================================--
CBBu_GetText_Funct proc uses edi lpTHIS:dword
SetObject edi, CFButton
lea eax,[edi].m_BtnText
ReleaseObject edi
ret
CBBu_GetText_Funct endp
; --=====================================================================================--
; #METHOD: SetText (:DWORD)
; #DESCRIPTION: 设置按钮显示文本
; #PARAM: lpText the pointer of new text to be setted.
; #RETURN: Nothing..
; --=====================================================================================--
CBBu_SetText_Funct proc uses edi,lpTHIS:dword,lpText:dword
SetObject edi, CFButton
mov eax,lpText
.if eax == NULL
mov [edi].m_BtnText,NULL
.else
invoke lstrcpy,addr [edi].m_BtnText,lpText
.endif
ReleaseObject edi
ret
CBBu_SetText_Funct endp
; --=====================================================================================--
; #METHOD: GetActiveTextCol (NONE)
; #DESCRIPTION: 取鼠标移动到上边的文本颜色
; #RETURN: Active Text Color..
; --=====================================================================================--
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -