windows环境下32位汇编语言程序设计-第60节
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
9。4 使用Richedit控件(2)
。data
stFind FINDREPLACE
nst
FINDMSGSTRING db 'mdlg_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
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; 代码段
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
de
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; 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
来源:电子工业出版社 作者:罗云彬 上一页 回书目 下一页
上一页 回书目 下一页
第9章 通用控件
9。4 使用Richedit控件(3)
。if stFind。Flags & FR_DOWN
push @stFindText。chrg。cpMax
pop @stFindText。chrg。cpMin
。endif
mov @stFindText。chrg。cpMax;…1
;********************************************************************
; 设置查找选项
;********************************************************************
mov @stFindText。lpstrText;offset szFindText
mov ecx;stFind。Flags
and ecx;FR_MATCHCASE or FR_DOWN or FR_WHOLEWORD
;********************************************************************
; 查找并把光标设置到找到的文本上
;********************************************************************
invoke SendMessage;hWinEdit;EM_FINDTEXTEX;
ecx;addr @stFindText
。if eax …1
mov ecx;hWinMain
。if hFindDialog
mov ecx;hFindDialog
。endif
invoke MessageBox;ecx;addr szNotFound;NULL;
MB_OK or MB_ICONINFORMATION
ret
。endif
invoke SendMessage;hWinEdit;EM_EXSETSEL;
0;addr @stFindText。chrgText
invoke SendMessage;hWinEdit;EM_SCROLLCARET;NULL;NULL
ret
_FindText endp
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; 根据情况改变菜单项状态
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
_SetStatus proc
local @stRange:CHARRANGE
invoke SendMessage;hWinEdit;EM_EXGETSEL;0;addr @stRange
;********************************************************************
mov eax;@stRange。cpMin
。if eax @stRange。cpMax
invoke EnableMenuItem;hMenu;IDM_COPY;MF_GRAYED
invoke EnableMenuItem;hMenu;IDM_CUT;MF_GRAYED
。else
invoke EnableMenuItem;hMenu;IDM_COPY;MF_ENABLED
invoke EnableMenuItem;hMenu;IDM_CUT;MF_ENABLED
。endif
;********************************************************************
invoke SendMessage;hWinEdit;EM_CANPASTE;0;0
。if eax
invoke EnableMenuItem;hMenu;IDM_PAS