Объясните почему при создании Win окошка идентификатор один (CreateWindowEx), а в WindowProc передаётся другой? Пользуюсь FASM 1.64 Вот пример кода: Код (Text): ; Template for program using standard Win32 headers format PE GUI 4.0 entry start include 'win32a.inc' section '.data' data readable writeable _title db 'Win32 program template',0 _class db 'FASMWIN32',0 wc WNDCLASS 0,WindowProc,0,0,NULL,NULL,NULL,COLOR_BTNFACE+1,NULL,_class msg MSG hWnd dd 0 ;; Идентификатор нашего окна!!!! section '.code' code readable executable start: invoke GetModuleHandle,0 mov [wc.hInstance],eax invoke LoadIcon,0,IDI_APPLICATION mov [wc.hIcon],eax invoke LoadCursor,0,IDC_ARROW mov [wc.hCursor],eax invoke RegisterClass,wc invoke CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_DLGFRAME+WS_SYSME NU,128,128,192,192,NULL,NULL,[wc.hInstance],NULL mov [hWnd],eax ;; <--------- Идентификатор нашего окна!!!! msg_loop: invoke GetMessage,msg,NULL,0,0 or eax,eax jz end_loop invoke TranslateMessage,msg invoke DispatchMessage,msg jmp msg_loop end_loop: invoke ExitProcess,[msg.wParam] ;;=================================================================== ;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++ ;;=================================================================== proc WindowProc hwnd,wmsg,wparam,lparam push ebx esi edi cmp [wmsg],WM_CREATE je wmcreate cmp [wmsg],WM_DESTROY je wmdestroy defwndproc: invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam] jmp finish ;;=================================================================== wmcreate: mov eax,[hwnd] cmp eax,[hWnd] je finish ;; <---- Если равны, то сообщения НЕ БУДЕТ! invoke MessageBox,0,_class,_class,MB_OK jmp finish ;;=================================================================== wmdestroy: invoke PostQuitMessage,0 xor eax,eax finish: pop edi esi ebx ret endp ;;=================================================================== ;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++ ;;=================================================================== section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' include 'apia\kernel32.inc' include 'apia\user32.inc'
Если у тебя есть дочерние окна, то они тоже будут слать свой hwnd в WindowProc родителя. И они естественно будут отличаться от родительского. Поэтому и передаётся параметр hwnd в оконную процедуру, чтобы различать, от кого сообщение.