Как на FASM, в ресурсах, вставить имя класса в диалоговое окно?

Тема в разделе "WASM.BEGINNERS", создана пользователем Ni, 23 апр 2008.

  1. Ni

    Ni New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2008
    Сообщения:
    12
    Создаю главное окно приложения на основании диалога из ресурсов, функцией CreateDialogParam. Регистрирую класс, который пытаюсь связать с диалогом из ресурсов, для чего необходимо в ресурсах, при описании диалога указать имя класса (или число). В resource.inc определён макрос: macro dialog label,title,x,y,cx,cy,style,exstyle,menu,fontname,fontsize {...}, который не предусматривает имени класса. Куда именно в описываемую макросом структуру вставить имя класса не могу понять. В литературе лишь вскользь говорится про формат диалогов в структуре .rsrc. Посмотрел WinHex'ом - класс оперделяется перед заголовком формы диалога, повторить на FASM не удалось (изменял макрос), видимо гдето изменяются смещения. Без класса всё работает замечательно, но класс нужен. Так же работает с созданным классом, если ресурсы подгружать из res-файла (в rc стандартным методом определяю класс диалога), но хочется сделать всё в одном файле, так будет понятнее другим, если выложить исходники, и не будет необходимости использовать сторонние инструменты для компиляции ресурсов. Только возможности FASM. Пожалуйста, подскажите, как с помощью FASM добавить диалог в ресурсы с нужным именем класса?
     
  2. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    макросы фасма воспроизводят описание ресурсов не в полной мере.
    можно использовать обычный rc + любой компилятор rc->res + создавать секцию ресурсов прямо из res:
    Код (Text):
    1. section '.rsrc' resource from 'dialog.res' data readable
    или написать свой макрос вроде dialog
     
  3. Ni

    Ni New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2008
    Сообщения:
    12
    shoo
    Так всё получается, я писал, но хочется всё в одном файле, ктому же у меня очень много элементов в диалогах и несколько меню боюсь запутаюсь с идентификаторами :dntknw:
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Ni
    Можно написать макрос dialogex, как расширенную версию dialog'a.

    Но всё же проще и удобнее использовать внешний редактор ресурсов и компиляцию в .res.
     
  5. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Ni
    Может быть ты просишь об этом? Правда там диалог создается не через CreateDialogParam, а через DialogBoxParam
     
  6. Ni

    Ni New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2008
    Сообщения:
    12
    IceStudent
    Я и хочу написать расширенный макрос, но не могу найти чёткое описание структуры диалога в ресурсах (в какое место, сколько байт, где скорректировать смещение и пр.) то что выцепил в WinHex не прокатило :dntknw: видимо не учёл какойто нюанс.

    Mikl__
    Немного не то. DialogBoxParam по сути для создания модальных окон. Мне нужно независиме окно, точнее главное, на которое много всего навешенно, и необходимо обробатовать не только диалоговые месседжи. Всё в принципе нормально работает, но как писал выше хочу сделать всё только средствами FASM без сторонних компиляторов ресурсов.
     
  7. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Ni
    Может быть это поможет, правда это не FASM, но я думаю разберешься
     
  8. Ni

    Ni New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2008
    Сообщения:
    12
    IceStudent
    Точнее, макрос в resource.inc практически всё предусматривает и меню, и шрифты, только нет класса. Вот его и хочу добавить в тот макрос (класс должен прописываться перед заголовком диалога, там только 0. Возможно нужно что-то похожее как и с меню).
    Вот сам макрос:
    Код (Text):
    1. macro dialog label,title,x,y,cx,cy,style,exstyle,menu,fontname,fontsize
    2.  { local data,size,items
    3.    label dd RVA data,size,0,0
    4.    data dd style or DS_SETFONT,exstyle +0
    5.    dw items,x,y,cx,cy
    6.    if menu+0 <> 0
    7.     dw 0FFFFh
    8.    end if
    9.    du menu+0,0,title,0
    10.    if fontname eq
    11.     du 8,'MS Sans Serif',0
    12.    else
    13.     du fontsize+0,fontname,0
    14.    end if
    15.    align 4
    16.    dialog_size equ size = $ - data
    17.    dialog_items equ items = dialog_items_counter
    18.    dialog_items_counter = 0 }
     
  9. Ni

    Ni New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2008
    Сообщения:
    12
    Если кому интересно, разрешил эту проблему методом тыка.. а точнее повнимательнее посмотрел на свой макрос... как всегда дело в нолике... (и моей невнимательности ;) )
    В выше приведёном макросе (стандартном, из resource.inc) нужно заменить
    Код (Text):
    1. du menu+0,0,title,0
    на
    Код (Text):
    1. du menu+0,class,0,title,0
    ну и добавить class в заголовок макроса.

    Mikl__, спасибо. Последний файл оч. интересный, но там тоже класс не определяется на диалоге :dntknw: и на мой взгляд довольно рассточительно генерить ресурсы програмно, хотя позновательно и может пригодиться.