Вопрос по оконной процедуре...

Тема в разделе "WASM.BEGINNERS", создана пользователем elestrago, 30 апр 2009.

  1. elestrago

    elestrago New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2009
    Сообщения:
    56
    Подскажите когда нужно и когда не нужно вызывать DefWindowProc...
    И как вообще правильно создается процедура на ассеме, как в нее передаются и считываются параметры

    Дело в том что меня смутили пару исходников которые я нашел на просторах инета и хотелось бы точно узнать для уверенности как правильно всетаки делается?
     
  2. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    имхо когда ты в своей оконной процедуре сделал все от звонка да звонка для данного сообщения
    если же ты сделал не все и какую то часть функциональности оставляешь винде вызывай DefWindowProc
     
  3. elestrago

    elestrago New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2009
    Сообщения:
    56
    если я тебя правильно понял то нужно вызывать DefWindowProc только тогда когда не обрабатываешь сообщение windows, а если же обрабатываешь то нужно просто выйти из процедуры?

    Если можно какой нибуть конеретный примерчик демонстрирующий оконную процедуру на чистом асеме
     
  4. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    elestrago
    что-то последнее время забывают, что Васм не только форум, но и сайт.
    и на нём дочерта всего есть :)
     
  5. elestrago

    elestrago New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2009
    Сообщения:
    56
    ну раз есть, тогда кинь мне ссылочку на пример где описывается правильное создание процедур на чистом асеме
     
  6. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    elestrago
    http://www.wasm.ru/article.php?article=1001003
    а лучше начать с его первого урока, что бы не было глупых пробелов в знаниях :)
    и учись пользоваться поиском ;)
     
  7. elestrago

    elestrago New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2009
    Сообщения:
    56
    Код (Text):
    1. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    2.  
    3.     .IF uMsg==WM_DESTROY            ; если пользователь закpывает окно
    4.         invoke PostQuitMessage,NULL ; выходим из пpогpаммы
    5.     .ELSE
    6.         invoke DefWindowProc,hWnd,uMsg,wParam,lParam ; Дефаултная функция обpаботки окна
    7.         ret
    8.     .ENDIF
    9.     xor eax,eax
    10.  
    11.     ret
    12. WndProc endp
    интересно а где здесь по твоему чистый ассемблер, а с поиском я работать умею :)
     
  8. elestrago

    elestrago New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2009
    Сообщения:
    56
    Короче вот создал процедуру и хотел бы узнать она правильно сделана?
    Код (Text):
    1. MainProc proc
    2.     push    EBP
    3.     mov     EBP, ESP
    4.     push    EBX
    5.     push    ESI
    6.     push    EDI
    7.     cmp     DWORD PTR [EBP+0CH],WM_DESTROY
    8.     je      WMDESTROY
    9.     cmp     DWORD PTR [EBP+0CH],WM_CREATE
    10.     je      WMCREATE
    11.     jmp     DEFWNDPROC
    12. WMCREATE:
    13.     include Code\menu.asm
    14.     jmp FINISH
    15. WMDESTROY:
    16.     push    0
    17.     call    PostQuitMessage@4
    18.     mov     eax,0
    19. DEFWNDPROC:
    20.     push    dword ptr [EBP+14H]
    21.     push    dword ptr [EBP+10H]
    22.     push    dword ptr [EBP+0CH]
    23.     push    dword ptr [EBP+08H]
    24.     call    DefWindowProcA@16
    25.     jmp FINISH
    26. FINISH:
    27.     pop     EDI
    28.     pop     ESI
    29.     pop     EBX
    30.     pop     EBP
    31.     RET     16
    32. MainProc endp
     
  9. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    elestrago
    вот за это ,внутри кода
    по рукам дают :) имей в виду и никогда так не делай!
    инклюды должны всегда идти в начале, в загаловке программы, и код из них вызываться
    через CALL или INVOKE
    да. если хочеш посмотреть во что разворачиваются макроопределения -
    собери программу и загони в отладчик http://ollydbg.de/
    без отладчика вообще что-то сделать толком не выйдет.
    попробуй сам определить? если что - то отладчик тебе поможет ;)
    по использованию отладчика есть хороший цикл статей здесь http://www.wasm.ru/series.php?sid=17 ,хоть статьи и по крякингу, по ним хорошо освоиш работу отладчика
     
  10. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    Лучше читать параллельно два источника уроки с сайта и книжку Пецольда о программировании под вин на С по мотивам которой они сделаны
     
  11. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    ну это Хатч с Айсзелионом постарались привили макростиль с инвоками и прочеми наворотами
    не очень удобно читать, но можно достаточно быстро написать функциональный код средненго качества