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

📄 notepro.asm

📁 一个简单的记事本
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;		NOTEPRO FOR WINDOWS
;
;     这是一个记事本程序,也是我的第一个32位汇编程序
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		.386
		.model flat,stdcall
		option casemap:none
;>>>>>>>>>>>>>>>include文件定义>>>>>>>>>>>>>>>>>>>>>>>>>>
include		windows.inc
include		user32.inc
includelib		user32.lib
include		kernel32.inc
includelib		kernel32.lib
include		comctl32.inc
includelib		comctl32.lib
include		comdlg32.inc
includelib		comdlg32.lib
include		shell32.inc	;ShellExecuteEx API
includelib		shell32.lib
include		masm32.inc
includelib		masm32.lib  ;by str function 
include		gdi32.inc
includelib		gdi32.lib
;>>>>>>>>>>>>>>自定义函数声明>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_OpenTheFile		proto
_argc			proto
_argv			proto	:dword,:dword,:dword
_Init			proto
_OpenFile		proto
_SaveFile		proto
_SaveAs		proto
_ProcStream		proto  :dword,:dword,:dword,:dword
_CreateTBParts	proto
_EditSize 		proto
_CheckModify		proto
_SetCaption		proto
_PageSetup		proto
_GetPrinterDC		proto
_PrintText		proto
_FindText		proto
_ResizeWindow		proto
_Quit			proto
_ProcSoftDlg		proto	:dword,:dword,:dword,:dword
_ProcWinMain		proto	:dword,:dword,:dword,:dword
_WinMain		proto
_GetRecentlyFile	proto
_SaveRecentlyFile	proto
_DeleteMenu		proto
_DeleteFileKey 	proto
_GetFilePath		proto
_SetToolStatus	proto
_SetMenuStatus	proto
_SetStatusStatus	proto
_SetFont		proto	:dword,:dword,:dword
_ModifyTimeMenu	proto
_ChooseFont		proto
_ChooseColor		proto
_ProcRichEdit		proto	:dword,:dword,:dword,:dword
_LetterChange		proto
_GetRichEdit		proto
_OFNHookProcTxt 	proto :dword,:dword,:dword,:dword
_ProcOptionDlg	proto :dword,:dword,:dword,:dword
_SetChild1Status	proto
_GetChild1Status	proto
_ReadConfigFile 	proto
_GetFileTitle		proto
_SaveWinPosition	proto
_ReadWinPosition	proto
_ShowSplash		proto
_SplashProc 		proto :dword,:dword,:dword,:dword
_ProcChild1		proto :dword,:dword,:dword,:dword
_ProcChild2		proto :dword,:dword,:dword,:dword
;>>>>>>>>>>>>>>>>>equ等值定义>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDM_FILE_NEW			equ	4110h
IDM_FILE_OPEN			equ	4120h
IDM_FILE_SAVE			equ	4130h
IDM_FILE_SAVEAS		equ	4140h
IDM_FILE_CREATE		equ	4170h
IDM_FILE_SETUP		equ	4180h
IDM_FILE_PRINT		equ	4190h
IDM_FILE_RECENT_FILE01 	equ	4191h
IDM_FILE_RECENT_FILE10 	equ	419ah
IDM_FILE_RECENT_DELLIST 	equ    4200h

IDM_FILE_EXIT			equ	4290h

IDM_EDIT_UNDO			equ	4310h
IDM_EDIT_REDO			equ	4320h
IDM_EDIT_CUT			equ	4330h
IDM_EDIT_COPY			equ	4340h
IDM_EDIT_PASTE		equ	4350h
IDM_EDIT_DEL			equ	4360h
IDM_EDIT_CHANG_CHANG    	equ	4361h
IDM_EDIT_CHANG_UPPER		equ	4362h
IDM_EDIT_CHANG_LOWER    	equ	4363h
IDM_EDIT_INSERT_DATE1	equ	4371h ;时间与日期
IDM_EDIT_INSERT_DATE7	equ	4377h
IDM_EDIT_SELECTALL		equ	4380h

IDM_SEARCH_FIND		equ	4510h
IDM_SEARCH_NEXT		equ	4520h
IDM_SEARCH_PREV		equ	4530h
IDM_SEARCH_REPLACE		equ	4540h
IDM_SEARCH_GOTO		equ	4550h

IDM_CONFIG_FONT		equ	4710h
IDM_CONFIG_BKCOLOR		equ	4720h
IDM_CONFIG_TOOL		equ	4730h
IDM_CONFIG_STATUS		equ	4740h
IDM_CONFIG_BAR		equ    4750h
IDM_CONFIG_WRAP		equ	4760h
IDM_CONFIG_OPTION		equ	4770h

IDM_HELP_HELP			equ	4910h
IDM_HELP_SOFT			equ	4920h

IDM_MENUHELP			equ	6000h

IDM_RESTORE			equ	7000h

ID_MainMenu			equ	1000h
ID_MainAcc			equ	2000h
ID_ToolBar			equ	3000h
ID_StatusBar			equ	4000h
ID_MainIcon			equ	5000h
ID_TrayIcon			equ	6000h

DLG_SOFT			equ    0001h
DLG_GOTO			equ    0002h
DLG_TXT			equ    0003h

DLG_OPTION			equ    1010h
DLG_CHILD1			equ    1011h
DLG_CHILD2			equ    1012h

ID_LINETEXT			equ 	0010h
ID_PREVIEW     		equ    0011h
IDC_TAB1  			equ  	0012h	

ID_SAVE			equ	0100h
ID_ESC				equ	0101h
ID_ONTOP			equ	0102h
ID_FULLPATH			equ	0103h
ID_POSITION			equ	0104h
ID_TRAY			equ	0105h
ID_DROPPED			equ	0106h
ID_SPLASH			equ	0107h

WM_SHELLNOTIFY 		equ 	WM_USER+5 


CDN_INITDONE    		equ    CDN_FIRST - 0
CDN_SELCHANGE   		equ    CDN_FIRST - 1

;>>>>>>>>>>>>>>>>>>>>>数据段>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		.data
dwMenuHelp		dd	0,IDM_MENUHELP,0,0
bReadOnlyFlag		dd			FALSE	
bInsertFlag		dd			TRUE
bHasModifyFlag	dd			FALSE
bToUpper		dd			FALSE
bToLower		dd			FALSE

bTool			dd			TRUE
bStatus		dd			TRUE
bShowBar		dd			TRUE  ;显示边距
bWrap			dd			TRUE  ;自动换行

bSave			dd			TRUE	;选项对话框中的各标志
bEsc			dd			TRUE
bOnTop			dd			FALSE
bFullPath		dd			TRUE
bPosition		dd			FALSE
bTray			dd			TRUE
bDropped		dd			TRUE
bSplash		dd			FALSE

		.data?
hInstance		dd			?
lpCmdline		dd			?	;指向命令行
hWinMain		dd			?
hMenu			dd			?
hTrayMenu		dd			?
hDlgSoft		dd			?
hDlgGoto		dd			?
hDlgTxt		dd			?
hDlgOption		dd			?
hTab1			dd			?
hChild1		dd			?
hChild2		dd			?
hSplash		dd			?
hToolBar		dd			?
hEditDll		dd			?
hEdit			dd			?
hPreView		dd			?
hStatus		dd			?
szFileName		db	MAX_PATH dup (?)
szFileTitle		db	MAX_PATH dup (?)
szBuffer1		db	MAX_PATH dup (?)
szBuffer2		db	MAX_PATH dup (?)
hFile			dd			?
hFindDialog		dd			?
szFindText		db		100 dup (?)
szReplaceText		db		100 dup (?)
stFind			FINDREPLACE		<?>
idFindMessage		dd			?
bReplaceAllFlag 	db			?
dwFontColor		dd			?
stLogFont		LOGFONT		<?>
dwBackColor		dd			?
dwCustColors		dd		16 dup (?)
lpOldProcRichEdit	dd			?
stOF        		OPENFILENAME 		<>
stNote 		NOTIFYICONDATA 	<>
stItem  		TC_ITEM 	<?>	
WhichTabChosen	DWORD		?
	  
;>>>>>>>>>>>>>>>>>>>常量定义>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		.const
szClassName		db	'NotePro',0
szCaptionMain		db	'NotePro',0
szEditDllName		db	'Riched20.dll',0
szEditClassName	db	'RichEdit20A',0
szFilter		db	'All supprt(*.txt;*.ini;*.asm;*.inc;*.c;*.h;*.rc;*.cpp;*.htm;*.html)',0,\
				'*.txt;*.ini;*.asm;*.inc;*.c;*.h;*.rc;*.cpp;*.htm;*.html',0,
				'Text Files(*.txt;*.ini)',0,'*.txt;*.ini',0,
				'Asm  Files(*.asm;*.inc)',0,'*.asm;*.inc',0,
				'C/C++Files(*.c;*.h;*.rc;*.cpp)',0,'*.c;*.h;*.rc;*.cpp',0,
				'Html Files(*.htm;*.html)',0,'*.htm;*.html',0,
				'All Files(*.*)',0,'*.*',0,0
szSplashName		db	"Splash_Class",0
szErrOpenFile		db	'无法打开文件!',0
szDefExt		db	'txt',0
szSaveCaption		db	'请输入保存的文件名',0
szErrCreateFile	db	'无法建立文件!',0
szFileReadOnly	db	'这是只读文件',0
szLineError		db	'行号大于总行数了',0
szCaption		db	'提问',0
szModify		db	'文件已修改,是否保存?',0
szTitleFormat1	db	'NotePro - [%s]',0
szTitleFormat2	db	'NotePro - [%s %s]',0
szNoName		db	'未命名的文件',0
FINDMSGSTRING		db	'commdlg_FindReplace',0
szNotFound		db	'字符串未找到!',0
szReplaceInfo		db	'共替换字符串N处!',0

szPreview 		db	'选中一个文本文件,在这里预览其中的内容',0
szFontFace		db	'宋体',0
CHAR_BLANK		equ	20h
CHAR_DELI		equ	'"'
szCharStar		db	'*',0
szCharBlank		db	' ',0
szIniFileName		db	'\Notepro.ini',0
szSecName1		db	'Recently Files',0
szKeyName1		db	'File01',0,'File02',0,'File03',0,'File04',0,'File05',0,\
				'File06',0,'File07',0,'File08',0,'File09',0,'File10',0
szSecName2		db	'Options',0
szKeyName2a		db	'SaveAtExit',0
szKeyName2b		db	'EscapeExit',0
szKeyName2c		db	'AlwaysOnTop',0
szKeyName2d		db	'FullPath',0
szKeyName2e		db	'SavePosition',0
szKeyName2f		db	'MinimizeToTray',0
szKeyName2g		db	'DNDNewWindow',0
szKeyName2h		db	'ShowSplash',0
szKeyName2i		db	'ShowTool',0
szKeyName2j		db	'ShowStatus',0
szKeyName2k		db	'ShowBar',0
szKeyName2l		db	'AutoWrap',0

szSecName3		db	'Windows Placement',0
szKeyName3a		db	'showCmd',0
szKeyName3b		db	'Min.X',0
szKeyName3c		db	'Min.Y',0
szKeyName3d		db	'Max.X',0
szKeyName3e		db	'Max.Y',0
szKeyName3f		db	'Top',0
szKeyName3g		db	'Left',0
szKeyName3h		db	'Bottom',0
szKeyName3i		db	'Right',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
stToolbar		equ	this byte
TBBUTTON	<STD_FILENEW,IDM_FILE_NEW,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON	<STD_FILEOPEN,IDM_FILE_OPEN,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON	<STD_FILESAVE,IDM_FILE_SAVE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON	<0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>
TBBUTTON	<STD_COPY,IDM_EDIT_COPY,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON	<STD_CUT,IDM_EDIT_CUT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON	<STD_PASTE,IDM_EDIT_PASTE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON	<0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>
TBBUTTON	<STD_UNDO,IDM_EDIT_UNDO,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON	<STD_REDOW,IDM_EDIT_REDO,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON	<0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>
TBBUTTON	<STD_FIND,IDM_SEARCH_FIND,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON	<STD_REPLACE,IDM_SEARCH_REPLACE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON	<0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>
TBBUTTON	<STD_PRINT,IDM_FILE_PRINT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
NUM_BUTTONS		equ	15
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
szTimeFormat1		db	'%s-%s-%s',0
szTimeFormat3		db	'%s.%s.%s',0
szTimeFormat4		db	'%d年%d月%d日',0
szTimeFormat5		db	'%d年%d月%d日 星期%s',0
szTimeFormat6		db	'%d:%s:%s',0
szWeek			db	'日一二三四五六',0
szTime			db	'凌晨上午下午晚上',0
;>>>>>>>>>>>>>>>>>>
szReady		db	'就绪',0
szLineFormat		db	'当前行:%d',0
szLinesFormat		db	'总行数:%d',0
szCharsFormat		db	'总长度:%d',0
szRWMode		db	'读写',0
szRMode		db	'只读',0
szInsert		db	'插入',0
szUnInsert		db	'改写',0
szCapsLock		db	'大写',0
szCapsUnLock		db	'小写',0
szNumLock		db	'数字',0
szNumUnLock		db	'控制',0


szRestore		db	'显示主窗口',0
szExit			db	'退出',0

TabTitle1		DB 	"常 规",0				
TabTitle2		DB 	"关 于",0
		.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ShowTab1	proc
	INVOKE GetDlgItem,hDlgOption,IDC_TAB1		
	MOV hTab1,EAX			       

	MOV stItem.imask,TCIF_TEXT			
	MOV stItem.lpReserved1,0			
	MOV stItem.lpReserved2,0 			
	MOV stItem.pszText,OFFSET TabTitle1 
	MOV stItem.cchTextMax,sizeof TabTitle1	
  	MOV stItem.iImage,0			
 	MOV stItem.lParam,0			
	INVOKE SendMessage,hTab1,TCM_INSERTITEM,0,OFFSET stItem

	MOV stItem.pszText,OFFSET TabTitle2
	MOV stItem.cchTextMax,sizeof TabTitle2
	INVOKE SendMessage,hTab1,TCM_INSERTITEM,1,OFFSET stItem

	MOV EAX,OFFSET _ProcChild1
	INVOKE CreateDialogParam,hInstance,DLG_CHILD1,hTab1,EAX,0
	MOV hChild1,EAX

	MOV EAX,OFFSET _ProcChild2
	INVOKE CreateDialogParam,hInstance,DLG_CHILD2,hTab1,EAX,0
	MOV hChild2,EAX

	MOV WhichTabChosen,0 				

	INVOKE ShowWindow,hChild1,SW_SHOWDEFAULT
;invoke MessageBox,hWinMain,addr szClassName,NULL,MB_OK
	ret
_ShowTab1	endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ShowSplash	proc
	local 	@Spl  		:WNDCLASSEX
	local 	@DlgWidth	:DWORD
	local	@DlgHeight	:DWORD
	local	@DlgLeft	:DWORD
	local	@DlgTop	:DWORD

      	mov @Spl.cbSize,         sizeof WNDCLASSEX
      	mov @Spl.style,          CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW
      	mov @Spl.lpfnWndProc,    offset _SplashProc
     	mov @Spl.cbClsExtra,     NULL
      	mov @Spl.cbWndExtra,     NULL
       push hInstance
      	pop @Spl.hInstance
      	mov @Spl.hbrBackground,COLOR_BTNFACE+1 
      	mov @Spl.lpszMenuName,   NULL
      	mov @Spl.lpszClassName,  offset szSplashName
      	mov @Spl.hIcon,          NULL
      	mov @Spl.hCursor,        NULL
      	mov @Spl.hIconSm,        NULL

       invoke RegisterClassEx,addr @Spl
	;*************************************
	mov 	@DlgWidth,350
	mov	@DlgHeight,200
       invoke GetSystemMetrics,SM_CXSCREEN
	sub	eax,@DlgWidth  
	shr	eax,1
	mov	@DlgLeft,eax
      invoke GetSystemMetrics,SM_CYSCREEN
	sub	eax,@DlgHeight  
	shr	eax,1
	mov	@DlgTop,eax
      invoke CreateWindowEx,WS_EX_TOPMOST,ADDR szSplashName,NULL,WS_POPUP or WS_BORDER,\
		@DlgLeft,@DlgTop,@DlgWidth,@DlgHeight,NULL,NULL,hInstance,NULL
       mov   hSplash,eax
      invoke ShowWindow,hSplash,SW_SHOWNORMAL
      invoke UpdateWindow,hSplash
	ret
_ShowSplash	endp
;>>>>>>>>>>>>>>>>>>>取窗口属性>>>>>>>>>>>>>>>>>>>>
_ReadWinPosition	proc
	local	@stWin		:WINDOWPLACEMENT

	mov	@stWin.iLength,sizeof @stWin
	mov	@stWin.flags,0
	invoke GetWindowPlacement,hWinMain,addr @stWin
	invoke	GetPrivateProfileInt,addr szSecName3,addr szKeyName3a,@stWin.showCmd,addr szBuffer1
	mov 	@stWin.showCmd,eax

	invoke	GetPrivateProfileInt,addr szSecName3,addr szKeyName3b,@stWin.ptMinPosition.x,addr szBuffer1
	mov 	@stWin.ptMinPosition.x,eax
	invoke	GetPrivateProfileInt,addr szSecName3,addr szKeyName3c,@stWin.ptMinPosition.y,addr szBuffer1

⌨️ 快捷键说明

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