FASM. Вопрос по работе с диалогами

Тема в разделе "WASM.BEGINNERS", создана пользователем Voronve, 19 янв 2007.

  1. Voronve

    Voronve New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    15
    Код (Text):
    1. format PE GUI 4.0
    2. entry MyEntry
    3. include 'if.inc'
    4. include 'win32a.inc'
    5.  
    6. section '.data' data readable writeable
    7. gIst dd 0
    8. gWnd dd 0
    9.  
    10. section '.code' code readable executable
    11. MyEntry:
    12.         invoke GetModuleHandle,eax
    13.         mov [gIst],eax
    14.         invoke DialogBoxParam,eax,1,0,DlgProc,0
    15. ExitApp:
    16.         invoke ExitProcess,0
    17.  
    18. proc DlgProc,hWnd,uMsg,wParam,lParam
    19.        push edi esi ebx
    20.        mov eax,[uMsg]
    21.        .if eax = WM_INITDIALOG
    22.                mov eax,[hWnd]
    23.                mov [gWnd],eax
    24.                mov eax,1
    25.        .elseif eax = WM_COMMAND
    26.                mov eax,[wParam]
    27.                .if eax = IDOK
    28.                        invoke SendMessage,[hWnd],WM_CLOSE,0,0
    29.                        mov eax,1
    30.                .else
    31.                        xor eax,eax
    32.                .endif
    33.        .elseif eax = WM_CLOSE
    34.                invoke EndDialog,[hWnd],0
    35.                mov eax,1
    36.        .endif
    37.        pop ebx esi edi
    38.        ret
    39. endp
    40.  
    41. section '.idata' import data readable writeable
    42.  
    43.   library kernel, 'KERNEL32.DLL',\
    44.           user,   'USER32.DLL'
    45.  
    46.   import  kernel,\
    47.           GetModuleHandle,'GetModuleHandleA',\
    48.           ExitProcess,    'ExitProcess'
    49.  
    50.   import  user,\
    51.           DialogBoxParam, 'DialogBoxParamA',\
    52.           EndDialog,      'EndDialog',\
    53.           SendMessage,    'SendMessageA'
    54.  
    55. section '.rsrc' resource data readable
    56.  
    57.   directory RT_DIALOG,dialogs
    58.  
    59.   resource dialogs,\
    60.            1,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration
    61.  
    62.   dialog demonstration,'IDD_DLG1',6,6,194,106,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME
    63.     dialogitem 'BUTTON','OK',IDOK,130,84,50,13,WS_VISIBLE+WS_TABSTOP+BS_DEFPUSHBUTTON
    64.   enddialog
    Почему, когда я подключаю if.inc и переписываю процедуру окна на работу с макросами
    окно не выводиться а болтается только кнопка окна, при этом процесс кушает 99% времени процессора ?

    format PE GUI 4.0 - есть;
    вызов InitCommonControls - ничего не дает (ситуация не меняется)

    Я новичек - не пинайте слишком сильно ...
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. proc DlgProc,hWnd,uMsg,wParam,lParam
    2.        push edi esi ebx
    3.        mov eax,[uMsg]
    4.        .if eax = WM_INITDIALOG
    5.                mov eax,[hWnd]
    6.                mov [gWnd],eax
    7.                mov eax,1
    8.        .elseif eax = WM_COMMAND
    9.                mov eax,[wParam]
    10.                .if eax = IDOK
    11.                        invoke SendMessage,[hWnd],WM_CLOSE,0,0
    12.                        mov eax,1
    13.                .else
    14.                        xor eax,eax
    15.                .endif
    16.        .elseif eax = WM_CLOSE
    17.                invoke EndDialog,[hWnd],0
    18.                mov eax,1
    19.        .else
    20.                invoke DefWindowProc, [hWnd], [uMsg], [wParam], [lParam]
    21.                xor eax, eax
    22.        .endif
    23.        pop ebx esi edi
    24.        ret
    25. endp
     
  3. Voronve

    Voronve New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    15
    Спасибки. ;)
    А почему тогда работает стандартный пример из FASMа(%fasm%\examples\dialog\dialog.asm) ?
    Там ведь не вызывается DefWindowProc ... Или вызов идет неявно ?
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Не правильно у обоих.

    Voronve
    Ты забыл добавить .else и вернуть оттуда 0.

    n0name
    В диалоге DefWindowProc не нужен и вроде как будет ошибкой.
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Угу, ты прав. Что-то перепутал я :\
     
  6. Voronve

    Voronve New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    15
    .else
    xor eax, eax ;Действительно помогло ... Сенькс ...
    Вызов DefWindowProc при пизменении размеров окна вызывал глюки ... ;)

    Ну тогда и на последок:
    Иконка в библиотеке, диалог в библиотеке, вызов диалога идет в самой библиотеке

    invoke LoadIcon,gIst,2001 ;IconAPP
    invoke SendMessage,[hWnd],WM_SETICON,ICON_SMALL,2001 ;IconAPP

    Не переустанавливает иконку :dntknw:
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Отладчиком смотри.