Подскажите когда нужно и когда не нужно вызывать DefWindowProc... И как вообще правильно создается процедура на ассеме, как в нее передаются и считываются параметры Дело в том что меня смутили пару исходников которые я нашел на просторах инета и хотелось бы точно узнать для уверенности как правильно всетаки делается?
имхо когда ты в своей оконной процедуре сделал все от звонка да звонка для данного сообщения если же ты сделал не все и какую то часть функциональности оставляешь винде вызывай DefWindowProc
если я тебя правильно понял то нужно вызывать DefWindowProc только тогда когда не обрабатываешь сообщение windows, а если же обрабатываешь то нужно просто выйти из процедуры? Если можно какой нибуть конеретный примерчик демонстрирующий оконную процедуру на чистом асеме
elestrago что-то последнее время забывают, что Васм не только форум, но и сайт. и на нём дочерта всего есть
ну раз есть, тогда кинь мне ссылочку на пример где описывается правильное создание процедур на чистом асеме
elestrago http://www.wasm.ru/article.php?article=1001003 а лучше начать с его первого урока, что бы не было глупых пробелов в знаниях и учись пользоваться поиском
Код (Text): WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM .IF uMsg==WM_DESTROY ; если пользователь закpывает окно invoke PostQuitMessage,NULL ; выходим из пpогpаммы .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ; Дефаултная функция обpаботки окна ret .ENDIF xor eax,eax ret WndProc endp интересно а где здесь по твоему чистый ассемблер, а с поиском я работать умею
Короче вот создал процедуру и хотел бы узнать она правильно сделана? Код (Text): MainProc proc push EBP mov EBP, ESP push EBX push ESI push EDI cmp DWORD PTR [EBP+0CH],WM_DESTROY je WMDESTROY cmp DWORD PTR [EBP+0CH],WM_CREATE je WMCREATE jmp DEFWNDPROC WMCREATE: include Code\menu.asm jmp FINISH WMDESTROY: push 0 call PostQuitMessage@4 mov eax,0 DEFWNDPROC: push dword ptr [EBP+14H] push dword ptr [EBP+10H] push dword ptr [EBP+0CH] push dword ptr [EBP+08H] call DefWindowProcA@16 jmp FINISH FINISH: pop EDI pop ESI pop EBX pop EBP RET 16 MainProc endp
elestrago вот за это ,внутри кода по рукам дают имей в виду и никогда так не делай! инклюды должны всегда идти в начале, в загаловке программы, и код из них вызываться через CALL или INVOKE да. если хочеш посмотреть во что разворачиваются макроопределения - собери программу и загони в отладчик http://ollydbg.de/ без отладчика вообще что-то сделать толком не выйдет. попробуй сам определить? если что - то отладчик тебе поможет по использованию отладчика есть хороший цикл статей здесь http://www.wasm.ru/series.php?sid=17 ,хоть статьи и по крякингу, по ним хорошо освоиш работу отладчика
Лучше читать параллельно два источника уроки с сайта и книжку Пецольда о программировании под вин на С по мотивам которой они сделаны
ну это Хатч с Айсзелионом постарались привили макростиль с инвоками и прочеми наворотами не очень удобно читать, но можно достаточно быстро написать функциональный код средненго качества