WIN32汇编语言教程:第09章 通用控件 · 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_PASTE,MF_ENABLED
              .else
                         invoke EnableMenuItem,hMenu,IDM_PASTE,MF_GRAYED
              .endif
;********************************************************************
              invoke SendMessage,hWinEdit,EM_CANREDO,0,0
             .if    eax
                     invoke EnableMenuItem,hMenu,IDM_REDO,MF_ENABLED
             .else
                     invoke EnableMenuItem,hMenu,IDM_REDO,MF_GRAYED
              .endif
;********************************************************************
             invoke SendMessage,hWinEdit,EM_CANUNDO,0,0
             .if    eax
                     invoke EnableMenuItem,hMenu,IDM_UNDO,MF_ENABLED
             .else
                     invoke EnableMenuItem,hMenu,IDM_UNDO,MF_GRAYED
              .endif
;********************************************************************
             invoke GetWindowTextLength,hWinEdit
             .if    eax
                   invoke EnableMenuItem,hMenu,IDM_SELALL,MF_ENABLED
             .else
                     invoke EnableMenuItem,hMenu,IDM_SELALL,MF_GRAYED
              .endif
;********************************************************************
             invoke SendMessage,hWinEdit,EM_GETMODIFY,0,0
             .if    eax && hFile
                   invoke EnableMenuItem,hMenu,IDM_SAVE,MF_ENABLED
              .else
                    invoke EnableMenuItem,hMenu,IDM_SAVE,MF_GRAYED
             .endif
;********************************************************************
             .if    szFindText
                     invoke EnableMenuItem,hMenu,IDM_FINDNEXT,MF_ENABLED
                     invoke EnableMenuItem,hMenu,IDM_FINDPREV,MF_ENABLED
             .else
                     invoke EnableMenuItem,hMenu,IDM_FINDNEXT,MF_GRAYED
                     invoke EnableMenuItem,hMenu,IDM_FINDPREV,MF_GRAYED
              .endif
;********************************************************************
              ret
 
_SetStatus endp
;####################################################################
_Init      proc
              local  @stCf:CHARFORMAT
 
;********************************************************************
; 注册“查找”对话框消息,初始化“查找”对话框的结构
;********************************************************************
             push       hWinMain
             pop    stFind.hwndOwner
             invoke RegisterWindowMessage,addr FINDMSGSTRING
             mov    idFindMessage,eax
;********************************************************************
; 建立输出文本窗口
;********************************************************************
             invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassEdit,\
                     NULL,WS_CHILD OR WS_VISIBLE OR WS_VSCROLL \
                     OR WS_HSCROLL OR ES_MULTILINE or ES_NOHIDESEL,\
                     0,0,0,0,hWinMain,0,hInstance,NULL
             mov    hWinEdit,eax
            invoke SendMessage,hWinEdit,EM_SETTEXTMODE,TM_PLAINTEXT,0
             invoke RtlZeroMemory,addr @stCf,sizeof @stCf
              mov    @stCf.cbSize,sizeof @stCf
             mov    @stCf.yHeight,9 * 20
             mov    @stCf.dwMask,CFM_FACE or CFM_SIZE or CFM_BOLD
             invoke lstrcpy,addr @stCf.szFaceName,addr szFont
             invoke SendMessage,hWinEdit,EM_SETCHARFORMAT,0,addr @stCf
             invoke SendMessage,hWinEdit,EM_EXLIMITTEXT,0,-1
             ret
 
_Init      endp
;####################################################################
_Quit      proc
 
             invoke _CheckModify
              .if    eax
                     invoke DestroyWindow,hWinMain
                     invoke PostQuitMessage,NULL
                       .if    hFile

上页:第09章 通用控件 · 9.4 使用Richedit控件(2) 下页:第09章 通用控件 · 9.4 使用Richedit控件(4)

第09章 通用控件

版权所有 © 云南伯恩科技 证书:粤ICP备09170368号