WIN32汇编语言教程:第09章 通用控件 · 9.4 使用Richedit控件(4)
invoke CloseHandle,hFile .endif .endif ret _Quit endp ;#################################################################### _ProcWinMain proc uses ebx edi esi hWnd,uMsg,wParam,lParam local @stRange:CHARRANGE local @stRect:RECT mov eax,uMsg .if eax == WM_SIZE invoke GetClientRect,hWinMain,addr @stRect invoke MoveWindow,hWinEdit,0,0,\ @stRect.right,@stRect.bottom,TRUE ;******************************************************************** ; 处理菜单、加速键及工具栏消息 ;******************************************************************** .elseif eax == WM_COMMAND mov eax,wParam movzx eax,ax .if eax == IDM_OPEN invoke _CheckModify .if eax call _OpenFile .endif .elseif eax == IDM_SAVE call _SaveFile .elseif eax == IDM_EXIT invoke _Quit .elseif eax == IDM_UNDO invoke SendMessage,hWinEdit,EM_UNDO,0,0 .elseif eax == IDM_REDO invoke SendMessage,hWinEdit,EM_REDO,0,0 .elseif eax == IDM_SELALL mov @stRange.cpMin,0 mov @stRange.cpMax,-1 invoke SendMessage,hWinEdit,EM_EXSETSEL,\ 0,addr @stRange .elseif eax == IDM_COPY invoke SendMessage,hWinEdit,WM_COPY,0,0 .elseif eax == IDM_CUT invoke SendMessage,hWinEdit,WM_CUT,0,0 .elseif eax == IDM_PASTE invoke SendMessage,hWinEdit,WM_PASTE,0,0 .elseif eax == IDM_FIND and stFind.Flags,not FR_DIALOGTERM invoke FindText,addr stFind .if eax mov hFindDialog,eax .endif .elseif eax == IDM_FINDPREV and stFind.Flags,not FR_DOWN invoke _FindText .elseif eax == IDM_FINDNEXT or stFind.Flags,FR_DOWN invoke _FindText .endif ;******************************************************************** .elseif eax == WM_INITMENU call _SetStatus .elseif eax == idFindMessage .if stFind.Flags & FR_DIALOGTERM mov hFindDialog,0 .else invoke _FindText .endif ;******************************************************************** .elseif eax == WM_ACTIVATE mov eax,wParam .if (ax == WA_CLICKACTIVE ) || (ax == WA_ACTIVE) invoke SetFocus,hWinEdit .endif ;******************************************************************** .elseif eax == WM_CREATE push hWnd pop hWinMain invoke _Init ;******************************************************************** .elseif eax == WM_CLOSE call _Quit ;******************************************************************** .else invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .endif ;******************************************************************** xor eax,eax ret _ProcWinMain endp ;#################################################################### _WinMain proc local @stWndClass:WNDCLASSEX local @stMsg:MSG local @hAccelerator,@hRichEdit invoke LoadLibrary,offset szDllEdit mov @hRichEdit,eax invoke GetModuleHandle,NULL mov hInstance,eax invoke LoadMenu,hInstance,IDM_MAIN mov hMenu,eax invoke LoadAccelerators,hInstance,IDA_MAIN mov @hAccelerator,eax ;******************************************************************** ; 注册窗口类 ;******************************************************************** invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass invoke LoadIcon,hInstance,ICO_MAIN mov @stWndClass.hIcon,eax mov @stWndClass.hIconSm,eax invoke LoadCursor,0,IDC_ARROW mov @stWndClass.hCursor,eax push hInstance pop @stWndClass.hInstance mov @stWndClass.cbSize,sizeof WNDCLASSEX mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW mov @stWndClass.lpfnWndProc,offset _ProcWinMain mov @stWndClass.hbrBackground,COLOR_BTNFACE+1 mov @stWndClass.lpszClassName,offset szClassName invoke RegisterClassEx,addr @stWndClass ;******************************************************************** ; 建立并显示窗口 ;******************************************************************** invoke CreateWindowEx,NULL,\ offset szClassName,offset szCaptionMain,\ WS_OVERLAPPEDWINDOW,\ CW_USEDEFAULT,CW_USEDEFAULT,700,500,\ NULL,hMenu,hInstance,NULL mov hWinMain,eax
上页:第09章 通用控件 · 9.4 使用Richedit控件(3) 下页:第09章 通用控件 · 9.4 使用Richedit控件(5)
第09章 通用控件
版权所有 © 云南伯恩科技 证书:粤ICP备09170368号