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

📄 notepro.asm

📁 一个简单的记事本
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	mov 	@stWin.ptMinPosition.y,eax

	invoke	GetPrivateProfileInt,addr szSecName3,addr szKeyName3d,@stWin.ptMaxPosition.x,addr szBuffer1
	mov 	@stWin.ptMaxPosition.x,eax
	invoke	GetPrivateProfileInt,addr szSecName3,addr szKeyName3e,@stWin.ptMaxPosition.y,addr szBuffer1
	mov 	@stWin.ptMaxPosition.y,eax

	invoke	GetPrivateProfileInt,addr szSecName3,addr szKeyName3f,@stWin.rcNormalPosition.top,addr szBuffer1
	mov 	@stWin.rcNormalPosition.top,eax
	invoke	GetPrivateProfileInt,addr szSecName3,addr szKeyName3g,@stWin.rcNormalPosition.left,addr szBuffer1
	mov 	@stWin.rcNormalPosition.left,eax
	invoke	GetPrivateProfileInt,addr szSecName3,addr szKeyName3h,@stWin.rcNormalPosition.bottom,addr szBuffer1
	mov 	@stWin.rcNormalPosition.bottom,eax
	invoke	GetPrivateProfileInt,addr szSecName3,addr szKeyName3i,@stWin.rcNormalPosition.right,addr szBuffer1
	mov 	@stWin.rcNormalPosition.right,eax
	invoke SetWindowPlacement,hWinMain,addr @stWin
	ret
_ReadWinPosition	endp
;>>>>>>>>>>>>>>>>>保存窗口属性>>>>>
_SaveWinPosition	proc
	local	@szStr[10]	:DWORD
	local	@stWin		:WINDOWPLACEMENT

	mov	@stWin.iLength,sizeof @stWin
	mov	@stWin.flags,0
	invoke GetWindowPlacement,hWinMain,addr @stWin
	invoke  _GetFilePath

	invoke dw2a,@stWin.showCmd,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName3,addr szKeyName3a,addr @szStr,addr szBuffer1

	invoke dw2a,@stWin.ptMinPosition.x,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName3,addr szKeyName3b,addr @szStr,addr szBuffer1
	invoke dw2a,@stWin.ptMinPosition.y,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName3,addr szKeyName3c,addr @szStr,addr szBuffer1

	invoke dw2a,@stWin.ptMaxPosition.x,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName3,addr szKeyName3d,addr @szStr,addr szBuffer1
	invoke dw2a,@stWin.ptMaxPosition.y,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName3,addr szKeyName3e,addr @szStr,addr szBuffer1

	invoke dw2a,@stWin.rcNormalPosition.top,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName3,addr szKeyName3f,addr @szStr,addr szBuffer1
	invoke dw2a,@stWin.rcNormalPosition.left,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName3,addr szKeyName3g,addr @szStr,addr szBuffer1
	invoke dw2a,@stWin.rcNormalPosition.bottom,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName3,addr szKeyName3h,addr @szStr,addr szBuffer1
	invoke dw2a,@stWin.rcNormalPosition.right,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName3,addr szKeyName3i,addr @szStr,addr szBuffer1
	ret
_SaveWinPosition	endp
;>>>>>>>>>>>>>>>>从全路径中取出文件名>>>>>>>>>>>>>>>>>
_GetFileTitle		proc
	local	@dwStrLen	:DWORD

	mov 	ebx,offset szFileName
	invoke	StrLen,addr szFileName
	mov	@dwStrLen,eax
	add	ebx,eax
	xor	ecx,ecx
	.repeat
		dec 	ebx
		mov	al,byte ptr[ebx]
		inc	ecx
	.until	al == '\' || ecx >= @dwStrLen
	dec	ecx
	invoke szRight,addr szFileName,addr szFileTitle,ecx
	ret
_GetFileTitle		endp
;>>>>>>>>>>>>>>>>保存各设置到INI文件>>>>>>>>>>>>>>>>>>
_WriteConfigFile 	proc
	local @szStr[10]	:DWORD

	invoke  _GetFilePath
	invoke dw2a,bSave,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName2,addr szKeyName2a,addr @szStr,addr szBuffer1
	invoke dw2a,bEsc,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName2,addr szKeyName2b,addr @szStr,addr szBuffer1
	invoke dw2a,bOnTop,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName2,addr szKeyName2c,addr @szStr,addr szBuffer1
	invoke dw2a,bFullPath,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName2,addr szKeyName2d,addr @szStr,addr szBuffer1
	invoke dw2a,bPosition,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName2,addr szKeyName2e,addr @szStr,addr szBuffer1
	invoke dw2a,bTray,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName2,addr szKeyName2f,addr @szStr,addr szBuffer1
	invoke dw2a,bDropped,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName2,addr szKeyName2g,addr @szStr,addr szBuffer1
	invoke dw2a,bSplash,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName2,addr szKeyName2h,addr @szStr,addr szBuffer1
	invoke dw2a,bTool,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName2,addr szKeyName2i,addr @szStr,addr szBuffer1
	invoke dw2a,bStatus,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName2,addr szKeyName2j,addr @szStr,addr szBuffer1
	invoke dw2a,bShowBar,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName2,addr szKeyName2k,addr @szStr,addr szBuffer1
	invoke dw2a,bWrap,addr @szStr
	invoke	WritePrivateProfileString,addr szSecName2,addr szKeyName2l,addr @szStr,addr szBuffer1
	ret	
_WriteConfigFile	endp
;>>>>>>>>>>>>>>>>从INI文件读取各设置>>>>>>>>>>>>>>>>>>
_ReadConfigFile 	proc

	invoke  _GetFilePath
	;*******取选项中的设置值***********
	invoke	GetPrivateProfileInt,addr szSecName2,addr szKeyName2a,bSave,addr szBuffer1
	mov 	bSave,eax
	invoke	GetPrivateProfileInt,addr szSecName2,addr szKeyName2b,bEsc,addr szBuffer1
	mov 	bEsc,eax
	invoke	GetPrivateProfileInt,addr szSecName2,addr szKeyName2c,bOnTop,addr szBuffer1
	mov 	bOnTop,eax
	invoke	GetPrivateProfileInt,addr szSecName2,addr szKeyName2d,bFullPath,addr szBuffer1
	mov 	bFullPath,eax
	invoke	GetPrivateProfileInt,addr szSecName2,addr szKeyName2e,bPosition,addr szBuffer1
	mov 	bPosition,eax
	invoke	GetPrivateProfileInt,addr szSecName2,addr szKeyName2f,bTray,addr szBuffer1
	mov 	bTray,eax
	invoke	GetPrivateProfileInt,addr szSecName2,addr szKeyName2g,bDropped,addr szBuffer1
	mov 	bDropped,eax
	invoke	GetPrivateProfileInt,addr szSecName2,addr szKeyName2h,bSplash,addr szBuffer1
	mov 	bSplash,eax
	invoke	GetPrivateProfileInt,addr szSecName2,addr szKeyName2i,bTool,addr szBuffer1
	mov 	bTool,eax
	invoke	GetPrivateProfileInt,addr szSecName2,addr szKeyName2j,bStatus,addr szBuffer1
	mov 	bStatus,eax
	invoke	GetPrivateProfileInt,addr szSecName2,addr szKeyName2k,bShowBar,addr szBuffer1
	mov 	bShowBar,eax
	invoke	GetPrivateProfileInt,addr szSecName2,addr szKeyName2l,bWrap,addr szBuffer1
	mov 	bWrap,eax

	ret	
_ReadConfigFile	endp
;>>>>>>>>>>>>>>>设置选项对话框中各状态>>>>>>>>>>>>>>>>>>>>>>
_SetChild1Status	proc

	invoke CheckDlgButton,hChild1,ID_SAVE,bSave
	invoke CheckDlgButton,hChild1,ID_ESC,bEsc
	invoke CheckDlgButton,hChild1,ID_ONTOP,bOnTop
	invoke CheckDlgButton,hChild1,ID_FULLPATH,bFullPath
	invoke CheckDlgButton,hChild1,ID_POSITION,bPosition
	invoke CheckDlgButton,hChild1,ID_TRAY,bTray
	invoke CheckDlgButton,hChild1,ID_DROPPED,bDropped
	invoke CheckDlgButton,hChild1,ID_SPLASH,bSplash
	ret
_SetChild1Status	endp
;>>>>>>>>>>>>>>取选项对话框中各状态>>>>>>>>>>>>>>>>>>>>>>
_GetChild1Status	proc

	invoke IsDlgButtonChecked,hChild1,ID_SAVE
	mov	bSave,eax
	invoke IsDlgButtonChecked,hChild1,ID_ESC
	mov	bEsc,eax
	invoke IsDlgButtonChecked,hChild1,ID_ONTOP
	mov	bOnTop,eax
	invoke IsDlgButtonChecked,hChild1,ID_FULLPATH
	mov	bFullPath,eax
	invoke IsDlgButtonChecked,hChild1,ID_POSITION
	mov	bPosition,eax
	invoke IsDlgButtonChecked,hChild1,ID_TRAY
	mov	bTray,eax
	invoke IsDlgButtonChecked,hChild1,ID_DROPPED
	mov	bDropped,eax
	invoke IsDlgButtonChecked,hChild1,ID_SPLASH
	mov	bSplash,eax
	;********************************
	.if bOnTop
		invoke SetWindowPos,hWinMain,HWND_TOPMOST,NULL,NULL,NULL,NULL,\
                     SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE 
	.else
		invoke SetWindowPos,hWinMain,HWND_NOTOPMOST,NULL,NULL,NULL,NULL,\
                     SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE
	.endif
	invoke _SetCaption
	ret
_GetChild1Status	endp
;>>>>>>>>>>>>>>>处理自动换行>>>>>>>>>>>>>
_WordWrap	proc
	local  @dwModify	:DWORD
	local	@dwTextLen	:DWORD
	local	@hMem		:DWORD

    	invoke SendMessage,hEdit,EM_GETMODIFY,0,0
    	mov @dwModify, eax
    	invoke GetWindowTextLength,hEdit
    	mov @dwTextLen,eax
   	inc @dwTextLen
	invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,@dwTextLen
    	mov @hMem,eax
    	invoke GetWindowText,hEdit,@hMem,@dwTextLen
    	invoke DestroyWindow,hEdit
	invoke _GetRichEdit
    	invoke SetWindowText,hEdit,@hMem
	invoke GlobalFree,@hMem
    	invoke SendMessage,hEdit,EM_SETMODIFY,@dwModify,0
	.if bReadOnlyFlag
		invoke SendMessage,hEdit,EM_SETOPTIONS,ECOOP_XOR,ECO_READONLY
	.endif
	invoke SendMessage,hWinMain,WM_SIZE,0,0
	ret
_WordWrap	endp
;>>>>>>>>>>>>>>>>创建RichEdit并子类化>>>>>>>>>
_GetRichEdit	proc
    	local @dwEditStyle 	:DWORD

   	 mov @dwEditStyle, WS_VISIBLE or WS_CHILD or WS_VSCROLL or \
                 ES_NOHIDESEL or ES_MULTILINE or ES_AUTOVSCROLL
    	.if bWrap == FALSE
     	 	or @dwEditStyle,WS_HSCROLL or ES_AUTOHSCROLL
    	.endif
	invoke	CreateWindowEx,WS_EX_CLIENTEDGE,addr szEditClassName,NULL,\
		@dwEditStyle,0,0,0,0,hWinMain,0,hInstance,NULL
	mov	hEdit,eax
	invoke	_SetFont,addr szFontFace,10 * 20,0
	invoke	SendMessage,hEdit,EM_SETEVENTMASK,0,\
		ENM_CHANGE or ENM_SELCHANGE or ENM_MOUSEEVENTS
	invoke	SendMessage,hEdit,EM_EXLIMITTEXT,0,-1
	.if bShowBar
            	invoke SendMessage,hEdit,EM_SETOPTIONS,ECOOP_OR,ECO_SELECTIONBAR
	.endif
	invoke	SetWindowLong,hEdit,GWL_WNDPROC,addr _ProcRichEdit
	mov	lpOldProcRichEdit,eax
    	invoke SetWindowText,hEdit,addr szCharStar
    	invoke SetWindowText,hEdit,NULL
	invoke SetFocus,hEdit

	ret
_GetRichEdit	endp
;>>>>>>>>>>>>>>>>实现大小写字母的转换>>>>>>>>>>>>
_LetterChange		proc
	local @stRange	:CHARRANGE
	local @dwTextLen	:DWORD
	local @lpMemory	:DWORD

	invoke SendMessage,hEdit,EM_EXGETSEL,0,addr @stRange
	mov eax,@stRange.cpMax
	sub eax,@stRange.cpMin
	inc eax
	shl eax,1	;申请两倍的内存
	invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,eax
	mov @lpMemory,eax
	invoke SendMessage,hEdit,EM_GETSELTEXT,0,@lpMemory
	mov @dwTextLen,eax
	mov ebx,@lpMemory
	xor ecx,ecx
	.while ecx < @dwTextLen
		mov al,byte ptr[ebx + ecx]
		.if (al >= 'A') && (al <= 'Z') && bToLower
			add al,32
		.elseif (al >= 'a') && (al <= 'z') && bToUpper
			sub al,32
		.endif
		mov byte ptr[ebx + ecx],al
		inc ecx
	.endw 
	invoke SendMessage,hEdit,EM_REPLACESEL,TRUE,@lpMemory
	invoke SendMessage,hEdit,EM_EXSETSEL,0,addr @stRange
	invoke GlobalFree,@lpMemory
	ret
_LetterChange		endp
;>>>>>>>>>>>>>>>>>>>>>设置背景颜色>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ChooseColor	proc
		local	@stCC		:CHOOSECOLOR

		invoke	RtlZeroMemory,addr @stCC,sizeof @stCC
		mov	@stCC.lStructSize,sizeof @stCC
		push	hWinMain
		pop	@stCC.hwndOwner
		push	dwBackColor
		pop	@stCC.rgbResult
		mov	@stCC.Flags,CC_RGBINIT or CC_FULLOPEN
		mov	@stCC.lpCustColors,offset dwCustColors
		invoke	ChooseColor,addr @stCC
		.if	eax
			push	@stCC.rgbResult
			pop	dwBackColor
			invoke	SendMessage,hEdit,EM_SETBKGNDCOLOR,0,dwBackColor
		.endif
		ret

_ChooseColor	endp
;>>>>>>>>>>>>>>>>>>>>>>选择字体>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ChooseFont	proc
		local	@stCF		:CHOOSEFONT

		invoke	RtlZeroMemory,addr @stCF,sizeof @stCF
		mov	@stCF.lStructSize,sizeof @stCF
		push	hWinMain
		pop	@stCF.hWndOwner
		mov	@stCF.lpLogFont,offset stLogFont
		push	dwFontColor
		pop	@stCF.rgbColors
		mov	@stCF.Flags,CF_SCREENFONTS or CF_INITTOLOGFONTSTRUCT or CF_EFFECTS
		invoke	ChooseFont,addr @stCF
		.if	eax
			push	@stCF.rgbColors
			pop	dwFontColor
			mov	eax,@stCF.iPointSize
			shl	eax,1
			invoke	_SetFont,addr stLogFont.lfFaceName,eax,@stCF.rgbColors
		.else
			invoke SetFocus,hEdit
		.endif
		ret

_ChooseFont	endp
;>>>>>>>>>>>>>>>>>>制作时间菜单>>>>>>>>>>>>>>>>>>>>>>>>
_ModifyTimeMenu		proc
	local	@stTime					:SYSTEMTIME
	local  @szBuffer[100]				:DWORD
	local  @szYear[10],@szMonth[10],@szDay[10]	:DWORD
	local	@szHour[10],@szMinute[10],@szSecond[10]	:DWORD
	local	@szWeek[10],@szTime[100]			:DWORD
	local	@dwIDMBase					:DWORD
	local  @dwYear,@dwMonth,@dwDay			:DWORD
	local	@dwHour,@dwMinute,@dwSecond			:DWORD

	mov	@dwIDMBase,IDM_EDIT_INSERT_DATE1
	invoke GetLocalTime,addr @stTime
	movzx	eax,@stTime.wYear
	mov 	@dwYear,eax
	invoke dw2a,@dwYear,addr @szYear

	movzx	eax,@stTime.wMonth
	add	eax,100
	mov	@dwMonth,eax
	invoke dw2a,@dwMonth,addr @szMonth
	invoke szMid,addr @szMonth,addr @szMonth,1,2	

	movzx	eax,@stTime.wDay
	add	eax,100
	mov	@dwDay,eax
	invoke dw2a,@dwDay,addr @szDay
	invoke szMid,addr @szDay,addr @szDay,1,2

	movzx	eax,@stTime.wHour
	add	eax,100
	mov	@dwHour,eax
	invoke dw2a,@dwHour,addr @szHour
	invoke szMid,addr @szHour,addr @szHour,1,2

	movzx	eax,@stTime.wMinute
	add	eax,100
	mov	@dwMinute,eax
	invoke dw2a,@dwMinute,addr @szMinute
	invoke szMid,addr @szMinute,addr @szMinute,1,2

	movzx	eax,@stTime.wSecond
	add	eax,100
	mov	@dwSecond,eax
	invoke dw2a,@dwSecond,addr @szSecond
	invoke szMid,addr @szSecond,addr @szSecond,1,2

	movzx  eax,@stTime.wDayOfWeek
	shl	eax,1
	invoke szMid,addr szWeek,addr @szWeek,eax,2

	xor 	eax,eax
	mov	ax,@stTime.wHour
	mov	bl,6
	div	bl
	shl	eax,24
	shr	eax,22
	invoke szMid,addr szTime,addr @szTime,eax,4

	invoke szMid,addr @szYear,addr @szBuffer,2,2
	invoke wsprintf,addr @szBuffer,addr szTimeFormat1,addr @szBuffer,addr @szMonth,addr @szDay
	invoke ModifyMenu,hMenu,@dwIDMBase,MF_BYCOMMAND,@dwIDMBase,addr @szBuffer
	inc 	@dwIDMBase
	invoke wsprintf,addr @szBuffer,addr szTimeFormat1,addr @szYear,addr @szMonth,addr @szDay
	invoke ModifyMenu,hMenu,@dwIDMBase,MF_BYCOMMAND,@dwIDMBase,addr @szBuffer
	inc 	@dwIDMBase
	invoke wsprintf,addr @szBuffer,addr szTimeFormat3,addr @szYear,addr @szMonth,addr @szDay
	invoke ModifyMenu,hMenu,@dwIDMBase,MF_BYCOMMAND,@dwIDMBase,addr @szBuffer
	sub	@dwMonth,100
	sub	@dwDay,100
	sub	@dwHour,100
	inc 	@dwIDMBase
	invoke wsprintf,addr @szBuffer,addr szTimeFormat4,@dwYear,@dwMonth,@dwDay
	invoke ModifyMenu,hMenu,@dwIDMBase,MF_BYCOMMAND,@dwIDMBase,addr @szBuffer
	inc 	@dwIDMBase
	invoke wsprintf,addr @szBuffer,addr szTimeFormat5,@dwYear,@dwMonth,@dwDay,addr @szWeek
	invoke ModifyMenu,hMenu,@dwIDMBase,MF_BYCOMMAND,@dwIDMBase,addr @szBuffer
	inc 	@dwIDMBase
	invoke wsprintf,addr @szBuffer,addr szTimeFormat6,@dwHour,addr @szMinute,addr @szSecond
	invoke ModifyMenu,hMenu,@dwIDMBase,MF_BYCOMMAND,@dwIDMBase,addr @szBuffer
	inc 	@dwIDMBase
	.if @dwHour > 12
		sub	@dwHour,12
	.endif
	invoke wsprintf,addr @szBuffer,addr szTimeFormat6,@dwHour,addr @szMinute,addr @szSecond
	invoke lstrcat,addr @szTime,addr @szBuffer
	invoke ModifyMenu,hMenu,@dwIDMBase,MF_BYCOMMAND,@dwIDMBase,addr @szTime
	ret
_ModifyTimeMenu		endp
;>>>>>>>>>>>>>获得Ini文件全路径>>>>>>>>>>>
_GetFilePath	proc
	invoke  GetWindowsDirectory,addr szBuffer1,sizeof szBuffer1
	mov	esi,offset szBuffer1
	mov 	ecx,offset szIniFileName

	;invoke  lstrlen,esi
	;.if	byte ptr [esi+eax-1] == '\'
	;	inc ecx
	;.endif

	invoke  lstrcat,esi,ecx
	ret
_GetFilePath	endp
;>>>>>>>>>>>>>>>>读文件列表并加到菜单>>>>>>>>>>>
_GetRecentlyFile 	proc
	
	invoke  _DeleteMenu
	invoke  _GetFilePath
	mov ebx,offset szKeyName1

⌨️ 快捷键说明

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