Снова диалоги

Тема в разделе "WASM.BEGINNERS", создана пользователем rubic_, 15 окт 2007.

  1. rubic_

    rubic_ Женя

    Публикаций:
    0
    Регистрация:
    9 июл 2007
    Сообщения:
    121
    Адрес:
    Омск
    ППц достали меня эти диалоги, гляньте почему не работает. все собирается, на ехе кликаешь ни чего не происходит, даже процесс не создается, диалог не прорисовывается(( в чем косяк
    Код (Text):
    1. .386
    2.    .model flat,stdcall
    3.    option casemap:none
    4.  
    5.    DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD
    6.  
    7.    include \masm32\include\windows.inc
    8.    include \masm32\include\user32.inc
    9.    include \masm32\include\kernel32.inc
    10.    includelib \masm32\lib\user32.lib
    11.    includelib \masm32\lib\kernel32.lib
    12.  
    13.    .data
    14.  
    15.    DlgName db "MyDialog",0
    16.    AppName db "Our Second Dialog Box",0
    17.    TestString db "Wow! I'm in an edit box now",0
    18.  
    19.    .data?
    20.  
    21.    hInstance HINSTANCE ?
    22.    CommandLine LPSTR ?
    23.    buffer db 512 dup(?)
    24.  
    25.    .const
    26.  
    27.    IDC_EDIT            equ 1000
    28.    IDC_BUTTON     equ 1001
    29.    IDC_EXIT            equ 1002
    30.    IDM_GETTEXT  equ 1
    31.    IDM_CLEAR       equ 2
    32.    IDM_EXIT           equ 3
    33.  
    34.    .code
    35.  
    36.    start:
    37.  
    38.        invoke GetModuleHandle, NULL
    39.        mov    hInstance,eax
    40.        invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL
    41.        invoke ExitProcess,eax
    42.  
    43.    DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    44.        .IF uMsg==WM_INITDIALOG
    45.            invoke GetDlgItem, hWnd,IDC_EDIT
    46.            invoke SetFocus,eax
    47.        .ELSEIF uMsg==WM_CLOSE
    48.            invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0
    49.        .ELSEIF uMsg==WM_COMMAND
    50.            mov eax,wParam
    51.            .IF lParam==0
    52.                .IF ax==IDM_GETTEXT
    53.                    invoke GetDlgItemText,hWnd,IDC_EDIT,ADDR buffer,512
    54.                    invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK
    55.                .ELSEIF ax==IDM_CLEAR
    56.                    invoke SetDlgItemText,hWnd,IDC_EDIT,NULL
    57.                .ELSEIF ax==IDM_EXIT
    58.                    invoke EndDialog, hWnd,NULL
    59.                .ENDIF
    60.            .ELSE
    61.                mov edx,wParam
    62.                shr edx,16
    63.                .if dx==BN_CLICKED
    64.                    .IF ax==IDC_BUTTON
    65.                        invoke SetDlgItemText,hWnd,IDC_EDIT,ADDR TestString
    66.                    .ELSEIF ax==IDC_EXIT
    67.                        invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0
    68.                    .ENDIF
    69.                .ENDIF
    70.            .ENDIF
    71.        .ELSE
    72.            mov eax,FALSE
    73.            ret
    74.        .ENDIF
    75.        mov eax,TRUE
    76.  
    77.        ret
    78.  
    79.    DlgProc endp
    80.  
    81.    end start
    Код (Text):
    1. #include "RESOURCE.h"
    2. //control's
    3. #define IDC_EDIT    1000
    4. #define IDC_BUTTON  1001
    5. #define IDC_EXIT    1002
    6. #define IDR_MENU_   1003   
    7. //menu
    8. #define IDM_GETTEXT 1
    9. #define IDM_CLEAR   2
    10. #define IDM_EXIT    3
    11.  
    12. MyDialog    DIALOG  20, 20, 150, 100
    13.  
    14. STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX |
    15.       WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK  
    16. CAPTION "MyWork"
    17.  
    18. MENU IDR_MENU_
    19. {
    20.     DEFPUSHBUTTON       "Say hello.", IDC_BUTTON, 150, 10, 30, 30
    21.     PUSHBUTTON      "EXIT", IDC_EXIT, 150, 40, 30, 30
    22.         EDITTEXT         IDC_EDIT,   15,17,111,13, ES_AUTOHSCROLL | ES_LEFT
    23.        
    24. }
    25. IDR_MENU    MENU
    26. {
    27.     POPUP   "Files"
    28.     {
    29.         MENUITEM    "Get text", IDM_GETTEXT
    30.         MENUITEM    "Clear text",IDM_CLEAR
    31.         MENUITEM    "EXIT",IDM_EXIT
    32.     }
    33.  
    34. }
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    rubic_
    приаттачьте исходники и exe в архиве
     
  3. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    rubic_
    пример для сравнения

    Код (Text):
    1. IDD_DIALOG1                     equ 101
    2. ...
    3. invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
    а ты туда что засунул...
    смотри примеры какие нибудь
     
  4. rubic_

    rubic_ Женя

    Публикаций:
    0
    Регистрация:
    9 июл 2007
    Сообщения:
    121
    Адрес:
    Омск
    все ок по примерам Iczelion'a, унего такой способ, все ок так работает, просто с именами менюшек напортачил. так что проблема решена.
     
  5. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    rubic_
    Да у тя там правильно не разглядел.
    Я тебе всё подправил...
    Косяк был в ресурсах!
     
  6. rubic_

    rubic_ Женя

    Публикаций:
    0
    Регистрация:
    9 июл 2007
    Сообщения:
    121
    Адрес:
    Омск
    ага спс, но уже сам разобрался, там имена Меню расходились
    ---
     
  7. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    rubic_
    Какие ж там имена меню расходились?
    Ты там тело диалога в меню запихнул;)
    получше сравни мой и свой варианты
     
  8. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    rubic_
    И кстати кнопоки не показываются из-за того что ты их замапил
    за пределами диалога, но я это не подправлял
     
  9. rubic_

    rubic_ Женя

    Публикаций:
    0
    Регистрация:
    9 июл 2007
    Сообщения:
    121
    Адрес:
    Омск
    так давай покумекаем)

    твой код
    Код (Text):
    1. #include "RESOURCE.h"
    2. //control's
    3. #define IDC_EDIT    1000
    4. #define IDC_BUTTON  1001
    5. #define IDC_EXIT    1002
    6. #define IDR_MENU_   1003   
    7. //menu
    8. #define IDM_GETTEXT 1
    9. #define IDM_CLEAR   2
    10. #define IDM_EXIT    3
    11. #define MyDialog    101
    12.  
    13. MyDialog    DIALOG  20, 20, 150, 100
    14.  
    15. STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX |
    16.       WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK  
    17. CAPTION "MyWork"
    18.  
    19. BEGIN
    20.     DEFPUSHBUTTON       "Say hello.", IDC_BUTTON, 150, 10, 30, 30
    21.     PUSHBUTTON      "EXIT", IDC_EXIT, 150, 40, 30, 30
    22.         EDITTEXT         IDC_EDIT,   15,17,111,13, ES_AUTOHSCROLL | ES_LEFT
    23. END
    24. IDR_MENU    MENU
    25. {
    26.     POPUP   "Files"
    27.     {
    28.         MENUITEM    "Get text", IDM_GETTEXT
    29.         MENUITEM    "Clear text",IDM_CLEAR
    30.         MENUITEM    "EXIT",IDM_EXIT
    31.     }
    32.  
    33. }
    мой(по примеру Iczelion'a)
    Код (Text):
    1. #include "RESOURCE.h"
    2. #define IDC_EDIT    1000
    3. #define IDC_BUTTON  1001
    4. #define IDC_EXIT    1002
    5. #define IDR_MENU1   1003   
    6. #define IDM_GETTEXT 0
    7. #define IDM_CLEAR   1
    8. #define IDM_EXIT    2
    9.  
    10. MyDialog    DIALOG  20, 20, 200, 200
    11.  
    12. STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX |
    13.       WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK  
    14. CAPTION "MyWork"
    15.  
    16. MENU IDR_MENU1
    17. {
    18.     DEFPUSHBUTTON       "Say hello.", IDC_BUTTON, 150, 10, 30, 30
    19.     PUSHBUTTON      "EXIT", IDC_EXIT, 150, 40, 30, 30
    20.         EDITTEXT         IDC_EDIT,   15,17,111,13, ES_AUTOHSCROLL | ES_LEFT
    21.        
    22. }
    23. IDR_MENU1   MENU
    24. {
    25.     POPUP   "Files"
    26.     {
    27.         MENUITEM    "Get text", IDM_GETTEXT
    28.         MENUITEM    "Clear text",IDM_CLEAR
    29.         MENUITEM    "EXIT",IDM_EXIT
    30.     }
    31.  
    32. }
    сам Iczelion
    Код (Text):
    1. #include "resource.h"
    2.  
    3.    #define IDC_EDIT                                       3000
    4.    #define IDC_BUTTON                                3001
    5.    #define IDC_EXIT                                       3002
    6.    #define IDR_MENU1                                  3003
    7.    #define IDM_GETTEXT                              32000
    8.    #define IDM_CLEAR                                   32001
    9.    #define IDM_EXIT                                       32003
    10.    MyDialog DIALOG 10, 10, 205, 60
    11.    STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX |
    12.    WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
    13.    CAPTION "Our Second Dialog Box"
    14.  
    15.    MENU IDR_MENU1
    16.    BEGIN
    17.        EDITTEXT         IDC_EDIT,   15,17,111,13, ES_AUTOHSCROLL | ES_LEFT
    18.        DEFPUSHBUTTON   "Say Hello", IDC_BUTTON,    141,10,52,13
    19.        PUSHBUTTON      "E&xit", IDC_EXIT,  141,26,52,13
    20.    END
    21.  
    22.    IDR_MENU1  MENU
    23.    BEGIN
    24.        POPUP "Test Controls"
    25.        BEGIN
    26.            MENUITEM "Get Text", IDM_GETTEXT
    27.            MENUITEM "Clear Text", IDM_CLEAR
    28.            MENUITEM "", , 0x0800 /*MFT_SEPARATOR*/
    29.            MENUITEM "E&xit", IDM_EXIT
    30.        END
    31.    END
    где я тут запишнул в тело диалога меню?ты убрал MENU IDR_MENU1 и ввел #define MyDialog 101, только зачем?
     
  10. rubic_

    rubic_ Женя

    Публикаций:
    0
    Регистрация:
    9 июл 2007
    Сообщения:
    121
    Адрес:
    Омск
    да это я в курсе, блин я не такой глупый((
     
  11. rubic_

    rubic_ Женя

    Публикаций:
    0
    Регистрация:
    9 июл 2007
    Сообщения:
    121
    Адрес:
    Омск
    MENU IDR_MENU1 и IDR_MENU1 MENU разные штуки, одня Resource другая Statement(про нее понял только, что воде используется для объявления контролов на диалоге)
     
  12. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Да правда если меню пишется перед названием то получается это статемент(часть диалога).
    Я ресурсы делаю в визуальных редакторах и с текстом толком не работал и вот нарвался.Вообще меню в диалоге сам очень редко делал и в WM_INITDIALOG по хендлу с
    SetMenu(...).И тебе советую в визуальных редакторах такие вещи делать там толком не
    накосячиш.

    вообще-то совет не был сформулирован на такую реакцию:dntknw:
     
  13. rubic_

    rubic_ Женя

    Публикаций:
    0
    Регистрация:
    9 июл 2007
    Сообщения:
    121
    Адрес:
    Омск
    да ладно), я же с иронией. не с обидой.
    посоветуй какой-нибудь плз.
     
  14. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    в VS(ВизуалСтудии)
    и RadAsm radasm.com
    Вообще сам все асмовские дела в RadAsm - это лучшая и полноценная IDE
    для асма;)
     
  15. rubic_

    rubic_ Женя

    Публикаций:
    0
    Регистрация:
    9 июл 2007
    Сообщения:
    121
    Адрес:
    Омск
    у мене она есть(RadAsm), только я что-то не понимаю как там делать визуально ресурсы стряпать, я в ней листинги кода пишу

    вообще я недавно начал программировать, где-то с месяц-полтора назад, понял что это мое. начал с С++(доучил на уровне Страуструпа), сам язык понравился, но уж больно процесс программирования был не понятен. Там что-то берется туда пересылается, классы, структуры, а хотелось понимать досканально процесс работы, а где
    этому можно научиться лучше чем не в асме, поэтому пересел на асм, но дал себе слово вернуться когда-нить к С(С++). С++ и асм можно очень эффективно вместе использовать я думаю.
     
  16. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Проект->Добавить новый->...
    или Проект->Добавить cуществующие->...

    А С(С++)+asm классическая проверенная и востребованная связка;)
     
  17. rubic_

    rubic_ Женя

    Публикаций:
    0
    Регистрация:
    9 июл 2007
    Сообщения:
    121
    Адрес:
    Омск
    Проект->Добавить новый->...
    или Проект->Добавить cуществующие->...
    есть руссифицированная версия? ппц как же я просмотрел

    у меня в новом проекте только HTML висит
    ---
    ща порыл на сайте, который ты указал, нашел зип архив со всеми видами асма, добавил к HTML прибавился масм)
     
  18. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    rubic_
    Там же надо дополнительный асм модуль к ней скачивать...
    И русификация также там скачивается.
    А может ты его и скачал, но только в IDE толком не подключил:dntknw:
    Настройки->ProgrammingLanguages кнопочка с 3 точками
     
  19. rubic_

    rubic_ Женя

    Публикаций:
    0
    Регистрация:
    9 июл 2007
    Сообщения:
    121
    Адрес:
    Омск
    да я скачал модуль для асма, я сижу и просто в шоке! руссификатор не скачивал
     
  20. rubic_

    rubic_ Женя

    Публикаций:
    0
    Регистрация:
    9 июл 2007
    Сообщения:
    121
    Адрес:
    Омск
    скачал руссификатор, просто теперь буду радоваться жизни, когда разберусь правда, может ты еще и тутариалы по нему на русском знаешь?