Эксперт
   
Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006
Репутация: нет Всего: 146
|
| Код | .686 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc ;include \masm32\include\windef.inc include \masm32\include\gdi32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\windows.lib includelib \masm32\lib\windef.lib WinMain proto :DWORD, :DWORD .data BufferPos dd 0 ClassName db "SimpleWinClass", 0 AppName db "Обробка повідомлень клавіатури", 0 MenuName db "FirstMenu", 0 ABOUT_STRING db "ВВод символов, подсчет количества гласных и согласных", 0ah, 0dh, "Выполнил: Сердюк Сергей, КИТ-18а", 0 szFile db "Файл", 0 szClose db "Закрыть", 0 szResult db "Результат", 0 szCalculate db "Посчитать", 0 szAbout db "О программе", 0 szAuthor db "Автор", 0 szDescription db "Описание", 0 szEmptyString db 0
ID_EXIT equ 100 ID_CALCULATE equ 150 ID_ABOUTAUTHOR equ 200 ID_DESCRIPTION equ 205
.data? Buffer db 256 dup(?) hInstance HINSTANCE ? .code _start: mov ecx, 0 invoke GetModuleHandle, NULL mov hInstance, eax invoke WinMain, hInstance, SW_SHOWDEFAULT invoke ExitProcess, eax WinMain proc hInst:HINSTANCE, CmdShow:DWORD LOCAL wc: WNDCLASSEX LOCAL msg:MSG LOCAL hwnd:HWND push hInst pop wc.hInstance mov wc.cbSize, SIZEOF WNDCLASSEX mov wc.style, CS_HREDRAW or CS_VREDRAW mov wc.lpfnWndProc, OFFSET WndProc mov wc.hbrBackground, COLOR_WINDOW+1 mov wc.lpszMenuName, OFFSET MenuName 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 mov wc.cbClsExtra, NULL mov wc.cbWndExtra, NULL invoke RegisterClassEx, ADDR wc invoke CreateWindowEx, 0, ADDR ClassName, ADDR AppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL mov hwnd, eax invoke ShowWindow, hwnd, SW_SHOWNORMAL invoke UpdateWindow, hwnd .WHILE TRUE invoke GetMessage, ADDR msg, NULL, 0, 0 .BREAK .IF (!eax) invoke TranslateMessage, ADDR msg invoke DispatchMessage, ADDR msg .ENDW mov eax, msg.wParam ret WinMain endp WndProc proc hWnd: HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM LOCAL hdc:HDC LOCAL ps:PAINTSTRUCT .IF uMsg==WM_DESTROY invoke PostQuitMessage, NULL .ELSEIF uMsg==WM_CHAR mov eax, BufferPos .IF (eax >= (sizeof Buffer)) invoke MessageBeep, 0 .ELSE inc BufferPos mov edx, wParam mov byte ptr [Buffer+eax], dl
invoke InvalidateRect, hWnd, NULL, TRUE .ENDIF .ELSEIF uMsg==WM_PAINT invoke BeginPaint, hWnd, ADDR ps mov hdc, eax invoke TextOut, hdc, 30, 25, ADDR Buffer, BufferPos invoke EndPaint, hWnd, ADDR ps .ELSEIF uMsg==WM_CREATE push ebx push esi invoke CreateMenu mov ebx, eax invoke CreateMenu mov esi, eax invoke AppendMenu, esi, MF_STRING or MF_BYCOMMAND, ID_EXIT, addr szClose invoke AppendMenu, ebx, MF_STRING or MF_POPUP, esi, addr szFile
invoke CreateMenu mov esi, eax invoke AppendMenu, esi, MF_STRING or MF_BYCOMMAND, ID_CALCULATE, addr szCalculate invoke AppendMenu, ebx, MF_STRING or MF_POPUP, esi, addr szResult
invoke CreateMenu mov esi, eax invoke AppendMenu, esi, MF_STRING or MF_BYCOMMAND, ID_ABOUTAUTHOR, addr szAuthor invoke AppendMenu, esi, MF_STRING or MF_BYCOMMAND, ID_DESCRIPTION, addr szDescription invoke AppendMenu, ebx, MF_STRING or MF_POPUP, esi, addr szAbout
invoke SetMenu, hWnd, ebx pop esi pop ebx .ELSEIF uMsg==WM_COMMAND movzx eax, word ptr wParam .IF eax==ID_EXIT invoke PostQuitMessage, NULL .ELSEIF eax==ID_CALCULATE invoke MessageBox, hWnd, addr szCalculate, addr szEmptyString, 0 .ELSEIF eax==ID_ABOUTAUTHOR invoke MessageBox, hWnd, addr ABOUT_STRING, addr szEmptyString, 0 .ELSEIF eax==ID_DESCRIPTION invoke MessageBox, hWnd, addr szDescription, addr szEmptyString, 0 .ENDIF .ELSE invoke DefWindowProc, hWnd, uMsg, wParam, lParam ret .ENDIF xor eax, eax ret WndProc endp end _start |
Это сообщение отредактировал(а) 586 - 17.1.2010, 21:48
|