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

📄 cfbutton.asm

📁 汇编实现文件分割和合并的ASM代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
    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 + -