WIN32汇编语言教程:第09章 通用控件 · 9.4 使用Richedit控件(2)
.data stFind FINDREPLACE <sizeof FINDREPLACE,0,0,FR_DOWN,szFindText,\ 0,sizeof szFindText,0,0,0,0> .const FINDMSGSTRING db 'commdlg_FindReplace',0 SzClassName db 'Wordpad',0 szCaptionMain db '记事本',0 szDllEdit db 'RichEd20.dll',0 szClassEdit db 'RichEdit20A',0 szNotFound db '字符串未找到!',0 szFilter db 'Text Files(*.txt)',0,'*.txt',0 db 'All Files(*.*)',0,'*.*',0,0 szDefaultExt db 'txt',0 szErrOpenFile db '无法打开文件!',0 szModify db '文件已修改,是否保存?',0 szFont db '宋体',0 ;#################################################################### ; 代码段 ;#################################################################### .code ;#################################################################### ; Richedit的流操作 ;#################################################################### _ProcStream proc uses ebx edi esi _dwCookie,_lpBuffer,_dwBytes,_lpBytes .if _dwCookie invoke ReadFile,hFile,_lpBuffer,_dwBytes,_lpBytes,0 .else invoke WriteFile,hFile,_lpBuffer,_dwBytes,_lpBytes,0 .endif xor eax,eax ret _ProcStream endp ;#################################################################### ; 保存文件,如果没有打开或创建文件则调用“另存为”子程序 ;#################################################################### _SaveFile proc local @stES:EDITSTREAM mov @stES.dwCookie,FALSE mov @stES.dwError,NULL mov @stES.pfnCallback,offset _ProcStream invoke SendMessage,hWinEdit,EM_STREAMOUT,SF_TEXT,addr @stES invoke SendMessage,hWinEdit,EM_SETMODIFY,FALSE,0 ret _SaveFile endp ;#################################################################### ; 打开及输入文件 ;#################################################################### _OpenFile proc local @stOF:OPENFILENAME local @stES:EDITSTREAM ;******************************************************************** ; 显示“打开文件”对话框 ;******************************************************************** invoke RtlZeroMemory,addr @stOF,sizeof @stOF mov @stOF.lStructSize,sizeof @stOF push hWinMain pop @stOF.hwndOwner mov @stOF.lpstrFilter,offset szFilter mov @stOF.lpstrFile,offset szFileName mov @stOF.nMaxFile,MAX_PATH mov @stOF.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST mov @stOF.lpstrDefExt,offset szDefaultExt invoke GetOpenFileName,addr @stOF .if eax ;******************************************************************** ; 创建文件 ;******************************************************************** invoke CreateFile,addr szFileName,GENERIC_READ or GENERIC_WRITE,\ FILE_SHARE_READ or FILE_SHARE_WRITE,0,OPEN_EXISTING,\ FILE_ATTRIBUTE_NORMAL,0 .if eax == INVALID_HANDLE_VALUE invoke MessageBox,hWinMain,addr szErrOpenFile,\ NULL,MB_OK or MB_ICONSTOP ret .endif push eax .if hFile invoke CloseHandle,hFile .endif pop eax mov hFile,eax ;******************************************************************** ; 读入文件 ;******************************************************************** mov @stES.dwCookie,TRUE mov @stES.dwError,NULL mov @stES.pfnCallback,offset _ProcStream invoke SendMessage,hWinEdit,EM_STREAMIN,\ SF_TEXT,addr @stES invoke SendMessage,hWinEdit,EM_SETMODIFY,FALSE,0 .endif ret _OpenFile endp ;#################################################################### ; 允许继续操作则返回TRUE ;#################################################################### _CheckModify proc local @dwReturn mov @dwReturn,TRUE invoke SendMessage,hWinEdit,EM_GETMODIFY,0,0 .if eax && hFile invoke MessageBox,hWinMain,addr szModify,\ addr szCaptionMain,\ MB_YESNOCANCEL or MB_ICONQUESTION .if eax == IDYES call _SaveFile .elseif eax == IDCANCEL mov @dwReturn,FALSE .endif .endif mov eax,@dwReturn ret _CheckModify endp ;#################################################################### ; 查找文字 ;#################################################################### _FindText proc local @stFindText:FINDTEXTEX ;******************************************************************** ; 设置查找范围 ;******************************************************************** invoke SendMessage,hWinEdit,EM_EXGETSEL,\ 0,addr @stFindText.chrg
上页:第09章 通用控件 · 9.4 使用Richedit控件(1) 下页:第09章 通用控件 · 9.4 使用Richedit控件(3)
第09章 通用控件
版权所有 © 云南伯恩科技 证书:粤ICP备09170368号