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

📄 toolbuild.asm

📁 用masm写的TOOBar生成器
💻 ASM
📖 第 1 页 / 共 5 页
字号:
               db  '                  mov     Cnt, eax',0dh,0ah
               db  '               .while (Cnt)',0dh,0ah
               db  '                  INVOKE     SendMessage, hWndTool, TB_GETBUTTON, ID, addr tbb',0dh,0ah
               db  '                     mov     eax, Incr',0dh,0ah
               db  '                  .if eax == tbb.iBitmap && tbb.fsStyle != TBSTYLE_SEP',0dh,0ah
               db  '                        mov     edx, tbb.idCommand',0dh,0ah
               db  '                        mov     al, tbb.fsState',0dh,0ah
               db  '                        mov     SavState, al',0dh,0ah
               db  '                        mov     al, tbb.fsStyle',0dh,0ah
               db  '                        mov     SavStyle, al',0dh,0ah
               db  '                     .break',0dh,0ah
               db  '                  .endif',0dh,0ah
               db  '                  .if tbb.fsStyle != TBSTYLE_SEP',0dh,0ah
               db  '                        inc     Len',0dh,0ah
               db  '                  .endif',0dh,0ah
               db  '                     inc     ID',0dh,0ah
               db  '                     dec     Cnt',0dh,0ah
               db  '               .endw',0dh,0ah
               db  '               .if !Cnt',0dh,0ah
               db  '                     xor     edx, edx',0dh,0ah
               db  '                     xor     esi, esi',0dh,0ah
               db  '               .endif',0dh,0ah
               db  '                  pop     eax',0dh,0ah
               db  '                  pop     ebx',0dh,0ah
               db  '               .if !edx                    ; No matching ID',0dh,0ah
               db  '                  mov     edx, eax',0dh,0ah
               db  '                     inc     edx',0dh,0ah
               db  '                     add     edx, 6900',0dh,0ah
               db  '                     mov     SavState, TBSTATE_ENABLED',0dh,0ah
               db  '                     mov     SavStyle, TBSTYLE_BUTTON',0dh,0ah
               db  '               .endif',0dh,0ah,0dh,0ah

               db  '                 push     eax',0dh,0ah
               db  '                  mov     [ebx.TBNOTIFY.tbButton].iBitmap, eax',0dh,0ah
               db  '                  mov     [ebx.TBNOTIFY.tbButton].idCommand, edx',0dh,0ah
               db  '                  mov     al, SavState',0dh,0ah
               db  '                  mov     [ebx.TBNOTIFY.tbButton].fsState, al',0dh,0ah
               db  '                  mov     al, SavStyle',0dh,0ah
               db  '                  mov     [ebx.TBNOTIFY.tbButton].fsStyle, al',0dh,0ah
               db  '                  mov     [ebx.TBNOTIFY.tbButton].dwData, 0',0dh,0ah
               db  '                  pop     eax',0dh,0ah,0dh,0ah

               db  '                  lea     ecx, szSpace',0dh,0ah
               db  '                  xor     esi, esi',0dh,0ah
               db  '               .if eax < 16                ; Number of predefined names',0dh,0ah
               db  '                  pushad',0dh,0ah
               db  '                  INVOKE     lstrcpy, addr szTextA, szTextC[eax*4]',0dh,0ah
               db  '                   popad',0dh,0ah
               db  '                     lea     esi, szTextA',0dh,0ah
               db  '               .endif',0dh,0ah,0dh,0ah

               db  '               .if esi',0dh,0ah
               db  '                     mov     ecx, esi',0dh,0ah
               db  '                  pushad',0dh,0ah
               db  '                     mov     tbi.dwMask, TBIF_TEXT',0dh,0ah
               db  '                     mov     tbi.pszText, ecx',0dh,0ah
               db  '                     mov     SavID, edx    ; Save the command ID for TBN_TOOLBARCHANGE',0dh,0ah
               db  '                  INVOKE     SendMessage, hWndTool, TB_SETBUTTONINFO, edx, addr tbi',0dh,0ah
               db  '                   popad',0dh,0ah
               db  '               .endif',0dh,0ah
               db  '                  mov     [ebx.TBNOTIFY].cchText, 32',0dh,0ah
               db  '                  mov     [ebx.TBNOTIFY].pszText, ecx',0dh,0ah
               db  '                  mov     eax, TRUE',0dh,0ah
               db  '                  ret',0dh,0ah
               db  '            .else',0dh,0ah
               db  '                  mov     eax, FALSE',0dh,0ah
               db  '                  ret',0dh,0ah
               db  '            .endif',0dh,0ah,0dh,0ah

               db  '         .elseif eax == TBN_TOOLBARCHANGE',0dh,0ah
               db  '               lea     ecx, szTextA',0dh,0ah
               db  '               mov     tbi.dwMask, TBIF_TEXT',0dh,0ah
               db  '               mov     tbi.pszText, ecx',0dh,0ah
               db  '            INVOKE     SendMessage, hWndTool, TB_SETBUTTONINFO, SavID, addr tbi',0dh,0ah
               db  '               mov     eax, FALSE',0dh,0ah
               db  '               ret',0dh,0ah
               db  '         .endif',0dh,0ah,0dh,0ah,0

szToolDrop     db  ';---------- [Toolbar Dropdown Notify] ----------',0dh,0ah
               db  '         .if eax == TBN_DROPDOWN',0dh,0ah
               db  '               mov     eax, [ebx.NMTOOLBAR].iItem ; Item num',0dh,0ah
               db  '            INVOKE     SendMessage, hWndTool, TB_COMMANDTOINDEX, eax, 0',0dh,0ah
               db  '               mov     ecx, eax',0dh,0ah
               db  '            INVOKE     SendMessage, hWndTool, TB_GETITEMRECT, ecx, addr rect',0dh,0ah
               db  '              push     rect.top',0dh,0ah
               db  '              push     rect.left',0dh,0ah
               db  '            INVOKE     GetWindowRect, hWndTool, addr rect',0dh,0ah
               db  '               pop     eax',0dh,0ah
               db  '               add     rect.left, eax',0dh,0ah
               db  '               pop     eax',0dh,0ah
               db  '               add     eax, 28',0dh,0ah
               db  '               add     rect.top, eax',0dh,0ah
               db  '            INVOKE     TrackPopupMenu, hSMenu, TPM_LEFTALIGN or TPM_LEFTBUTTON,\',0dh,0ah
               db  '                       rect.left, rect.top, 0, hWnd, 0',0dh,0ah
               db  '         .endif',0dh,0ah,0dh,0ah,0

szToolbarDes   db  ';---------- [Destroy the ImageList] ----------',0dh,0ah
               db  '      .elseif wMsg == WM_DESTROY',0dh,0ah
               db  '         INVOKE     ImageList_Destroy, hImageList',0dh,0ah,0
szToolbarDesG  db  '         INVOKE     ImageList_Destroy, hImageListG',0dh,0ah,0
szResetParm    db  '         .if SysParm',0dh,0ah
               db  '            INVOKE     SystemParametersInfo, SPI_SETDRAGFULLWINDOWS, 1, 0, SPIF_UPDATEINIFILE',0dh,0ah
               db  '         .endif',0dh,0ah,0

szChgBmpColor  db  ';===================================================',0dh,0ah
               db  '; ChgBmpColor procedure',0dh,0ah
               db  ';===================================================',0dh,0ah
               db  'ChgBmpColor PROC hBitmap:DWORD',0dh,0ah
               db  'LOCAL    mDC:DWORD, hBrush, hOldBmp, Fill, hOldBrush',0dh,0ah

               db  '      INVOKE     CreateCompatibleDC, NULL',0dh,0ah
               db  '         mov     mDC, eax',0dh,0ah
               db  '      INVOKE     SelectObject, mDC, hBitmap',0dh,0ah
               db  '         mov     hOldBmp, eax',0dh,0ah
               db  '      INVOKE     GetSysColor, COLOR_BTNFACE',0dh,0ah
               db  '      INVOKE     CreateSolidBrush, eax',0dh,0ah
               db  '         mov     hBrush, eax',0dh,0ah
               db  '      INVOKE     SelectObject, mDC, hBrush',0dh,0ah
               db  '         mov     hOldBrush, eax',0dh,0ah
               db  '         mov     Fill, 00c0c0c0h',0dh,0ah
               db  '      INVOKE     ExtFloodFill, mDC, 0, 0, Fill, FLOODFILLSURFACE',0dh,0ah
               db  '      INVOKE     ExtFloodFill, mDC, 0, 15, Fill, FLOODFILLSURFACE',0dh,0ah
               db  '      INVOKE     ExtFloodFill, mDC, 15, 0, Fill, FLOODFILLSURFACE',0dh,0ah
               db  '      INVOKE     ExtFloodFill, mDC, 15, 15, Fill, FLOODFILLSURFACE',0dh,0ah
               db  '      INVOKE     SelectObject, mDC, hOldBrush',0dh,0ah
               db  '      INVOKE     DeleteObject, hBrush',0dh,0ah
               db  '      INVOKE     SelectObject, mDC, hBitmap',0dh,0ah
               db  '        push     eax',0dh,0ah
               db  '      INVOKE     DeleteDC, mDC',0dh,0ah
               db  '         pop     eax',0dh,0ah

               db  '         ret',0dh,0ah
               db  'ChgBmpColor ENDP',0dh,0ah,0dh,0ah,0

szDockProc    db  ';======================================================',0dh,0ah
               db  '; Create Docking Toolbar PROCEDURE',0dh,0ah
               db  ';======================================================',0dh,0ah
               db  'DockToolbar PROC',0dh,0ah
               db  'LOCAL    rect:RECT',0dh,0ah,0dh,0ah

               db  '      .if hWndDock',0dh,0ah
               db  '         INVOKE     DestroyWindow, hWndDock',0dh,0ah
               db  '      .endif',0dh,0ah,0dh,0ah

               db  '      INVOKE     CreateWindowEx, WS_EX_TOOLWINDOW, addr FloatTBClass,',0dh,0ah
               db  '                 0, WS_POPUPWINDOW or WS_CAPTION or\',0dh,0ah
               db  '                 WS_VISIBLE or WS_THICKFRAME, 0, 0, 0, 0,\',0dh,0ah
               db  '                 hWnd, NULL, hInst, NULL',0dh,0ah
               db  '         mov     hWndDock, eax',0dh,0ah,0dh,0ah

               db  '      INVOKE     SetParent, hWndTool, hWndDock',0dh,0ah
               db  '      INVOKE     GetClientRect, hWnd, addr rect',0dh,0ah
               db  '         mov     edx, rect.bottom',0dh,0ah
               db  '         shl     edx, 16',0dh,0ah
               db  '         mov     ecx, rect.right',0dh,0ah
               db  '         mov     dx, cx',0dh,0ah
               db  '      INVOKE     SendMessage, hWnd, WM_SIZE, 0, edx',0dh,0ah,0dh,0ah

               db  '         ret',0dh,0ah
               db  'DockToolbar ENDP',0dh,0ah,0dh,0ah,0


szFloatProc    db  ';===================================================',0dh,0ah
               db  '; FloatWndProc procedure',0dh,0ah
               db  ';===================================================',0dh,0ah
               db  'FloatWndProc PROC  uses ebx esi edi hwnd:DWORD, wmsg, wparam, lparam',0dh,0ah
               db  'LOCAL    rect:RECT',0dh,0ah
               db  'LOCAL    rectE:RECT',0dh,0ah
               db  'LOCAL    rectF:RECT',0dh,0ah
               db  'LOCAL    wp:WINDOWPLACEMENT',0dh,0ah
               db  'LOCAL    Cnt:DWORD, WH, Var, swOn',0dh,0ah
               db  'LOCAL    szBuff[64]:BYTE',0dh,0ah,0dh,0ah

               db  '      .if wmsg == WM_MOVE || wmsg == WM_SIZE',0dh,0ah
               db  '            mov     wp.iLength, sizeof wp',0dh,0ah
               db  '         INVOKE     GetWindowPlacement, hWnd, addr wp',0dh,0ah
               db  '         .if wp.showCmd == SW_SHOWMINIMIZED || wp.showCmd == SW_MINIMIZE',0dh,0ah
               db  '            INVOKE     SetFocus, hREdit',0dh,0ah
               db  '               mov     eax, 1',0dh,0ah
               db  '               ret',0dh,0ah
               db  '         .endif',0dh,0ah
               db  '      .endif',0dh,0ah,0dh,0ah,0

szDock         db  '         mov     eax, hwnd',0dh,0ah
               db  '      .if eax == hWndDock',0dh,0ah
               db  '         .if wmsg == WM_CLOSE || wmsg == WM_RBUTTONDBLCLK',0dh,0ah
               db  '            INVOKE     SetParent, hWndTool, hWnd',0dh,0ah
               db  '            INVOKE     DestroyWindow, hWndDock',0dh,0ah
               db  '               and     hWndDock, 0',0dh,0ah
               db  '            INVOKE     GetWindowLong, hWndTool, GWL_STYLE',0dh,0ah
               db  '               mov     Styles, eax',0dh,0ah
               db  '            .if !(Styles & WS_BORDER)',0dh,0ah
               db  '                  xor     Styles, WS_BORDER',0dh,0ah
               db  '            .endif',0dh,0ah
               db  '            INVOKE     SetWindowLong, hWndTool, GWL_STYLE, Styles',0dh,0ah
               db  '            .if FloatLock',0dh,0ah
               db  '               INVOKE     GetWindowRect, hWndFloat, addr rectF',0dh,0ah
               db  '               INVOKE     GetWindowRect, hREdit, addr rectE',0dh,0ah
               db  '                  mov     eax, rectE.left',0dh,0ah
               db  '                  add     eax, 6',0dh,0ah
               db  '                  sub     rectE.right, eax',0dh,0ah
               db  '                  mov     eax, rectE.top',0dh,0ah
               db  '                  add     eax, 6',0dh,0ah
               db  '                  sub     rectE.bottom, eax',0dh,0ah

               db  '                  mov     eax, rectF.left',0dh,0ah
               db  '                  sub     rectF.right, eax',0dh,0ah
               db  '                  mov     eax, rectF.top',0dh,0ah
               db  '                  sub     rectF.bottom, eax',0dh,0ah,0dh,0ah

               db  '                  add     rectF.top, 26',0dh,0ah
               db  '                  mov     eax, rectF.right',0dh,0ah
               db  '               .if rectF.bottom > eax',0dh,0ah
               db  '                     sub     rectF.top, 3',0dh,0ah
               db  '                     sub     rectF.bottom, 26',0dh,0ah
               db  '               .endif',0dh,0ah
               db  '                  mov     LockOn, 1',0dh,0ah
               db  '               INVOKE     MoveWindow, hWndFloat, rectF.left, rectF.top, rectF.right, rectF.bottom, TRUE',0dh,0ah
               db  '                  mov     FloatLock, 1',0dh,0ah
               db  '            .endif',0dh,0ah
               db  '              call     SetSize',0dh,0ah,0dh,0ah

               db  '               mov     eax, 1',0dh,0ah
               db  '               ret',0dh,0ah
               db  '         .endif',0dh,0ah
               db  '            jmp     DefWin',0dh,0ah
               db  '      .endif',0dh,0ah,0dh,0ah,0

szFloat        db  '      .if wmsg == WM_NCLBUTTONDBLCLK',0dh,0ah
               db  '         INVOKE     PostMessage, hWndFloat, WM_NCLBUTTONDOWN, HTCAPTION, 0',0dh,0ah
               db  '      .endif',0dh,0ah

⌨️ 快捷键说明

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