Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Жесть какая-то!!!
Людиии, ну нет на ассемблере if, while и т.д.
Ну неужели вот это:
Код:
.if uMsg==WM_CREATE
invoke CreateWindowEx, NULL, addr EditClass, NULL, \
WS_VISIBLE or WS_CHILD or ES_LEFT or ES_MULTILINE or ES_AUTOHSCROLL or ES_AUTOVSCROLL,\
0, 0, 0, 0, hWnd, EditID, hInstance, NULL
mov hwndEdit, eax
invoke SetFocus, hwndEdit
mov ofn.lStructSize, sizeof ofn
push hWnd
pop ofn.hWndOwner
push hInstance
pop ofn.hInstance
mov ofn.lpstrFilter, offset FilterString
mov ofn.lpstrFile, offset buffer
mov ofn.nMaxFile, MAXSIZE
.elseif uMsg==WM_SIZE
mov eax, lParam
mov edx, eax
shr edx, 16
and eax, 0FFFFh
invoke MoveWindow, hwndEdit, 0, 0, eax, edx, TRUE
.elseif uMsg==WM_DESTROY
invoke PostQuitMessage, NULL
.elseif uMsg==WM_COMMAND
mov eax, wParam
.if lParam==0
.if ax==IDM_OPEN
mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or \
OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
invoke GetOpenFileName, addr ofn
.if eax==TRUE
invoke CreateFile, addr buffer, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,\
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL
mov hFile, eax
invoke HeapAlloc, hHeap, HEAP_ZERO_MEMORY, MEMSIZE
mov pMemory, eax
invoke ReadFile, hFile, pMemory, MEMSIZE-1, addr SizeReadWrite, NULL
invoke SendMessage, hwndEdit, WM_SETTEXT, NULL, pMemory
invoke HeapFree, hHeap, NULL, pMemory
invoke CloseHandle, hFile
.endif
invoke SetFocus, hwndEdit
.elseif ax==IDM_SAVE
mov ofn.Flags, OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
invoke GetSaveFileName, addr ofn
.if eax==TRUE
invoke CreateFile, addr buffer, GENERIC_READ or GENERIC_WRITE,\
FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, CREATE_NEW, \
FILE_ATTRIBUTE_ARCHIVE, NULL
mov hFile, eax
invoke HeapAlloc, hHeap, HEAP_ZERO_MEMORY, MEMSIZE
mov pMemory, eax
invoke SendMessage, hwndEdit, WM_GETTEXT, MEMSIZE-1, pMemory
invoke WriteFile, hFile, pMemory, eax, addr SizeReadWrite, NULL
invoke HeapFree, hHeap, NULL, pMemory
invoke CloseHandle, hFile
.endif
.endif
invoke SetFocus, hwndEdit
.endif
.else
invoke DefWindowProc, hWnd,uMsg,wParam, lParam
ret
.endif
xor eax, eax
ret
WndProc endp
Читабельнее, чем вот это:
Код:
WndProc2 proc uses ebx hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
cmp [uMsg], WM_CREATE
je wmcreate
cmp [uMsg], WM_SIZE
je wmsize
cmp [uMsg], WM_CLOSE
je wmdestroy
cmp [uMsg], WM_DESTROY
je wmdestroy
cmp [uMsg], WM_COMMAND
je wmcommand_select
invoke DefWindowProcA, [hWnd],[uMsg],[wParam],[lParam]
ret
wmcreate:
invoke CreateWindowEx, NULL, addr EditClass, NULL, \
WS_VISIBLE or WS_CHILD or ES_LEFT or ES_MULTILINE or ES_AUTOHSCROLL or ES_AUTOVSCROLL,\
0, 0, 0, 0, hWnd, EditID, hInstance, NULL
mov hwndEdit, eax
invoke SetFocus, hwndEdit
mov ofn.lStructSize, sizeof ofn
push hWnd
pop ofn.hWndOwner
push hInstance
pop ofn.hInstance
mov ofn.lpstrFilter, offset FilterString
mov ofn.lpstrFile, offset buffer
mov ofn.nMaxFile, MAXSIZE
xor eax, eax
ret
wmsize:
mov eax, lParam
mov edx, eax
shr edx, 16
and eax, 0FFFFh
invoke MoveWindow, hwndEdit, 0, 0, eax, edx, TRUE
xor eax, eax
ret
wmdestroy:
invoke PostQuitMessage, NULL
xor eax, eax
ret
wmcommand_select:
cmp lParam, 0
je wmcommand_menu
xor eax, eax
ret
wmcommand_menu:
mov eax, wParam
cmp ax, IDM_OPEN
je wmcommand_menuOpen
cmp ax, IDM_SAVE
je wmcommand_menuSave
xor eax, eax
ret
wmcommand_menuOpen:
mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or \
OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
invoke GetOpenFileName, addr ofn
cmp eax, 0
je OpenNotFile
invoke CreateFile, addr buffer, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,\
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL
mov hFile, eax
invoke HeapAlloc, hHeap, HEAP_ZERO_MEMORY, MEMSIZE
mov pMemory, eax
invoke ReadFile, hFile, pMemory, MEMSIZE-1, addr SizeReadWrite, NULL
invoke SendMessage, hwndEdit, WM_SETTEXT, NULL, pMemory
invoke HeapFree, hHeap, NULL, pMemory
invoke CloseHandle, hFile
OpenNotFile:
invoke SetFocus, hwndEdit
xor eax, eax
ret
wmcommand_menuSave:
mov ofn.Flags, OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
invoke GetSaveFileName, addr ofn
cmp eax, 0
je SaveNotFile
invoke CreateFile, addr buffer, GENERIC_READ or GENERIC_WRITE,\
FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, CREATE_NEW, \
FILE_ATTRIBUTE_ARCHIVE, NULL
mov hFile, eax
invoke HeapAlloc, hHeap, HEAP_ZERO_MEMORY, MEMSIZE
mov pMemory, eax
invoke SendMessage, hwndEdit, WM_GETTEXT, MEMSIZE-1, pMemory
invoke WriteFile, hFile, pMemory, eax, addr SizeReadWrite, NULL
invoke HeapFree, hHeap, NULL, pMemory
invoke CloseHandle, hFile
SaveNotFile:
invoke SetFocus, hwndEdit
xor eax, eax
ret
WndProc2 endp
В атт. поправленный пример.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
|