заставить кнопки диалога работать

Тема в разделе "WASM.BEGINNERS", создана пользователем horpis, 8 окт 2006.

  1. horpis

    horpis New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    154
    помогите пожалуйста: никак не могу заставить кнопочки диалога работать
    Код (Text):
    1. redsI_Proc proc
    2. lparam equ dword ptr [ebp+014h]
    3. wparam equ dword ptr [ebp+10h]
    4. msg equ dword ptr [ebp+0Ch]
    5. hwnd equ dword ptr [ebp+08h]
    6.     cmp msg, WM_INITDIALOG
    7.     je initdialog_m     ;усли ДА то на метку %1
    8.     cmp msg, WM_COMMAND
    9.     je comdialog_m          ;если ДА
    10.     cmp msg, WM_CLOSE
    11.     jne return_false
    12.     push 0
    13.     push hWnd1
    14.     call EndDialog@8
    15.     jmp return_false
    16. ;%1
    17. initdialog_m:
    18.     push IDC_EDIT1
    19.     push hwnd1
    20.     call GetDlgItem@8
    21.     push eax
    22.     call SetFocus@4
    23. ;   push 0
    24. ;   push 0
    25. ;   push OPEN_ALWAYS
    26. ;   push 0
    27. ;   push 0
    28. ;   push GEN
    29. ;   push offset opt_name
    30. ;   call CreateFileA@28
    31.     jmp return_true
    32. comdialog_m:
    33.     mov eax, wParam
    34.     mov ebx, lParam
    35.     test ebx, ebx
    36.     jnz com2_m
    37.     cmp ax, IDM_GETTEXT
    38.     jne nexti_m
    39.     push 512
    40.     push offset buf
    41.     push IDC_EDIT1
    42.     push hWnd1
    43.     call GetDlgItemTextA@16
    44. nexti_m:
    45.     cmp ax, IDM_CLEAR
    46.     jne nexix_m
    47.     push 0
    48.     push IDC_EDIT1
    49.     push hWnd
    50.     call SetDlgItemTextA@12
    51. nexix_m:
    52.     push 0
    53.     push hWnd
    54.     call EndDialog@8
    55. com2_m:
    56.     mov edx, wParam
    57.     shr edx, 010h
    58.     cmp dx, BN_CLICKED
    59.     jne return_true
    60.     cmp ax, IDC_BUTTON1
    61.     jne com3_m
    62.     push offset String
    63.     push IDC_EDIT1
    64.     push hWnd1
    65.     call SetDlgItemTextA@12
    66.     push 0
    67.     push hWnd1
    68.     call EndDialog@8
    69.     jmp return_true
    70. com3_m:
    71.     cmp ax, IDC_CANCEL
    72.     jne return_true
    73.     push 0
    74.     push hWnd
    75.     call EndDialog@8
    76.     jmp return_true
    77. return_false:      
    78.     mov eax, FALSE
    79.     ret
    80. return_true:
    81.     mov eax, TRUE
    82.     ret
    83. game_over:
    84. redsI_Proc endp
     
  2. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    А код вообще рабочий? У тебя даже параметры DlgProc то hwnd, то hWnd, то hWnd1. Советую переписать с нуля.
     
  3. Pinkbyte

    Pinkbyte Member

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    106
    курим Iczeliona... причем тупым переписыванием и последующим втыканием в смысл кода - это проще всего, имхо...
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Pinkbyte
    Тупое переписывание не поможет. Понимать надо, что пишешь.
     
  5. Pinkbyte

    Pinkbyte Member

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    106
    IceStudent - сначала тупое переписывание и убеждение, что код ДЕЙСТВИТЕЛЬНО работает... А уже ПОТОМ начинаем разбираться, а ПОЧЕМУ оно работает :)
     
  6. horpis

    horpis New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    154
    в принципе это взято из примера Iczeliona пример 10-2, правда перекрестные ссылки другие. Попобовал их (переходы) организовать в соответствии с Iczelion так вообще ничего не работает Ж обращается к памяти котора не может быть read
     
  7. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    horpis
    Код (Text):
    1. DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    2.     .IF uMsg==WM_INITDIALOG
    3.         invoke GetDlgItem, hWnd,IDC_EDIT
    4.         invoke SetFocus,eax
    5.     .ELSEIF uMsg==WM_CLOSE
    6.         invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0
    7.     .ELSEIF uMsg==WM_COMMAND
    8.         mov eax,wParam
    9.         .IF lParam==0
    10.             .IF ax==IDM_GETTEXT
    11.                 invoke GetDlgItemText,hWnd,IDC_EDIT,ADDR buffer,512
    12.                 invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK
    13.             .ELSEIF ax==IDM_CLEAR
    14.                 invoke SetDlgItemText,hWnd,IDC_EDIT,NULL
    15.             .ELSEIF ax==IDM_EXIT
    16.                 invoke EndDialog, hWnd,NULL
    17.             .ENDIF
    18.         .ELSE
    19.             mov edx,wParam
    20.             shr edx,16
    21.             .if dx==BN_CLICKED
    22.                 .IF ax==IDC_BUTTON
    23.                     invoke SetDlgItemText,hWnd,IDC_EDIT,ADDR TestString
    24.                         .ELSEIF ax==IDC_EXIT
    25.                     invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0
    26.                 .ENDIF
    27.             .ENDIF
    28.         .ENDIF
    29.     .ELSE
    30.         mov eax,FALSE
    31.         ret
    32.     .ENDIF
    33.     mov eax,TRUE
    34.     ret
    35. DlgProc endp
    У тебя .if - .elseif - .endif неправильно написаны, после каждого блока должен быть jmp на .endif. Советую брать программу из примера и смотреть в отладчике, как там все устроено.
     
  8. horpis

    horpis New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    154
    ура заработало. спасибо Olly и всем всем всем:)