📄 encyclopedia.asm
字号:
.386
.model flat,stdcall
option casemap:none
include Encyclopedia.inc
include MYMAC.INC
include debug.inc
includelib debug.lib
include db.inc
include statusbar.inc
include hComboTableName.inc
include buttons.inc
include list.inc
include filter.asm
include addnew.asm
include edit.asm
include control.asm
.code
start:
invoke exist,SADD("wordlist.mdb")
.if !eax
MyDebug "找不到词库文件wordlist.mdb,程序即将退出!!!"
invoke ExitProcess,eax
.endif
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke InitCommonControls
invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invoke ExitProcess,eax
WinMain proc uses esi hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL @hAccelerator:dword
mov wc.cbSize,sizeof WNDCLASSEX
mov wc.style,CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc,offset WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,DLGWINDOWEXTRA
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszMenuName,NULL ;IDM_MENU
mov wc.lpszClassName,offset ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx,addr wc
invoke CreateDialogParam,hInstance,IDD_DIALOG1,NULL,addr WndProc,NULL
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd
invoke LoadAccelerators,hInstance,20000
mov @hAccelerator,eax
.while TRUE
invoke GetMessage,addr msg,NULL,0,0
.BREAK .if !eax
invoke TranslateAccelerator,hWnd,@hAccelerator,addr msg
mov esi,eax
invoke IsDialogMessage, hWnd, ADDR msg
.if !esi && !eax
invoke TranslateMessage,addr msg
invoke DispatchMessage,addr msg
.endif
.endw
mov eax,msg.wParam
ret
WinMain endp
WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
mov eax,uMsg
.if eax==WM_COMMAND
.if lParam == 0
mov eax,wParam
movzx eax,ax
.if eax ==10001 ;f1
invoke DialogBoxParam,NULL,IDD_DLG_FILTER,NULL,addr FilterDlgProc,NULL
.elseif eax==10002 ;f2
invoke DialogBoxParam,NULL,IDD_DLG_ADDNEW,NULL,addr AddNewDlgProc,NULL
.elseif eax==10003 ;f3
invoke DialogBoxParam,NULL,IDD_DLG_EDIT,NULL,addr EditDlgProc,NULL
.elseif eax==10004 ;f4
invoke ButtonDelete,hWin
.elseif eax==10005 ;f5
invoke DialogBoxParam,NULL,IDD_DLG_CONTROL,NULL,addr ControlDlgProc,NULL
.endif
.endif
mov edx,wParam
movzx eax,dx
shr edx,16
.if edx==BN_CLICKED
.if eax==IDC_BTN_SEARCH
invoke DialogBoxParam,NULL,IDD_DLG_FILTER,NULL,addr FilterDlgProc,NULL
.elseif eax==IDC_BTN_ADD
invoke DialogBoxParam,NULL,IDD_DLG_ADDNEW,NULL,addr AddNewDlgProc,NULL
.elseif eax==IDC_BTN_EDIT
invoke DialogBoxParam,NULL,IDD_DLG_EDIT,NULL,addr EditDlgProc,NULL
.elseif eax==IDC_BTN_DEL
invoke ButtonDelete,hWin
.elseif eax==IDC_BTN_MAIN
invoke DialogBoxParam,NULL,IDD_DLG_CONTROL,NULL,addr ControlDlgProc,NULL
.elseif eax==IDCANCEL
;Msg AppName
invoke GetWindowTextLength,hEditInput
.if eax
invoke SetWindowText,hEditInput,0
.else
INVOKE ShowWindow,hWin,SW_MINIMIZE
.endif
.endif
.endif
mov eax,wParam
.if ax==IDC_EDT_INPUT
shr eax,16
.if eax==EN_UPDATE
Invoke DoSearch,hWin
.elseif eax==EN_SETFOCUS
invoke StatusBarSetIndexText,0,SADD("输入不超过36个字符;接收通配符*和?;支持Up,Down,PageUp,PageDown键")
.endif
.elseif ax==IDC_CBO
shr eax,16
.if eax==CBN_SETFOCUS
invoke StatusBarSetIndexText,0,SADD("显示当前词库.")
.elseif eax==CBN_SELCHANGE
;改变listbox的内容
invoke SetListBox,hWin
.endif
.elseif ax==IDC_LST1
shr eax,16
.if eax==LBN_SELCHANGE || eax==LB_SETCURSEL
invoke DisplayDetail,hWin
.elseif eax==LBN_SETFOCUS
invoke StatusBarSetIndexText,0,SADD("单击、按键(Up,Down,PageUp,PageDown)来调整所选单词.")
.endif
.elseif ax==IDC_EDT_WORD
shr eax,16
.if eax==EN_SETFOCUS
invoke DestroyCaret
invoke StatusBarSetIndexText,0,SADD("显示当前词条。只读。可以点击相应按钮来编辑或删除。")
.endif
.elseif ax==IDC_EDT_PHONE
shr eax,16
.if eax==EN_SETFOCUS
invoke DestroyCaret
invoke StatusBarSetIndexText,0,SADD("显示当前词条的音标。只读。可以点击相应按钮来编辑或删除。")
.endif
.elseif ax==IDC_BTN_EDIT
shr eax,16
.if eax==BN_SETFOCUS
invoke StatusBarSetIndexText,0,SADD("编辑当前词条。其快捷键为F3。")
.endif
.elseif ax==IDC_BTN_ADD
shr eax,16
.if eax==BN_SETFOCUS
invoke StatusBarSetIndexText,0,SADD("新增词条。其快捷键为F2。")
.endif
.elseif ax==IDC_BTN_DEL
shr eax,16
.if eax==BN_SETFOCUS
invoke StatusBarSetIndexText,0,SADD("删除当前词条。其快捷键为F4。")
.endif
.elseif ax==IDC_BTN_MAIN
shr eax,16
.if eax==BN_SETFOCUS
invoke StatusBarSetIndexText,0,SADD("系统设置。包括词库的新建、删除。支持标准SQL语句。其快捷键为F5")
.endif
.elseif ax==IDC_BTN_SEARCH
shr eax,16
.if eax==BN_SETFOCUS
invoke StatusBarSetIndexText,0,SADD("高级搜索功能。支持标准SQL语句。其快捷键为F1。")
.endif
.endif
.elseif eax==WM_SIZE
; mov eax,wParam
; .if eax==SIZE_MAXIMIZED
; invoke MyResize,hWin
; .endif
invoke MyResize,hWin
invoke InvalidateRect, hWin,NULL,TRUE
invoke SetFocus,hEditInput
.ELSEIF eax==WM_PAINT
invoke MainWindowPaint,hWin
.ELSEIF eax == WM_CTLCOLORSTATIC
mov eax,lParam
.if eax == hWord
invoke GetStockObject, WHITE_BRUSH
ret
.endif
.elseif eax==WM_INITDIALOG
push hWin
pop hWnd
invoke ODBCConnect,hWin
invoke InitControlAttributs,hWin
invoke InitTableNameCombo,hWin
invoke InitButtons,hWin
invoke SetListBox,hWin
invoke LoadIcon,hInstance,1005
invoke SendMessage,hWin,WM_SETICON,ICON_BIG,EAX
invoke StaTusBarInit,hWin
.elseif eax==WM_CLOSE
invoke ODBCDisconnect,hWin
invoke DestroyWindow,hWin
.elseif uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWin,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WndProc endp
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -