Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > Помогите дописать программу


Автор: NFL 17.1.2010, 13:47
Есть программа:

Код

.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
ClassName db "SimpleWinClass", 0
AppName db "Обробка повідомлень клавіатури", 0
MenuName db "FirstMenu", 0
ABOUT_STRUNG db "ВВод символов, подсчет количества гласных и согласных", 0ah, 0dh, "Выполнил: Сердюк Сергей, КИТ-18а", 0
char WPARAM 20h
.data?
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
push wParam
pop char
invoke InvalidateRect, hWnd, NULL, TRUE
.ELSEIF uMsg==WM_PAINT
invoke BeginPaint, hWnd, ADDR ps
mov hdc, eax
invoke TextOut, hdc, 30, 25, ADDR char, 1
invoke EndPaint, hWnd, ADDR ps
.ELSE
invoke DefWindowProc, hWnd, uMsg, wParam, lParam
ret
.ENDIF
xor eax, eax
ret
WndProc endp
end _start


Она создает окно, обрабатывает нажатия клавиш и выводит нажатый символ...

Нужно вверху вставить меню (Файл, Результат, О программе)
с подпунктами:
Файл - Закрыть, Результат - Посчитать, О программе - Автор, Описание
И сделать так, чтобы символы вводились не по одному, а в строку smile 
Ну и написать функцию, которая бы считала количество гласных/согласных, но это уже сам напишу smile 
Гугол уже облазил первым делом.. Ничего не нашел... Кто может, помогите smile 
Программу надо исправить срочно smile 

Автор: 586 17.1.2010, 21:31
Код
.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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)