Небольшая проблема

Тема в разделе "WASM.BEGINNERS", создана пользователем Dimakkk, 4 мар 2008.

  1. Dimakkk

    Dimakkk New Member

    Публикаций:
    0
    Регистрация:
    4 мар 2008
    Сообщения:
    3
    Здравствуйте. У меня есть текст программы обрабатывающий ввод с клавиатуры.
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
    6.  
    7. include c:\masm32\include\windows.inc
    8. include  c:\masm32\include\user32.inc
    9. include  c:\masm32\include\kernel32.inc
    10. include  c:\masm32\include\gdi32.inc
    11. includelib  c:\masm32\lib\user32.lib
    12. includelib  c:\masm32\lib\kernel32.lib
    13. includelib  c:\masm32\lib\gdi32.lib
    14.  
    15. .data
    16. ClassName db "SimpleWinClass",0
    17. AppName  db "Our First Window",0
    18. char WPARAM 20h
    19.  
    20. .data?
    21. hInstance HINSTANCE ?
    22. CommandLine LPSTR ?
    23.  
    24. .code
    25. start:
    26.     invoke GetModuleHandle, NULL
    27.     mov    hInstance,eax
    28.     invoke GetCommandLine
    29.     mov CommandLine,eax
    30.     invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
    31.     invoke ExitProcess,eax
    32. WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    33.     LOCAL wc:WNDCLASSEX
    34.     LOCAL msg:MSG
    35.     LOCAL hwnd:HWND
    36.     mov   wc.cbSize,SIZEOF WNDCLASSEX
    37.     mov   wc.style, CS_HREDRAW or CS_VREDRAW
    38.     mov   wc.lpfnWndProc, OFFSET WndProc
    39.     mov   wc.cbClsExtra,NULL
    40.     mov   wc.cbWndExtra,NULL
    41.     push  hInst
    42.     pop   wc.hInstance
    43.     mov   wc.hbrBackground,COLOR_WINDOW+1
    44.     mov   wc.lpszMenuName,NULL
    45.     mov   wc.lpszClassName,OFFSET ClassName
    46.     invoke LoadIcon,NULL,IDI_APPLICATION
    47.     mov   wc.hIcon,eax
    48.     mov   wc.hIconSm,eax
    49.     invoke LoadCursor,NULL,IDC_ARROW
    50.     mov   wc.hCursor,eax
    51.     invoke RegisterClassEx, addr wc
    52.     INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
    53.            WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
    54.            CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
    55.            hInst,NULL
    56.     mov   hwnd,eax
    57.     INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
    58.     INVOKE UpdateWindow, hwnd
    59.     .WHILE TRUE
    60.                 INVOKE GetMessage, ADDR msg,NULL,0,0
    61.                 .BREAK .IF (!eax)
    62.                 INVOKE TranslateMessage, ADDR msg
    63.                 INVOKE DispatchMessage, ADDR msg
    64.     .ENDW
    65.     mov     eax,msg.wParam
    66.     ret
    67. WinMain endp
    68. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    69.     LOCAL hdc:HDC
    70.     LOCAL ps:PAINTSTRUCT
    71.  
    72.     .IF uMsg==WM_DESTROY
    73.         invoke PostQuitMessage,NULL
    74.     .ELSEIF uMsg==WM_CHAR
    75.         push wParam
    76.         pop  char
    77.         invoke InvalidateRect, hWnd,NULL,TRUE
    78.     .ELSEIF uMsg==WM_PAINT
    79.         invoke BeginPaint,hWnd, ADDR ps
    80.         mov    hdc,eax
    81.         invoke TextOut,hdc,0,0,ADDR char,1
    82.         invoke EndPaint,hWnd, ADDR ps
    83.     .ELSE
    84.         invoke DefWindowProc,hWnd,uMsg,wParam,lParam
    85.         ret
    86.     .ENDIF
    87.     xor    eax,eax
    88.     ret
    89. WndProc endp
    90. end start
    Помогите изменить её так что, не зависимо от клавиши он выводил в клиентской области цифру 5.(Типа сначало пустое окно, я нажимаю например клавишу "р" он выводит "5"). Вроде бы надо менять строчку invoke TextOut,hdc,0,0,ADDR char,1?
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    "push wParam/pop char" заменить на "mov [char], '5'"
     
  3. Dimakkk

    Dimakkk New Member

    Публикаций:
    0
    Регистрация:
    4 мар 2008
    Сообщения:
    3
    Спасибо за быструю реакцию. А нет ли другого способа? Просто преподавателя он не устраивает. Он указал на строчку invoke TextOut,hdc,0,0,ADDR char,1
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Сколько угодно.
     
  5. Dimakkk

    Dimakkk New Member

    Публикаций:
    0
    Регистрация:
    4 мар 2008
    Сообщения:
    3
    Например? Плиз хелп
     
  6. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Dimakkk
    Попробуй так
    Код (Text):
    1.          mov    hdc,eax
    2.          push 1
    3.          call a
    4.          db '5'
    5. a:      invoke TextOut,hdc,0,0
    Можно еще push wParam/pop char" заменить на "push 35h/pop char"
     
  7. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Dimakkk
    Я думаю преп. добивается понимания и простоты. Поэтому логичнее всего завести рабочую ячейку
    с '5' и заменить char в TextOut на имя этой ячейки.
    В задаче не требовалось "подменить" ввод - представьте что вводят пароль...