помогите пожалуйста: никак не могу заставить кнопочки диалога работать Код (Text): redsI_Proc proc lparam equ dword ptr [ebp+014h] wparam equ dword ptr [ebp+10h] msg equ dword ptr [ebp+0Ch] hwnd equ dword ptr [ebp+08h] cmp msg, WM_INITDIALOG je initdialog_m ;усли ДА то на метку %1 cmp msg, WM_COMMAND je comdialog_m ;если ДА cmp msg, WM_CLOSE jne return_false push 0 push hWnd1 call EndDialog@8 jmp return_false ;%1 initdialog_m: push IDC_EDIT1 push hwnd1 call GetDlgItem@8 push eax call SetFocus@4 ; push 0 ; push 0 ; push OPEN_ALWAYS ; push 0 ; push 0 ; push GEN ; push offset opt_name ; call CreateFileA@28 jmp return_true comdialog_m: mov eax, wParam mov ebx, lParam test ebx, ebx jnz com2_m cmp ax, IDM_GETTEXT jne nexti_m push 512 push offset buf push IDC_EDIT1 push hWnd1 call GetDlgItemTextA@16 nexti_m: cmp ax, IDM_CLEAR jne nexix_m push 0 push IDC_EDIT1 push hWnd call SetDlgItemTextA@12 nexix_m: push 0 push hWnd call EndDialog@8 com2_m: mov edx, wParam shr edx, 010h cmp dx, BN_CLICKED jne return_true cmp ax, IDC_BUTTON1 jne com3_m push offset String push IDC_EDIT1 push hWnd1 call SetDlgItemTextA@12 push 0 push hWnd1 call EndDialog@8 jmp return_true com3_m: cmp ax, IDC_CANCEL jne return_true push 0 push hWnd call EndDialog@8 jmp return_true return_false: mov eax, FALSE ret return_true: mov eax, TRUE ret game_over: redsI_Proc endp
А код вообще рабочий? У тебя даже параметры DlgProc то hwnd, то hWnd, то hWnd1. Советую переписать с нуля.
курим Iczeliona... причем тупым переписыванием и последующим втыканием в смысл кода - это проще всего, имхо...
IceStudent - сначала тупое переписывание и убеждение, что код ДЕЙСТВИТЕЛЬНО работает... А уже ПОТОМ начинаем разбираться, а ПОЧЕМУ оно работает
в принципе это взято из примера Iczeliona пример 10-2, правда перекрестные ссылки другие. Попобовал их (переходы) организовать в соответствии с Iczelion так вообще ничего не работает Ж обращается к памяти котора не может быть read
horpis Код (Text): DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM .IF uMsg==WM_INITDIALOG invoke GetDlgItem, hWnd,IDC_EDIT invoke SetFocus,eax .ELSEIF uMsg==WM_CLOSE invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0 .ELSEIF uMsg==WM_COMMAND mov eax,wParam .IF lParam==0 .IF ax==IDM_GETTEXT invoke GetDlgItemText,hWnd,IDC_EDIT,ADDR buffer,512 invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK .ELSEIF ax==IDM_CLEAR invoke SetDlgItemText,hWnd,IDC_EDIT,NULL .ELSEIF ax==IDM_EXIT invoke EndDialog, hWnd,NULL .ENDIF .ELSE mov edx,wParam shr edx,16 .if dx==BN_CLICKED .IF ax==IDC_BUTTON invoke SetDlgItemText,hWnd,IDC_EDIT,ADDR TestString .ELSEIF ax==IDC_EXIT invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0 .ENDIF .ENDIF .ENDIF .ELSE mov eax,FALSE ret .ENDIF mov eax,TRUE ret DlgProc endp У тебя .if - .elseif - .endif неправильно написаны, после каждого блока должен быть jmp на .endif. Советую брать программу из примера и смотреть в отладчике, как там все устроено.