📄 toolbuild.asm
字号:
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 + -