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

📄 toolbuild.asm

📁 用masm写的TOOBar生成器
💻 ASM
📖 第 1 页 / 共 5 页
字号:
               db  '            INVOKE     GetClientRect, hWnd, addr rect ; Rectangle of main window',0dh,0ah
               db  '               mov     eax, rect.right',0dh,0ah
               db  '               mov     WWth, eax',0dh,0ah
               db  '            .if TopOn || BottomOn',0dh,0ah
               db  '                  inc     eax',0dh,0ah
               db  '                  mov     TBWth, eax',0dh,0ah
               db  '            .endif',0dh,0ah
               db  '               mov     eax, rect.bottom',0dh,0ah
               db  '               mov     WHgt, eax',0dh,0ah
               db  '            INVOKE     GetWindowRect, hWndTool, addr rect ; Rectangle of toolbar',0dh,0ah
               db  '               mov     eax, rect.bottom',0dh,0ah
               db  '               sub     eax, rect.top',0dh,0ah
               db  '               mov     TBHgt, eax',0dh,0ah
               db  '            .if LeftOn || RightOn',0dh,0ah
               db  '                  mov     eax, WHgt',0dh,0ah
               db  '                  mov     TBHgt, eax',0dh,0ah
               db  '                  xor     eax, eax',0dh,0ah
               db  '            .endif',0dh,0ah
               db  '         .endif',0dh,0ah
               db  '           push     eax                  ; Save height of toolbar',0dh,0ah,0dh,0ah

               db  '            xor     eax, eax             ; Zero out statusbar height',0dh,0ah
               db  '         .if hWndStat',0dh,0ah
               db  '            INVOKE     GetWindowRect, hWndStat, addr rect ; Rectangle of statusbar',0dh,0ah
               db  '               mov     eax, rect.bottom',0dh,0ah
               db  '               sub     eax, rect.top     ; eax = height of statusbar',0dh,0ah
               db  '         .endif',0dh,0ah,0dh,0ah

               db  '            pop     edx                  ; edx = height of toolbar',0dh,0ah
               db  '         .if BottomOn',0dh,0ah
               db  '               and     edx, 0',0dh,0ah
               db  '         .endif',0dh,0ah
               db  '            mov     ebx, lParam          ; Width of new client area',0dh,0ah
               db  '            and     ebx, 0ffffh          ; ebx = width',0dh,0ah
               db  '            mov     ecx, lParam',0dh,0ah
               db  '            shr     ecx, 16              ; Height of new client area',0dh,0ah
               db  '            sub     ecx, eax             ; Edit window - height of statusbar',0dh,0ah
               db  '            sub     ecx, edx             ; Edit window - height of toolbar',0dh,0ah
               db  '         .if edx                         ; If toolbar',0dh,0ah
               db  '               sub     edx, 2            ; For border',0dh,0ah
               db  '               add     ecx, 2            ; For border',0dh,0ah
               db  '         .endif',0dh,0ah
               db  '         .if eax                         ; If statusbar',0dh,0ah
               db  '               add     ecx, 2            ; For border',0dh,0ah
               db  '         .endif',0dh,0ah,0dh,0ah

               db  '            and     xPos, 0',0dh,0ah
               db  '         .if LeftOn',0dh,0ah
               db  '               mov     eax, TBWth',0dh,0ah
               db  '               mov     xPos, eax',0dh,0ah
               db  '               sub     ebx, TBWth',0dh,0ah
               db  '               mov     TBHgt, ecx',0dh,0ah
               db  '         .endif',0dh,0ah
               db  '         .if RightOn',0dh,0ah
               db  '               mov     xPos, 0',0dh,0ah
               db  '               sub     ebx, TBWth',0dh,0ah
               db  '               mov     TBHgt, ecx',0dh,0ah
               db  '               mov     TBLeft, ebx',0dh,0ah
               db  '         .endif',0dh,0ah
               db  '         .if BottomOn',0dh,0ah
               db  '               sub     ecx, TBHgt',0dh,0ah
               db  '               add     ecx, 20      ; Statusbar height',0dh,0ah
               db  '               mov     TBTop, ecx',0dh,0ah
               db  '         .endif',0dh,0ah, 0

szToolDock     db  '         .if hWndDock',0dh,0ah
               db  '               mov     edx, 0',0dh,0ah
               db  '               add     ecx, TBHgt',0dh,0ah
               db  '               sub     ecx, 2',0dh,0ah
               db  '         .endif',0dh,0ah,0

szToolFloat1   db  '         .if FloatLock',0dh,0ah
               db  '               mov     eax, ToolW',0dh,0ah
               db  '            .if ToolH > eax',0dh,0ah
               db  '                  add     eax, 6',0dh,0ah
               db  '                  mov     xPos, eax',0dh,0ah
               db  '                  sub     ebx, ToolW',0dh,0ah
               db  '                  sub     ebx, 6',0dh,0ah
               db  '            .else',0dh,0ah
               db  '                  mov     xPos, 0',0dh,0ah
               db  '                  add     edx, ToolH',0dh,0ah
               db  '                  add     edx, 6',0dh,0ah
               db  '                  sub     ecx, ToolH',0dh,0ah
               db  '                  sub     ecx, 6',0dh,0ah
               db  '            .endif',0dh,0ah
               db  '         .endif',0dh,0ah,0

szToolSiz2     db  '         INVOKE     MoveWindow, hREdit, xPos, edx, ebx, ecx, TRUE',0dh,0ah
               db  '         INVOKE     MoveWindow, hWndTool, TBLeft, TBTop, TBWth, TBHgt, TRUE',0dh,0ah,0dh,0ah,0

szSizeFloat    db  ';---------- [Size the Floating Toolbar] ----------',0dh,0ah
               db  '         .if hWndFloat && !ToolH',0dh,0ah
               db  '            INVOKE     GetWindowRect, hWnd, addr rect',0dh,0ah
               db  '               add     rect.left, 195',0dh,0ah
               db  '               add     rect.top, -29',0dh,0ah
               db  '               mov     rect.right, 94',0dh,0ah
               db  '               mov     rect.bottom, 0',0dh,0ah
               db  '               mov     ToolH, 1',0dh,0ah
               db  '            INVOKE     MoveWindow, hWndFloat, rect.left, rect.top, rect.right, rect.bottom, TRUE',0dh,0ah,0dh,0ah

               db  '         .elseif hWndFloat && FloatLock',0dh,0ah
               db  '            INVOKE     GetWindowRect, hREdit, addr rect',0dh,0ah
               db  '               mov     eax, rect.left',0dh,0ah
               db  '               sub     rect.right, eax',0dh,0ah
               db  '               mov     eax, rect.top',0dh,0ah
               db  '               sub     rect.bottom, eax',0dh,0ah
               db  '               mov     ecx, ToolW',0dh,0ah
               db  '            .if ecx < ToolH',0dh,0ah
               db  '                  add     ecx, 6',0dh,0ah
               db  '                  sub     rect.left, ecx',0dh,0ah
               db  '                  mov     edx, rect.bottom',0dh,0ah,0dh,0ah

               db  '            .else',0dh,0ah
               db  '                  mov     edx, ToolH',0dh,0ah
               db  '                  add     edx, 6',0dh,0ah
               db  '                  sub     rect.top, edx',0dh,0ah
               db  '                  mov     ecx, rect.right',0dh,0ah
               db  '            .endif',0dh,0ah
               db  '            INVOKE     MoveWindow, hWndFloat, rect.left, rect.top, ecx, edx, TRUE',0dh,0ah
               db  '         .endif',0dh,0ah,0dh,0ah,0

szSizeDock     db  ';---------- [Size the Docking Toolbar] ----------',0dh,0ah
               db  '         .if hWndDock',0dh,0ah
               db  '            INVOKE     SendMessage, hWndTool, TB_BUTTONCOUNT, 0, 0',0dh,0ah
               db  '               mov     Cnt, eax',0dh,0ah
               db  '               mov     ecx, Cnt',0dh,0ah
               db  '               dec     ecx',0dh,0ah
               db  '            INVOKE     SendMessage, hWndTool, TB_GETITEMRECT, ecx, addr rect',0dh,0ah
               db  '              push     rect.right',0dh,0ah
               db  '               pop     DockW',0dh,0ah
               db  '               add     DockW, 8',0dh,0ah
               db  '              push     rect.bottom',0dh,0ah
               db  '               pop     DockH',0dh,0ah
               db  '               add     DockH, 24',0dh,0ah
               db  '               inc     rect.right',0dh,0ah
               db  '               add     rect.bottom, 3',0dh,0ah,0dh,0ah

               db  '            INVOKE     MoveWindow, hWndTool, 0, -2, rect.right, rect.bottom, TRUE',0dh,0ah
               db  '            INVOKE     GetWindowRect, hWndDock, addr rect',0dh,0ah
               db  '              push     rect.left',0dh,0ah
               db  '              push     rect.top',0dh,0ah
               db  '            INVOKE     GetWindowRect, hWnd, addr rect',0dh,0ah
               db  '               pop     edx',0dh,0ah
               db  '               pop     ecx',0dh,0ah
               db  '            .if ecx == 0 || edx == 0',0dh,0ah
               db  '                  add     rect.left, 6',0dh,0ah
               db  '                  add     rect.top, 44',0dh,0ah
               db  '            .else',0dh,0ah
               db  '                  mov     rect.left, ecx',0dh,0ah
               db  '                  mov     rect.top, edx',0dh,0ah
               db  '            .endif',0dh,0ah
               db  '            INVOKE     MoveWindow, hWndDock, rect.left, rect.top, DockW, DockH, TRUE',0dh,0ah
               db  '         .endif',0dh,0ah,0dh,0ah,0

szMovAct       db  ';---------- [MOVE Msg] ----------',0dh,0ah
               db  '      .elseif wMsg == WM_MOVE',0dh,0ah
               db  '         .if FloatLock || LockOn',0dh,0ah
               db  '               mov     FloatLock, 1',0dh,0ah
               db  '               mov     LockOn, 1',0dh,0ah
               db  '         .endif',0dh,0ah
               db  '           call     SetSize',0dh,0ah,0dh,0ah

               db  ';---------- [ACTIVATEAPP Msg] ----------',0dh,0ah
               db  '      .elseif wMsg == WM_ACTIVATEAPP',0dh,0ah
               db  '         INVOKE     DefWindowProc, hWnd, WM_NCACTIVATE, wParam, 0',0dh,0ah
               db  '            ret',0dh,0ah,0dh,0ah

               db  '      .elseif wMsg == WM_NCACTIVATE',0dh,0ah
               db  '            mov     eax, TRUE',0dh,0ah
               db  '            ret',0dh,0ah,0dh,0ah,0

szNotify       db  ';---------- [Get Tooltips] ----------',0dh,0ah
               db  '      .elseif wMsg == WM_NOTIFY',0dh,0ah
               db  '            mov     ebx, lParam          ; Get pointer to NMHDR',0dh,0ah
               db  '            mov     eax, (NMHDR ptr [ebx]).code',0dh,0ah
               db  '         .if eax == TTN_NEEDTEXT',0dh,0ah
               db  '               mov     eax, (NMHDR ptr [ebx]).idFrom ; Resource id',0dh,0ah
               db  '               mov     ecx, eax',0dh,0ah
               db  '            INVOKE     LoadString, hInst, ecx, addr szBuff, lengthof szBuff',0dh,0ah
               db  '               mov     ebx, lParam                   ; Get the buffer addr',0dh,0ah
               db  '               lea     eax, szBuff',0dh,0ah
               db  '               mov     (TOOLTIPTEXT ptr [ebx]).lpszText, eax',0dh,0ah
               db  '               mov     eax, FALSE',0dh,0ah
               db  '               ret',0dh,0ah
               db  '         .endif',0dh,0ah,0dh,0ah,0

szOpenDock     db  ';---------- [Activate Docking Toolbar] ----------',0dh,0ah
               db  '         .if eax == NM_RDBLCLK && !hWndDock',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  '                  mov     LockOn, 1',0dh,0ah
               db  '            .endif',0dh,0ah
               db  '              call     DockToolbar',0dh,0ah
               db  '            INVOKE     SetFocus, hWndDock',0dh,0ah
               db  '               jmp     Ret0',0dh,0ah
               db  '         .endif',0dh,0ah,0dh,0ah,0

szToolCustom4  db  ';---------- [Customize the Toolbar] ----------',0dh,0ah
               db  '         .if eax == TBN_BEGINADJUST',0dh,0ah
               db  '               mov     eax, TRUE',0dh,0ah
               db  '               ret',0dh,0ah,0dh,0ah

               db  '; Add to Windows.inc Comctl32.dll version 5.80 or later- Removes the help button',0dh,0ah
               db  '         .elseif eax == TBN_FIRST-23 ;TBN_INITCUSTOMIZE',0dh,0ah
               db  '               mov     eax, 1        ;TBNRF_HIDEHELP',0dh,0ah
               db  '               ret',0dh,0ah,0dh,0ah

               db  '         .elseif eax == TBN_QUERYINSERT',0dh,0ah
               db  '               mov     eax, TRUE',0dh,0ah
               db  '               ret',0dh,0ah,0dh,0ah

               db  '         .elseif eax == TBN_QUERYDELETE',0dh,0ah
               db  '               mov     eax, TRUE',0dh,0ah
               db  '               ret',0dh,0ah,0dh,0ah

               db  '         .elseif eax == TBN_GETBUTTONINFO',0dh,0ah
               db  '               mov     eax, [ebx.TBNOTIFY].iItem ; Item num',0dh,0ah
               db  '            .if eax <= NNNN                    ; Num of images',0dh,0ah
               db  '                 push     ebx',0dh,0ah
               db  '                 push     eax',0dh,0ah
               db  '                  mov     Incr, eax',0dh,0ah
               db  '               INVOKE     SendMessage, hWndTool, TB_BUTTONCOUNT, 0, 0',0dh,0ah,0dh,0ah

               db  ';---------- [Find matching bitmap ID] ----------',0dh,0ah
               db  '                  and     ID, 0',0dh,0ah
               db  '                  and     Len, 0',0dh,0ah

⌨️ 快捷键说明

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