?? 4.asm
字號:
invoke lstrcpyn,addr doname,addr FileName,eax
invoke lstrcat,addr doname,addr cat1
invoke Sleep,1000
invoke FindFirstFile,addr doname,ADDR buffer
.if eax != INVALID_HANDLE_VALUE
mov hFile,eax
invoke FindClose,hFile
invoke ShellExecute,0,0,addr szFileName2,addr doname ,0,SW_HIDE
CMP eax,31
JLE WRONG
JMP e
.else
invoke MessageBox, NULL, addr mess2, addr cap2,MB_ICONEXCLAMATION
jmp exit
.endif
WRONG: invoke MessageBox, NULL, addr mess, addr cap,MB_ICONERROR
jmp exit
e:
invoke MessageBox, NULL, addr mess1, addr cap1, MB_ICONEXCLAMATION
exit:
ret
compileproc endp
runproc proc
LOCAL doname[MAX_PATH]:BYTE
invoke lstrlen,addr FileName
sub eax,3
invoke lstrcpyn,addr doname,addr FileName,eax
invoke lstrcat, addr doname,addr cat2
invoke ShellExecute,0,0,addr doname, 0 ,0,SW_SHOWNORMAL
CMP eax,31
JLE WRONG
JMP e
WRONG: invoke MessageBox, NULL, addr mess, addr cap, MB_ICONERROR
e:
ret
runproc endp
compilesproc proc
LOCAL doname[MAX_PATH]:BYTE
LOCAL buffer1[MAX_PATH]:BYTE
LOCAL ofn:OPENFILENAME
LOCAL hFile:DWORD
LOCAL editstream:EDITSTREAM
LOCAL buffer[MAX_PATH]:BYTE
LOCAL chrg:CHARRANGE
;Zero out the ofn struct
invoke RtlZeroMemory,addr ofn,sizeof ofn
;Setup the ofn struct
mov ofn.lStructSize,sizeof ofn
push hWnd
pop ofn.hwndOwner
push hInstance
pop ofn.hInstance
mov ofn.lpstrFilter,NULL
mov buffer[0],0
lea eax,buffer
mov ofn.lpstrFile,eax
mov ofn.nMaxFile,sizeof buffer
mov ofn.lpstrDefExt,NULL
mov ofn.Flags,OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
;Show the Open dialog
invoke GetOpenFileName,addr ofn
.if eax
invoke lstrcat,addr doname,addr FileName
invoke lstrcat,addr doname,addr listcat
invoke ShellExecute,0,0,addr szFileName1,addr doname ,0,SW_HIDE
CMP eax,31
JLE WRONG
invoke Sleep,1000
invoke lstrlen,addr FileName
sub eax,3
invoke lstrcpyn,addr doname,addr FileName,eax
invoke lstrcat,addr doname,addr cat1
invoke FindFirstFile,addr doname,ADDR buffer1
.if eax != INVALID_HANDLE_VALUE
mov hFile,eax
invoke FindClose,hFile
invoke lstrcat,addr doname,addr addcat
invoke lstrcat,addr doname,addr buffer
invoke ShellExecute,0,0,addr szFileName2,addr doname ,0,SW_HIDE
CMP eax,31
JLE WRONG
jmp e
.else
invoke MessageBox, NULL, addr mess2, addr cap2,MB_ICONEXCLAMATION
jmp exit
.endif
.endif
WRONG: invoke MessageBox, NULL, addr mess, addr cap,MB_ICONERROR
jmp exit
e:
invoke MessageBox, NULL, addr mess1, addr cap1,MB_ICONEXCLAMATION
exit:
ret
compilesproc endp
musicproc proc
LOCAL ofn:OPENFILENAME
LOCAL hFile:DWORD
LOCAL editstream:EDITSTREAM
LOCAL buffer[MAX_PATH]:BYTE
LOCAL chrg:CHARRANGE
;Zero out the ofn struct
invoke RtlZeroMemory,addr ofn,sizeof ofn
;Setup the ofn struct
mov ofn.lStructSize,sizeof ofn
push hWnd
pop ofn.hwndOwner
push hInstance
pop ofn.hInstance
mov ofn.lpstrFilter,NULL
mov buffer[0],0
lea eax,buffer
mov ofn.lpstrFile,eax
mov ofn.nMaxFile,sizeof buffer
mov ofn.lpstrDefExt,NULL
mov ofn.Flags,OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
;Show the Open dialog
invoke GetOpenFileName,addr ofn
.if eax
invoke ShellExecute,0,0,addr buffer, 0 ,0,SW_HIDE
.endif
ret
musicproc endp
listviewproc proc
LOCAL hFile:DWORD
LOCAL editstream:EDITSTREAM
LOCAL buffer[MAX_PATH]:BYTE
LOCAL chrg:CHARRANGE
LOCAL doname[MAX_PATH]:BYTE
invoke lstrlen,addr FileName
sub eax,3
invoke lstrcpyn,addr doname,addr FileName,eax
invoke lstrcat,addr doname,addr cat3
;///////////////////////////////////////
invoke CreateFile,addr doname,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
.if eax!=INVALID_HANDLE_VALUE
mov hFile,eax
;Copy buffer to FileName
invoke lstrcpy,addr FileName,addr doname
;stream the text into the richedit control
push hFile
pop editstream.dwCookie
mov editstream.pfnCallback,offset StreamInProc
invoke SendMessage,hREd,EM_STREAMIN,SF_TEXT,addr editstream
invoke CloseHandle,hFile
invoke SendMessage,hREd,EM_SETMODIFY,FALSE,0
mov chrg.cpMin,0
mov chrg.cpMax,0
invoke SendMessage,hREd,EM_EXSETSEL,0,addr chrg
invoke SetWinCaption
mov eax,FALSE
.else
invoke MessageBox,hWnd,addr OpenFileFail,addr AppName,MB_OK
mov eax,TRUE
.endif
ret
listviewproc endp
asmproc proc
LOCAL hFile:DWORD
LOCAL editstream:EDITSTREAM
LOCAL buffer[MAX_PATH]:BYTE
LOCAL chrg:CHARRANGE
LOCAL doname[MAX_PATH]:BYTE
invoke lstrlen,addr FileName
sub eax,3
invoke lstrcpyn,addr doname,addr FileName,eax
invoke lstrcat,addr doname,addr cat4
;///////////////////////////////////////
invoke CreateFile,addr doname,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
.if eax!=INVALID_HANDLE_VALUE
mov hFile,eax
;Copy buffer to FileName
invoke lstrcpy,addr FileName,addr doname
;stream the text into the richedit control
push hFile
pop editstream.dwCookie
mov editstream.pfnCallback,offset StreamInProc
invoke SendMessage,hREd,EM_STREAMIN,SF_TEXT,addr editstream
invoke CloseHandle,hFile
invoke SendMessage,hREd,EM_SETMODIFY,FALSE,0
mov chrg.cpMin,0
mov chrg.cpMax,0
invoke SendMessage,hREd,EM_EXSETSEL,0,addr chrg
invoke SetWinCaption
mov eax,FALSE
.else
invoke MessageBox,hWnd,addr OpenFileFail,addr AppName,MB_OK
mov eax,TRUE
.endif
ret
asmproc endp
WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL pt:POINT
LOCAL rect:RECT
LOCAL ht:DWORD
LOCAL hCtl:HWND
LOCAL chrg:CHARRANGE
LOCAL cf:CHOOSEFONT
mov eax,uMsg
.if eax==WM_INITDIALOG
push hWin
pop hWnd
mov fView,3
mov TabSize,1
;Set the toolbar buttons
;Set FileName to NewFile
invoke lstrcpy,addr FileName,addr NewFile
invoke SetWinCaption
;Get handle of RichEdit window and give it focus
invoke GetDlgItem,hWin,IDC_RED
mov hREd,eax
invoke SendMessage,hREd,EM_SETTEXTMODE,0,TM_PLAINTEXT
;Set event mask
invoke SendMessage,hREd,EM_SETEVENTMASK,0,ENM_SELCHANGE
;Set the text limit. The default is 64K
invoke SendMessage,hREd,EM_LIMITTEXT,-1,0
;Create font
invoke lstrcpy,addr lfnt.lfFaceName,offset szFont
mov lfnt.lfHeight,-12
mov lfnt.lfWeight,400
invoke CreateFontIndirect,addr lfnt
mov hFont,eax
;Set font & format
invoke SetFormat,hREd
;Init RichEdit
invoke SendMessage,hREd,EM_SETMODIFY,FALSE,0
invoke SendMessage,hREd,EM_EMPTYUNDOBUFFER,0,0
invoke SetFocus,hREd
.elseif eax==WM_COMMAND
;Menu and toolbar has the same ID's
mov eax,wParam
and eax,0FFFFh
.if eax==IDM_FILE_NEW
invoke WantToSave
.if !eax
invoke SetWindowText,hREd,addr szNULL
invoke lstrcpy,addr FileName,addr NewFile
invoke SetWinCaption
.endif
invoke SetFocus,hREd
.elseif eax==IDM_FILE_OPEN
invoke WantToSave
.if !eax
invoke OpenEdit
.endif
invoke SetFocus,hREd
.elseif eax==IDM_FILE_SAVE
invoke SaveEdit
invoke SetFocus,hREd
.elseif eax==IDM_FILE_SAVEAS
invoke SaveEditAs
invoke SetFocus,hREd
;/////////////
.elseif eax==IDM_EDIT_CUT
invoke SendMessage,hREd,WM_CUT,0,0
.elseif eax==IDM_EDIT_COPY
invoke SendMessage,hREd,WM_COPY,0,0
.elseif eax==IDM_EDIT_PASTE
invoke SendMessage,hREd,WM_PASTE,0,0
.elseif eax==IDM_COMPILE ;IDM_RUN
invoke compileproc
.elseif eax==IDM_RUN
invoke runproc
.ELSEIF EAX==IDM_COMPILES
INVOKE compilesproc
.ELSEIF EAX==IDM_MUSIC
INVOKE musicproc
.elseif eax==IDM_LISTVIEW
invoke listviewproc
.elseif eax==IDM_ASM
invoke asmproc
.endif
.elseif eax==WM_NOTIFY
.if wParam==IDC_RED
;Auto horizontal scroll text into view
invoke GetCaretPos,addr pt
invoke GetClientRect,hREd,addr rect
mov eax,rect.right
sub eax,pt.x
.if eax<20
;Caret near right edge
invoke SendMessage,hREd,EM_GETSCROLLPOS,0,addr pt
add pt.x,70
invoke SendMessage,hREd,EM_SETSCROLLPOS,0,addr pt
.endif
.endif
.elseif eax==WM_SIZE
mov eax,fView
and eax,1
.if eax
;Resize toolbar
;invoke GetDlgItem,hWin,IDC_TBR
;mov hCtl,eax
;invoke MoveWindow,hCtl,0,0,0,0,TRUE
;Get height of toolbar
;invoke GetWindowRect,hCtl,addr rect
;mov eax,rect.bottom
;sub eax,rect.top
.endif
push eax
mov eax,fView
and eax,2
.if eax
;Resize statusbar
invoke GetDlgItem,hWin,IDC_SBR
mov hCtl,eax
invoke MoveWindow,hCtl,0,0,0,0,TRUE
;Get height of statusbar
invoke GetWindowRect,hCtl,addr rect
mov eax,rect.bottom
sub eax,rect.top
.endif
push eax
;Get size of windows client area
invoke GetClientRect,hWin,addr rect
;Subtract height of statusbar from bottom
pop eax
sub rect.bottom,eax
;Add height of toolbar to top
pop eax
add rect.top,eax
;Get new height of RichEdit window
mov eax,rect.bottom
sub eax,rect.top
mov ht,eax
;Resize RichEdit window
invoke MoveWindow,hREd,0,rect.top,rect.right,ht,TRUE
.elseif eax==WM_CLOSE
invoke WantToSave
.if !eax
invoke DestroyWindow,hWin
.endif
.elseif eax==WM_DESTROY
invoke DeleteObject,hFont
invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWin,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WndProc endp
end start
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -