?? asmcut.asm
字號(hào):
;***************************************************************
;Author:Smallwaves
;Data:2001.11.14
;Title:Asm cut evaluation.
;Describle:
; This file describles how to cut and combine files using
; file-mapping and also describle how to use my FButton Class V1.02,I did know it had some errors but although
; it was working very good by my test,So WHAT CAN I SAY?...
;Homepage: http://smallwaves.yeah.net(Chinese)
;CopyRight: (c)Smallwaves's asm studo 2002
;*****************************************************************
.386
.model flat, stdcall
option casemap :none ; case sensitive
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\gdi32.inc
include \masm32\include\kernel32.inc
include \masm32\include\comctl32.inc
include \masm32\include\comdlg32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\comctl32.lib
includelib \masm32\lib\comdlg32.lib
CutFile proto c :ptr,:dword
.const
MAXSIZE EQU 256
IDI_ICON1 equ 102
IDC_CURSOR equ 103
IDC_HANDCUR equ 104
IDD_DIALOGCUT equ 101
IDC_CUTFILENAME equ 1000
IDC_SELECTCUT equ 1001
IDC_CUTSIZE equ 1002
IDC_CUT equ 1003
IDC_COMBINEFILENAME equ 1004
IDC_SELECTCOMBINE equ 1005
IDC_COMBINE equ 1006
IDC_STATIC1 equ 1007
IDC_STATIC2 equ 1008
IDC_STATIC3 equ 1009
IDC_STATIC4 equ 1010
IDM_ABOUT EQU 32003
;************MACRO && STRUCT**********************
; ---------------------
; literal string MACRO
; ---------------------
literal MACRO quoted_text:VARARG
LOCAL local_text
.data
local_text db quoted_text,0
.code
EXITM <local_text>
ENDM
; --------------------------------
; string address in INVOKE format
; --------------------------------
SADD MACRO quoted_text:VARARG
EXITM <ADDR literal(quoted_text)>
ENDM
dsText MACRO Name, Text:VARARG
.data
Name db Text,0
.code
ENDM
RGB MACRO red, green, blue
xor eax, eax
mov al, blue ; blue
rol eax, 8
mov al, green ; green
rol eax, 8
mov al, red ; red
ENDM
.data
szAppName db "驚濤之帆匯編工作室!--文件切割器.",0
szAbout db "作者:許敬濤",13,10,13,10,"日期:2002.4.1",13,10,13,10,"編程工具:Masm32v7.0",13,10,13,10,"CopyRight (C)驚濤之帆匯編工作室!",0
szBuffer db MAXSIZE DUP (0)
FilterStringCut db "All files(*.*)",0,"*.*",0,0
FilterStringCombine db "000 file(*.000)",0,"*.000",0,"All files(*.*)",0,"*.*",0,0
ofn OPENFILENAME {0}
szMenuAbout db "關(guān)于作者...",0
hBtnSelCombine dd 0
hBtnCombine dd 0
hBtnSelCut dd 0
hBtnCut dd 0
hCutSize dd 0
.data?
hInstance dd ?
hWinMain dd ?
hCursor dd ?
hHandCur dd ?
include Objects.inc
include CFButton.asm
.code
;*****************************************************
_GetFileName proc hWnd:dword,lpFilterString:dword
mov ofn.lStructSize,sizeof ofn
push hWnd
pop ofn.hWndOwner
push hInstance
pop ofn.hInstance
mov eax,lpFilterString
mov ofn.lpstrFilter,eax
mov ofn.lpstrFile,offset szBuffer
mov ofn.nMaxFile,MAXSIZE
MOV ofn.Flags,OFN_FILEMUSTEXIST OR OFN_PATHMUSTEXIST\
OR OFN_LONGNAMES OR OFN_EXPLORER OR OFN_HIDEREADONLY
invoke GetOpenFileName,addr ofn
ret
_GetFileName endp;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DlgProc proc hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
local hBrush :dword
local rect:RECT
local hSysMenu:dword
local LogBrush:LOGBRUSH
mov eax,uMsg
.if eax == WM_CLOSE
;DESTROY hBtnSelCut
;DESTROY hBtnSelCombine
;DESTROY hBtnCut
;DESTROY hBtnCombine
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
PUSH hWnd
pop hWinMain
invoke LoadIcon,hInstance,IDI_ICON1
push eax
invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,EAX
pop eax
invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,EAX
invoke GetSystemMenu,hWinMain,FALSE;append system menu
mov hSysMenu,eax
invoke AppendMenu,hSysMenu,MF_SEPARATOR,0,NULL
invoke AppendMenu,hSysMenu,MF_STRING,IDM_ABOUT,offset szMenuAbout
invoke LoadCursor,hInstance,IDC_CURSOR;set dialog cursor
MOV hCursor,eax
;建立按鈕,并指定按鈕圖標(biāo)
NEWOBJECT CFButton,hInstance,hWnd,1203,IDC_SELECTCUT
mov hBtnSelCut,eax
NEWOBJECT CFButton,hInstance,hWnd,1203,IDC_SELECTCOMBINE
mov hBtnSelCombine,eax
NEWOBJECT CFButton,hInstance,hWnd,1201,IDC_CUT
mov hBtnCut,eax
NEWOBJECT CFButton,hInstance,hWnd,1202,IDC_COMBINE
mov hBtnCombine,eax
;設(shè)置按鈕為浮動(dòng)的
method hBtnSelCut,CFButton,SetFlat,TRUE
method hBtnSelCombine,CFButton,SetFlat,TRUE
method hBtnCut,CFButton,SetFlat,TRUE
method hBtnCombine,CFButton,SetFlat,TRUE
;設(shè)置鼠標(biāo)移動(dòng)到上面的形狀
method hBtnSelCut,CFButton,SetCursor,hInstance,IDC_HANDCUR
method hBtnSelCombine,CFButton,SetCursor,hInstance,IDC_HANDCUR
method hBtnCut,CFButton,SetCursor,hInstance,IDC_HANDCUR
method hBtnCombine,CFButton,SetCursor,hInstance,IDC_HANDCUR
;設(shè)置Active時(shí)文字顏色
RGB 255,0,0
push eax
method hBtnSelCut,CFButton,SetActiveTextCol,eax
pop eax
push eax
method hBtnSelCombine,CFButton,SetActiveTextCol,eax
pop eax
push eax
method hBtnCut,CFButton,SetActiveTextCol,eax
pop eax
push eax
method hBtnCombine,CFButton,SetActiveTextCol,eax
;設(shè)置Active時(shí)背景顏色
RGB 0,165,255
METHOD hBtnSelCut,CFButton,SetActiveBkCol,eax
RGB 0,165,255
METHOD hBtnSelCombine,CFButton,SetActiveBkCol,eax
RGB 0,165,255
METHOD hBtnCut,CFButton,SetActiveBkCol,eax
RGB 0,165,255
METHOD hBtnCombine,CFButton,SetActiveBkCol,eax
;設(shè)置非Active時(shí)背景顏色
RGB 85,160,180
method hBtnSelCut,CFButton,SetInactiveBkCol,eax
RGB 85,160,180
method hBtnSelCombine,CFButton,SetInactiveBkCol,eax
RGB 85,160,180
method hBtnCut,CFButton,SetInactiveBkCol,eax
RGB 85,160,180
method hBtnCombine,CFButton,SetInactiveBkCol,eax
;取下拉句柄
invoke GetDlgItem,hWnd, IDC_CUTSIZE
mov hCutSize,eax
;設(shè)置下拉內(nèi)容
invoke SendMessage,hCutSize,CB_ADDSTRING,0,SADD("720") ;顯示內(nèi)容
invoke SendMessage,hCutSize,CB_SETITEMDATA,eax,720 ;數(shù)據(jù)內(nèi)容
invoke SendMessage,hCutSize,CB_ADDSTRING,0,SADD("1024")
invoke SendMessage,hCutSize,CB_SETITEMDATA,eax,1024
invoke SendMessage,hCutSize,CB_ADDSTRING,0,SADD("1440")
invoke SendMessage,hCutSize,CB_SETITEMDATA,eax,1440
invoke SendMessage,hCutSize,CB_SETCURSEL,2,0
invoke SetDlgItemInt,hWnd,IDC_CUTSIZE,1440,FALSE
.elseif uMsg==WM_DRAWITEM
;重畫(huà)按鈕
method hBtnSelCut,CFButton,DrawItem,lParam
method hBtnSelCombine,CFButton,DrawItem,lParam
method hBtnCut,CFButton,DrawItem,lParam
method hBtnCombine,CFButton,DrawItem,lParam
.elseif uMsg==WM_SYSCOMMAND
mov eax,wParam
movzx eax,ax
.if ax==IDM_ABOUT
invoke SendMessage,hWnd,WM_COMMAND,IDM_ABOUT,NULL
.else
mov eax,FALSE
ret
.endif
.elseif uMsg==WM_SETCURSOR
INVOKE SetCursor,hCursor
.ELSEIF EAX==WM_ERASEBKGND
mov LogBrush.lbStyle,BS_SOLID
RGB 85,160,124
mov LogBrush.lbColor,eax
invoke CreateBrushIndirect,addr LogBrush
mov hBrush,eax
invoke GetClientRect,hWnd,addr rect
invoke FillRect,wParam,addr rect,hBrush
mov eax,TRUE
ret
.ELSEIF EAX==WM_CTLCOLORSTATIC
invoke GetDlgCtrlID,lParam
.if eax==IDC_STATIC1 || eax==IDC_STATIC2 ||eax==IDC_STATIC3 || EAX==IDC_STATIC4
RGB 255,255,0
invoke SetTextColor,wParam,eax
RGB 85,160,124
INVOKE SetBkColor,wParam,eax
invoke GetStockObject,NULL_BRUSH
.ELSE
MOV eax,FALSE
ret
.endif
ret
.elseif eax == WM_COMMAND
mov eax,wParam
.IF lParam==0
.if ax==IDM_ABOUT
invoke MessageBox,hWnd,addr szAbout,addr szAppName,MB_OK
.endif
.Endif
and eax,0ffffh
.if eax == IDC_SELECTCUT
invoke _GetFileName,hWnd,addr FilterStringCut
.if eax!=FALSE
invoke SetDlgItemText,hWnd,IDC_CUTFILENAME,addr szBuffer
.else
.endif
.elseif eax ==IDC_SELECTCOMBINE
invoke _GetFileName,hWnd,addr FilterStringCombine
.if EAX!=FALSE
invoke SetDlgItemText,hWnd,IDC_COMBINEFILENAME,addr szBuffer
.else
.endif
.ELSEIF EAX==IDC_CUT
invoke EnableWindow,lParam,FALSE
invoke GetDlgItemInt,hWnd,IDC_CUTSIZE,NULL,TRUE
INVOKE CutFile,addr szBuffer,eax
INVOKE EnableWindow,lParam,TRUE
.ELSEIF EAX==IDC_COMBINE
invoke EnableWindow,lParam,FALSE
invoke CutFile,addr szBuffer,0
invoke EnableWindow,lParam,TRUE
.elseif eax == IDC_CUTSIZE
mov eax,wParam
shr eax,16
.if eax == CBN_SELCHANGE
;invoke SendMessage,lParam,CB_GETCURSEL,0,0
; INVOKE SendMessage,lParam,CB_GETITEMDATA,eax,0
;invoke SetDlgItemInt,hWnd,IDC_CUTSIZE,eax,FALSE
.endif
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
;********************************************************************
start:
invoke InitCommonControls
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,IDD_DIALOGCUT ,NULL,offset DlgProc,0
invoke ExitProcess,NULL
end start
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -