太子爷小说网 > 杂集电子书 > windows环境下32位汇编语言程序设计 >

第60节

windows环境下32位汇编语言程序设计-第60节

小说: windows环境下32位汇编语言程序设计 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的