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

📄 cfbutton.asm

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