2w网站2w网站建设建设最近发生的新闻事件
2026/4/18 5:22:49 网站建设 项目流程
2w网站2w网站建设建设,最近发生的新闻事件,网站一键生成wap,网站建设服务文案在读这篇教程之前先提醒你#xff0c;这是一个复杂的主题#xff1a;不适合初学者。这是最后一篇RichEdit 控件教程。 下载 例子程序. Theory 语法高亮显示对那些编写文本编辑器的人来说是一个热点主题。最好的解决方法#xff08;我自己认为的#xff09;是编写一个定制…在读这篇教程之前先提醒你这是一个复杂的主题不适合初学者。这是最后一篇RichEdit 控件教程。下载 例子程序.Theory语法高亮显示对那些编写文本编辑器的人来说是一个热点主题。最好的解决方法我自己认为的是编写一个定制的Edit控件这也是很多商业软件所使用的方法。然而对于那些没什么时间来编写这么一个控件的人来说次策就是改写现有的控件使之符合我们的需要。让我们看一看到底 RichEdit 控件提供了什么功能来帮助我们实现语法高亮。现在我应该声明下面的方法不是一个“正确”方法我只是给你们指出那些缺陷。 RichEdit 控件提供了EM_SETCHARFORMAT 消息是你可以用来改变正文颜色。乍一看这个消息好象是一个完美的解决方法(我之所以知道是因为我也是其中的一个受骗者)。然而靠近看看将会发现有几个不合意的地方EM_SETCHARFORMAT 仅仅对选定的正文或者控件中所有的正文有影响。如果你想改变正文颜色高亮显示某一个特定的词你必须先选定它。EM_SETCHARFORMAT 执行速度很慢。RichEdit 控件中的插入点位置处理也有一点问题。通过上面的讨论你可以看到使用 EM_SETCHARFORMAT 是一个错误的选择我会给你演示 相当正确 的选择。我现在使用的方法是“即时语法高亮”我只高亮显示可见部分的正文。因此高亮显示的速度跟文件的大小根本是无关的。无论是多大的文件在某一时刻只有一小部分是可见的。怎么样实现答案很简单子类化RichEdit控件并在你自己的窗口处理函数中处理 WM_PAINT 消息。当收到 WM_PAINT 消息时它调用RichEdit控件原来的窗口过程让它正常地更新屏幕。之后我们将要高亮显示的词用不同的颜色来覆盖掉。当然了路也不是这么容易走的仍然有两个次要的问题需要矫正不过上面的方法工作起来很好。显示速度令人很满意。现在让我们集中在细节上。子类化处理是很简单的不需要很多注意力。真正复杂的部分是我们必须找到一个快速的方法来搜索那些需要高亮的词。更复杂的那些在某个注释块里的 不 需要高亮显示的词。我使用的方法可能不是最好的但是它工作的很好。我敢肯定你可以找到更快的方法。不管怎么说先看看我下面的方法我创建一个有256元素的双字(DWORD)数组全部初始化为0。每一个元素对应一个可能的 ASCII 字符数组名叫 ASMSyntaxArray。例如第21个元素代表ASCII 20h (空格字符)。我将他们作为快速查询表使用譬如假定我有一个词 include我从词中分离出第一个字符 (i) ,并以响应索引查找数组。如果该元素为0我就立刻知道需要高亮的词是没有以 i 开头的。如果该元素非0它就包含一个指针指向一个 WORDINFO 结构的链表。里面包含了需要高亮词的信息。我读取需要高亮显示的词并为每个词创建一个 WORDINFO 结构。WORDINFO structWordLen dd ? ; 词的长度用来快速比较pszWord dd ? ; 词的指针pColor dd ? ; 用来高亮显示的颜色所在的DWORD的指针NextLink dd ? ; 下一个 WORDINFO 结构WORDINFO ends正如你所看到的我使用词的长度来作为第二个快速比较方法。如果词中的第一个字符匹配后我们下一个比较的是词的才长度。ASMSyntaxArray 中的每一个元素包含了一个指针指向一个相关的WORDINFO 数组.例如代表字符 i 的元素将会包含一个指向以i开头的词的链表。 pColor 成员指向一个DWORD,包含用来做高亮显示该词的颜色值。pszWord 指向要高亮显示的词。是小写形式的。链表的内存是从堆heap)中分配的速度快容易清除也就是说根本不用清楚。高亮词列表保存在文件 wordfile.txt中我通过 GetPrivateProfileString API 函数来访问。我提供了多达10种不同的语法颜色从 C1 到 C10。颜色数组名叫 ASMColorArray。每一个 WORDINFO 结构的 pColor 成员都指向 ASMColorArray 中的某一个元素。因此闲时很容易改变语法颜色你只需要改变 ASMColorArray 中的元素的值这样所有使用那种颜色高亮的词就立刻使用新颜色显示。例子.386.model flat,stdcalloption casemap:noneinclude \masm32\include\windows.incinclude \masm32\include\user32.incinclude \masm32\include\comdlg32.incinclude \masm32\include\gdi32.incinclude \masm32\include\kernel32.incincludelib \masm32\lib\gdi32.libincludelib \masm32\lib\comdlg32.libincludelib \masm32\lib\user32.libincludelib \masm32\lib\kernel32.libWinMain proto :DWORD,:DWORD,:DWORD,:DWORDWORDINFO structWordLen dd ? ; 词的长度用来进行快速比较pszWord dd ? ; 词的指针pColor dd ? ; 指向某个DWORD里面包含用来高亮显示词的颜色值。NextLink dd ? ; 指向下一个 WORDINFO 结构WORDINFO ends.constIDR_MAINMENU equ 101IDM_OPEN equ 40001IDM_SAVE equ 40002IDM_CLOSE equ 40003IDM_SAVEAS equ 40004IDM_EXIT equ 40005IDM_COPY equ 40006IDM_CUT equ 40007IDM_PASTE equ 40008IDM_DELETE equ 40009IDM_SELECTALL equ 40010IDM_OPTION equ 40011IDM_UNDO equ 40012IDM_REDO equ 40013IDD_OPTIONDLG equ 101IDC_BACKCOLORBOX equ 1000IDC_TEXTCOLORBOX equ 1001IDR_MAINACCEL equ 105IDD_FINDDLG equ 102IDD_GOTODLG equ 103IDD_REPLACEDLG equ 104IDC_FINDEDIT equ 1000IDC_MATCHCASE equ 1001IDC_REPLACEEDIT equ 1001IDC_WHOLEWORD equ 1002IDC_DOWN equ 1003IDC_UP equ 1004IDC_LINENO equ 1005IDM_FIND equ 40014IDM_FINDNEXT equ 40015IDM_REPLACE equ 40016IDM_GOTOLINE equ 40017IDM_FINDPREV equ 40018RichEditID equ 300.dataClassName db IczEditClass,0AppName db IczEdit version 3.0,0RichEditDLL db riched20.dll,0RichEditClass db RichEdit20A,0NoRichEdit db Cannot find riched20.dll,0ASMFilterString db ASM Source code (*.asm),0,*.asm,0db All Files (*.*),0,*.*,0,0OpenFileFail db Cannot open the file,0WannaSave db The data in the control is modified. Want to save it?,0FileOpened dd FALSEBackgroundColor dd 0FFFFFFh ; 缺省为白色TextColor dd 0 ; 缺省为黑色WordFileName db \wordfile.txt,0ASMSection db ASSEMBLY,0C1Key db C1,0C2Key db C2,0C3Key db C3,0C4Key db C4,0C5Key db C5,0C6Key db C6,0C7Key db C7,0C8Key db C8,0C9Key db C9,0C10Key db C10,0ZeroString db 0ASMColorArray dd 0FF0000h,0805F50h,0FFh,666F00h,44F0h,5F8754h,4 dup(0FF0000h)CommentColor dd 808000h.data?hInstance dd ?hRichEdit dd ?hwndRichEdit dd ?FileName db 256 dup(?)AlternateFileName db 256 dup(?)CustomColors dd 16 dup(?)FindBuffer db 256 dup(?)ReplaceBuffer db 256 dup(?)uFlags dd ?findtext FINDTEXTEX ASMSyntaxArray dd 256 dup(?)hSearch dd ? ; 搜索/替换对话框的句柄hAccel dd ?hMainHeap dd ? ; 堆的句柄OldWndProc dd ?RichEditVersion dd ?.codestart:mov byte ptr [FindBuffer],0mov byte ptr [ReplaceBuffer],0invoke GetModuleHandle, NULLmov hInstance,eaxinvoke LoadLibrary,addr RichEditDLL.if eax!0mov hRichEdit,eaxinvoke GetProcessHeapmov hMainHeap,eaxcall FillHiliteInfoinvoke WinMain, hInstance,0,0, SW_SHOWDEFAULTinvoke FreeLibrary,hRichEdit.elseinvoke MessageBox,0,addr NoRichEdit,addr AppName,MB_OK or MB_ICONERROR.endifinvoke ExitProcess,eaxWinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORDLOCAL wc:WNDCLASSEXLOCAL msg:MSGLOCAL hwnd:DWORDmov wc.cbSize,SIZEOF WNDCLASSEXmov wc.style, CS_HREDRAW or CS_VREDRAWmov wc.lpfnWndProc, OFFSET WndProcmov wc.cbClsExtra,NULLmov wc.cbWndExtra,NULLpush hInstpop wc.hInstancemov wc.hbrBackground,COLOR_WINDOW1mov wc.lpszMenuName,IDR_MAINMENUmov wc.lpszClassName,OFFSET ClassNameinvoke LoadIcon,NULL,IDI_APPLICATIONmov wc.hIcon,eaxmov wc.hIconSm,eaxinvoke LoadCursor,NULL,IDC_ARROWmov wc.hCursor,eaxinvoke RegisterClassEx, addr wcINVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\hInst,NULLmov hwnd,eaxinvoke ShowWindow, hwnd,SW_SHOWNORMALinvoke UpdateWindow, hwndinvoke LoadAccelerators,hInstance,IDR_MAINACCELmov hAccel,eax.while TRUEinvoke GetMessage, ADDR msg,0,0,0.break .if (!eax)invoke IsDialogMessage,hSearch,addr msg.if eaxFALSEinvoke TranslateAccelerator,hwnd,hAccel,addr msg.if eax0invoke TranslateMessage, ADDR msginvoke DispatchMessage, ADDR msg.endif.endif.endwmov eax,msg.wParamretWinMain endpStreamInProc proc hFile:DWORD,pBuffer:DWORD, NumBytes:DWORD, pBytesRead:DWORDinvoke ReadFile,hFile,pBuffer,NumBytes,pBytesRead,0xor eax,1retStreamInProc endpStreamOutProc proc hFile:DWORD,pBuffer:DWORD, NumBytes:DWORD, pBytesWritten:DWORDinvoke WriteFile,hFile,pBuffer,NumBy

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询