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