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

📄 lion-tutorial35.htm

📁 内有一些代码
💻 HTM
📖 第 1 页 / 共 4 页
字号:
	LOCAL hOldRgn:DWORD	LOCAL RealRect:RECT	LOCAL pString:DWORD	LOCAL BufferSize:DWORD	LOCAL pt:POINT	.if uMsg==WM_PAINT		push edi		push esi		invoke HideCaret,hWnd		invoke CallWindowProc,OldWndProc,hWnd,uMsg,wParam,lParam		push eax		mov edi,offset ASMSyntaxArray		invoke GetDC,hWnd		mov hdc,eax		invoke SetBkMode,hdc,TRANSPARENT		invoke SendMessage,hWnd,EM_GETRECT,0,addr rect		invoke SendMessage,hWnd,EM_CHARFROMPOS,0,addr rect		invoke SendMessage,hWnd,EM_LINEFROMCHAR,eax,0		invoke SendMessage,hWnd,EM_LINEINDEX,eax,0		mov txtrange.chrg.cpMin,eax		mov FirstChar,eax		invoke SendMessage,hWnd,EM_CHARFROMPOS,0,addr rect.right		mov txtrange.chrg.cpMax,eax		push rect.left		pop RealRect.left		push rect.top		pop RealRect.top		push rect.right		pop RealRect.right		push rect.bottom		pop RealRect.bottom		invoke CreateRectRgn,RealRect.left,RealRect.top,RealRect.right,RealRect.bottom		mov hRgn,eax		invoke SelectObject,hdc,hRgn		mov hOldRgn,eax		invoke SetTextColor,hdc,CommentColor		lea eax,buffer		mov txtrange.lpstrText,eax		invoke SendMessage,hWnd,EM_GETTEXTRANGE,0,addr txtrange		.if eax&gt;0				mov esi,eax		; esi == size of the text					mov BufferSize,eax			push edi			push ebx			lea edi,buffer			mov edx,edi		; used as the reference point			mov ecx,esi			mov al,";"ScanMore:			repne scasb			je NextSkip			jmp NoMoreHitNextSkip:			dec edi			inc ecx			mov pString,edi			mov ebx,edi			sub ebx,edx			add ebx,FirstChar			mov txtrange.chrg.cpMin,ebx			push eax			mov al,0Dh			repne scasb			pop eaxHiliteTheComment:			.if ecx>0				mov byte ptr [edi-1],0			.endif			mov ebx,edi			sub ebx,edx			add ebx,FirstChar			mov txtrange.chrg.cpMax,ebx			pushad			mov edi,pString			mov esi,txtrange.chrg.cpMax			sub esi,txtrange.chrg.cpMin		; esi contains the length of the buffer			mov eax,esi			push edi			.while eax>0				.if byte ptr [edi]==9					mov byte ptr [edi],0				.endif				inc edi				dec eax			.endw			pop edi			.while esi>0				.if byte ptr [edi]!=0					invoke lstrlen,edi					push eax					mov ecx,edi					lea edx,buffer					sub ecx,edx					add ecx,FirstChar					.if RichEditVersion==3						invoke SendMessage,hWnd,EM_POSFROMCHAR,addr rect,ecx					.else						invoke SendMessage,hWnd,EM_POSFROMCHAR,ecx,0						mov ecx,eax						and ecx,0FFFFh						mov rect.left,ecx						shr eax,16						mov rect.top,eax					.endif					invoke DrawText,hdc,edi,-1,addr rect,0					pop eax					add edi,eax					sub esi,eax				.else					inc edi					dec esi				.endif						.endw			mov ecx,txtrange.chrg.cpMax			sub ecx,txtrange.chrg.cpMin			invoke RtlZeroMemory,pString,ecx			popad			.if ecx>0				jmp ScanMore			.endifNoMoreHit:			pop ebx			pop edi			mov ecx,BufferSize			lea esi,buffer			.while ecx>0				mov al,byte ptr [esi]				.if al==" " || al==0Dh || al=="/" || al=="," || al=="|" || al=="+" || al=="-" || al=="*" || al=="&" || al=="<" || al==">" || al=="=" || al=="(" || al==")" || al=="{" || al=="}" || al=="[" || al=="]" || al=="^" || al==":" || al==9					mov byte ptr [esi],0				.endif				dec ecx				inc esi			.endw			lea esi,buffer			mov ecx,BufferSize			.while ecx>0				mov al,byte ptr [esi]				.if al!=0					push ecx					invoke lstrlen,esi					push eax					mov edx,eax		; edx contains the length of the string					movzx eax,byte ptr [esi]					.if al>="A" && al<="Z"						sub al,"A"						add al,"a"					.endif					shl eax,2					add eax,edi		; edi contains the pointer to the WORDINFO pointer array					.if dword ptr [eax]!=0						mov eax,dword ptr [eax]						assume eax:ptr WORDINFO						.while eax!=0							.if edx==[eax].WordLen								pushad								invoke lstrcmpi,[eax].pszWord,esi								.if eax==0																	popad									mov ecx,esi									lea edx,buffer									sub ecx,edx									add ecx,FirstChar									pushad									.if RichEditVersion==3										invoke SendMessage,hWnd,EM_POSFROMCHAR,addr rect,ecx									.else										invoke SendMessage,hWnd,EM_POSFROMCHAR,ecx,0										mov ecx,eax										and ecx,0FFFFh										mov rect.left,ecx										shr eax,16										mov rect.top,eax									.endif									popad									mov edx,[eax].pColor									invoke SetTextColor,hdc,dword ptr [edx]																	invoke DrawText,hdc,esi,-1,addr rect,0									.break								.endif								popad							.endif							push [eax].NextLink							pop eax						.endw					.endif					pop eax					pop ecx					add esi,eax					sub ecx,eax				.else					inc esi					dec ecx				.endif			.endw		.endif		invoke SelectObject,hdc,hOldRgn		invoke DeleteObject,hRgn		invoke SelectObject,hdc,hOldFont		invoke ReleaseDC,hWnd,hdc		invoke ShowCaret,hWnd		pop eax		pop esi		pop edi		ret	.elseif uMsg==WM_CLOSE		invoke SetWindowLong,hWnd,GWL_WNDPROC,OldWndProc			.else		invoke CallWindowProc,OldWndProc,hWnd,uMsg,wParam,lParam		ret	.endifNewRichEditProc endpWndProc proc hWnd:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD	LOCAL ofn:OPENFILENAME	LOCAL buffer[256]:BYTE	LOCAL editstream:EDITSTREAM	LOCAL hFile:DWORD	LOCAL hPopup:DWORD	LOCAL pt:POINT	LOCAL chrg:CHARRANGE	.if uMsg==WM_CREATE		invoke CreateWindowEx,WS_EX_CLIENTEDGE,addr RichEditClass,0,WS_CHILD or WS_VISIBLE or ES_MULTILINE or WS_VSCROLL or WS_HSCROLL or ES_NOHIDESEL,\				CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,hWnd,RichEditID,hInstance,0		mov hwndRichEdit,eax		invoke SendMessage,hwndRichEdit,EM_SETTYPOGRAPHYOPTIONS,TO_SIMPLELINEBREAK,TO_SIMPLELINEBREAK		invoke SendMessage,hwndRichEdit,EM_GETTYPOGRAPHYOPTIONS,1,1		.if eax==0		; means this message is not processed			mov RichEditVersion,2		.else			mov RichEditVersion,3			invoke SendMessage,hwndRichEdit,EM_SETEDITSTYLE,SES_EMULATESYSEDIT,SES_EMULATESYSEDIT		.endif		invoke SetWindowLong,hwndRichEdit,GWL_WNDPROC, addr NewRichEditProc		mov OldWndProc,eax		invoke SendMessage,hwndRichEdit,EM_LIMITTEXT,-1,0		invoke SetColor		invoke SendMessage,hwndRichEdit,EM_SETMODIFY,FALSE,0		invoke SendMessage,hwndRichEdit,EM_SETEVENTMASK,0,ENM_MOUSEEVENTS		invoke SendMessage,hwndRichEdit,EM_EMPTYUNDOBUFFER,0,0	.elseif uMsg==WM_NOTIFY		push esi		mov esi,lParam		assume esi:ptr NMHDR		.if [esi].code==EN_MSGFILTER			assume esi:ptr MSGFILTER			.if [esi].msg==WM_RBUTTONDOWN				invoke GetMenu,hWnd				invoke GetSubMenu,eax,1				mov hPopup,eax				invoke PrepareEditMenu,hPopup				mov edx,[esi].lParam				mov ecx,edx				and edx,0FFFFh				shr ecx,16				mov pt.x,edx				mov pt.y,ecx				invoke ClientToScreen,hWnd,addr pt				invoke TrackPopupMenu,hPopup,TPM_LEFTALIGN or TPM_BOTTOMALIGN,pt.x,pt.y,NULL,hWnd,NULL			.endif		.endif		pop esi	.elseif uMsg==WM_INITMENUPOPUP		mov eax,lParam		.if ax==0		; file menu						.if FileOpened==TRUE	; a file is already opened				invoke EnableMenuItem,wParam,IDM_OPEN,MF_GRAYED				invoke EnableMenuItem,wParam,IDM_CLOSE,MF_ENABLED				invoke EnableMenuItem,wParam,IDM_SAVE,MF_ENABLED				invoke EnableMenuItem,wParam,IDM_SAVEAS,MF_ENABLED			.else				invoke EnableMenuItem,wParam,IDM_OPEN,MF_ENABLED				invoke EnableMenuItem,wParam,IDM_CLOSE,MF_GRAYED				invoke EnableMenuItem,wParam,IDM_SAVE,MF_GRAYED				invoke EnableMenuItem,wParam,IDM_SAVEAS,MF_GRAYED			.endif		.elseif ax==1	; edit menu			invoke PrepareEditMenu,wParam		.elseif ax==2		; search menu bar			.if FileOpened==TRUE				invoke EnableMenuItem,wParam,IDM_FIND,MF_ENABLED				invoke EnableMenuItem,wParam,IDM_FINDNEXT,MF_ENABLED				invoke EnableMenuItem,wParam,IDM_FINDPREV,MF_ENABLED				invoke EnableMenuItem,wParam,IDM_REPLACE,MF_ENABLED				invoke EnableMenuItem,wParam,IDM_GOTOLINE,MF_ENABLED			.else				invoke EnableMenuItem,wParam,IDM_FIND,MF_GRAYED				invoke EnableMenuItem,wParam,IDM_FINDNEXT,MF_GRAYED				invoke EnableMenuItem,wParam,IDM_FINDPREV,MF_GRAYED				invoke EnableMenuItem,wParam,IDM_REPLACE,MF_GRAYED				invoke EnableMenuItem,wParam,IDM_GOTOLINE,MF_GRAYED			.endif		.endif	.elseif uMsg==WM_COMMAND		.if lParam==0		; menu commands			mov eax,wParam			.if ax==IDM_OPEN				invoke RtlZeroMemory,addr ofn,sizeof ofn				mov ofn.lStructSize,sizeof ofn				push hWnd				pop ofn.hwndOwner				push hInstance				pop ofn.hInstance				mov ofn.lpstrFilter,offset ASMFilterString				mov ofn.lpstrFile,offset FileName				mov byte ptr [FileName],0				mov ofn.nMaxFile,sizeof FileName				mov ofn.Flags,OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST				invoke GetOpenFileName,addr ofn				.if eax!=0					invoke CreateFile,addr FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0					.if eax!=INVALID_HANDLE_VALUE						mov hFile,eax						mov editstream.dwCookie,eax						mov editstream.pfnCallback,offset StreamInProc						invoke SendMessage,hwndRichEdit,EM_STREAMIN,SF_TEXT,addr editstream						invoke SendMessage,hwndRichEdit,EM_SETMODIFY,FALSE,0						invoke CloseHandle,hFile						mov FileOpened,TRUE					.else						invoke MessageBox,hWnd,addr OpenFileFail,addr AppName,MB_OK or MB_ICONERROR					.endif				.endif			.elseif ax==IDM_CLOSE				invoke CheckModifyState,hWnd				.if eax==TRUE					invoke SetWindowText,hwndRichEdit,0					mov FileOpened,FALSE				.endif			.elseif ax==IDM_SAVE				invoke CreateFile,addr FileName,GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0				.if eax!=INVALID_HANDLE_VALUE@@:									mov hFile,eax					mov editstream.dwCookie,eax					mov editstream.pfnCallback,offset StreamOutProc					invoke SendMessage,hwndRichEdit,EM_STREAMOUT,SF_TEXT,addr editstream					invoke SendMessage,hwndRichEdit,EM_SETMODIFY,FALSE,0					invoke CloseHandle,hFile				.else					invoke MessageBox,hWnd,addr OpenFileFail,addr AppName,MB_OK or MB_ICONERROR				.endif			.elseif ax==IDM_COPY				invoke SendMessage,hwndRichEdit,WM_COPY,0,0			.elseif ax==IDM_CUT				invoke SendMessage,hwndRichEdit,WM_CUT,0,0			.elseif ax==IDM_PASTE				invoke SendMessage,hwndRichEdit,WM_PASTE,0,0			.elseif ax==IDM_DELETE				invoke SendMessage,hwndRichEdit,EM_REPLACESEL,TRUE,0			.elseif ax==IDM_SELECTALL				mov chrg.cpMin,0				mov chrg.cpMax,-1				invoke SendMessage,hwndRichEdit,EM_EXSETSEL,0,addr chrg			.elseif ax==IDM_UNDO				invoke SendMessage,hwndRichEdit,EM_UNDO,0,0			.elseif ax==IDM_REDO				invoke SendMessage,hwndRichEdit,EM_REDO,0,0			.elseif ax==IDM_OPTION				invoke DialogBoxParam,hInstance,IDD_OPTIONDLG,hWnd,addr OptionProc,0			.elseif ax==IDM_SAVEAS				invoke RtlZeroMemory,addr ofn,sizeof ofn				mov ofn.lStructSize,sizeof ofn				push hWnd				pop ofn.hwndOwner				push hInstance				pop ofn.hInstance				mov ofn.lpstrFilter,offset ASMFilterString				mov ofn.lpstrFile,offset AlternateFileName				mov byte ptr [AlternateFileName],0				mov ofn.nMaxFile,sizeof AlternateFileName				mov ofn.Flags,OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST				invoke GetSaveFileName,addr ofn				.if eax!=0					invoke CreateFile,addr AlternateFileName,GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0					.if eax!=INVALID_HANDLE_VALUE						jmp @B					.endif				.endif			.elseif ax==IDM_FIND				.if hSearch==0					invoke CreateDialogParam,hInstance,IDD_FINDDLG,hWnd,addr SearchProc,0				.endif			.elseif ax==IDM_REPLACE				.if hSearch==0					invoke CreateDialogParam,hInstance,IDD_REPLACEDLG,hWnd,addr ReplaceProc,0				.endif			.elseif ax==IDM_GOTOLINE				.if hSearch==0					invoke CreateDialogParam,hInstance,IDD_GOTODLG,hWnd,addr GoToProc,0				.endif			.elseif ax==IDM_FINDNEXT				invoke lstrlen,addr FindBuffer				.if eax!=0					invoke SendMessage,hwndRichEdit,EM_EXGETSEL,0,addr findtext.chrg					mov eax,findtext.chrg.cpMin					.if eax!=findtext.chrg.cpMax						push findtext.chrg.cpMax						pop findtext.chrg.cpMin					.endif					mov findtext.chrg.cpMax,-1					mov findtext.lpstrText,offset FindBuffer					invoke SendMessage,hwndRichEdit,EM_FINDTEXTEX,FR_DOWN,addr findtext					.if eax!=-1						invoke SendMessage,hwndRichEdit,EM_EXSETSEL,0,addr findtext.chrgText					.endif				.endif			.elseif ax==IDM_FINDPREV				invoke lstrlen,addr FindBuffer				.if eax!=0					invoke SendMessage,hwndRichEdit,EM_EXGETSEL,0,addr findtext.chrg					mov findtext.chrg.cpMax,0					mov findtext.lpstrText,offset FindBuffer					invoke SendMessage,hwndRichEdit,EM_FINDTEXTEX,0,addr findtext					.if eax!=-1						invoke SendMessage,hwndRichEdit,EM_EXSETSEL,0,addr findtext.chrgText					.endif				.endif			.elseif ax==IDM_EXIT

⌨️ 快捷键说明

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