Диалоговое окно на fasme'е

Тема в разделе "WASM.WIN32", создана пользователем afybc, 3 июл 2006.

  1. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    Здраствуйте.
    У меня вопрос по диалоговым окнам в фасме.
    Есть секция ресурсов:
    Код (Text):
    1. section '.rsrc' resource data readable
    2.  
    3.   ID_MAINDLG       = 37
    4.  
    5.   directory RT_DIALOG, dialogs
    6.  
    7.   resource dialogs,\
    8.        ID_MAINDLG,LANG_ENGLISH+SUBLANG_DEFAULT,main_dialog
    9.  
    10.   dialog main_dialog,'Dialog Window',50,50,200,100,WS_CAPTION+WS_SYSMENU
    11.     dialogitem 'STATIC','&Caption:',-1,10,10,70,8,WS_VISIBLE
    12.   enddialog
    Далее регистрирую и отбражаю диалог.
    Код (Text):
    1. wc WNDCLASSEX \
    2.      48,0,WndProc,0,DLGWINDOWEXTRA,NULL,0,0,COLOR_BACKGROUND,0,[i]ID_MAINDLG[/i],0
    3. ...
    4.   invoke            RegisterClassEx, wc
    5.   invoke            CreateDialogParam,[wc.hInstance],[i]ID_MAINDLG[/i],NULL,NULL,NULL
    6.   invoke            ShowWindow, eax,SW_SHOWNORMAL
    Правильно ли я делаю что вместо названия класса помещаю ID_MAINDLG?
    В аттаче лежит исходник.
     
  2. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    нет. описание диалога в ресурсах - это не класс, а описание элементов диалогового окна, а ID_MAINDLG - идентификатор этого описания.
    используй лучше
    Код (Text):
    1.     invoke DialogBoxParam,[hInstance],ID_MAINDLG ,0,main_dlg_proc,0
     
  3. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    Ну я так и думал =) Просто не знаю как задать имя класса в секции ресурсов используя макросы фасма. Посмотрел все примеры - там такого нет. А мне именно надо зарегистрировать класс диалогового окна, чтобы все сообщения передавались в оконную процедуру, а не диалоговую. Конечно легче сделать так, как ты говоришь, но мне хочется по моему =)

    Спасибо за ответ!
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Если зарегистрируешь свой класс, то это уже не будет диалог и использовать эти функции (DialogBox*) не получится.
     
  5. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    Так мне и надо зарегистрировать диалоговый шаблон как класс окна и создать "окно" из этого класса.
    Но проблема в том что я не знаю откуда взять имя класса, потому что используя макроинструкции fasm'а (при составлении секции ресурсов) не задаешь его.

    На масме делал так:
    Код (Text):
    1. MyDialog DIALOG 10, 10, 205, 60
    2.    STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX |
    3.    WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
    4.    CAPTION "bla bla"
    5.    CLASS "DLGCLASS"
    6.    BEGIN
    7.        EDITTEXT         IDC_EDIT,   15,17,111,13, ES_AUTOHSCROLL | ES_LEFT
    8.    END
    Регистрация класса:
    Код (Text):
    1. ...
    2. ClassName db "DLGCLASS",0
    3. ...
    4. mov   wc.lpszClassName,OFFSET ClassName
    5. ...
    6. invoke RegisterClassEx, addr wc
    7. ...
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Извиняюсь, спутал. Конечно, можно. Но в макросах фасма нет объявления класса диалога. Используй редактор ресурсов и включай ресурс директивой.
     
  7. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    Вот это я и хотел услышать =) Тема закрыта.
    Всем спасибо.
    Попробую поковырятся в макросах, может получится переделать как-нибудь.