Создаю главное окно приложения на основании диалога из ресурсов, функцией CreateDialogParam. Регистрирую класс, который пытаюсь связать с диалогом из ресурсов, для чего необходимо в ресурсах, при описании диалога указать имя класса (или число). В resource.inc определён макрос: macro dialog label,title,x,y,cx,cy,style,exstyle,menu,fontname,fontsize {...}, который не предусматривает имени класса. Куда именно в описываемую макросом структуру вставить имя класса не могу понять. В литературе лишь вскользь говорится про формат диалогов в структуре .rsrc. Посмотрел WinHex'ом - класс оперделяется перед заголовком формы диалога, повторить на FASM не удалось (изменял макрос), видимо гдето изменяются смещения. Без класса всё работает замечательно, но класс нужен. Так же работает с созданным классом, если ресурсы подгружать из res-файла (в rc стандартным методом определяю класс диалога), но хочется сделать всё в одном файле, так будет понятнее другим, если выложить исходники, и не будет необходимости использовать сторонние инструменты для компиляции ресурсов. Только возможности FASM. Пожалуйста, подскажите, как с помощью FASM добавить диалог в ресурсы с нужным именем класса?
макросы фасма воспроизводят описание ресурсов не в полной мере. можно использовать обычный rc + любой компилятор rc->res + создавать секцию ресурсов прямо из res: Код (Text): section '.rsrc' resource from 'dialog.res' data readable или написать свой макрос вроде dialog
shoo Так всё получается, я писал, но хочется всё в одном файле, ктому же у меня очень много элементов в диалогах и несколько меню боюсь запутаюсь с идентификаторами
Ni Можно написать макрос dialogex, как расширенную версию dialog'a. Но всё же проще и удобнее использовать внешний редактор ресурсов и компиляцию в .res.
Ni Может быть ты просишь об этом? Правда там диалог создается не через CreateDialogParam, а через DialogBoxParam
IceStudent Я и хочу написать расширенный макрос, но не могу найти чёткое описание структуры диалога в ресурсах (в какое место, сколько байт, где скорректировать смещение и пр.) то что выцепил в WinHex не прокатило видимо не учёл какойто нюанс. Mikl__ Немного не то. DialogBoxParam по сути для создания модальных окон. Мне нужно независиме окно, точнее главное, на которое много всего навешенно, и необходимо обробатовать не только диалоговые месседжи. Всё в принципе нормально работает, но как писал выше хочу сделать всё только средствами FASM без сторонних компиляторов ресурсов.
IceStudent Точнее, макрос в resource.inc практически всё предусматривает и меню, и шрифты, только нет класса. Вот его и хочу добавить в тот макрос (класс должен прописываться перед заголовком диалога, там только 0. Возможно нужно что-то похожее как и с меню). Вот сам макрос: Код (Text): macro dialog label,title,x,y,cx,cy,style,exstyle,menu,fontname,fontsize { local data,size,items label dd RVA data,size,0,0 data dd style or DS_SETFONT,exstyle +0 dw items,x,y,cx,cy if menu+0 <> 0 dw 0FFFFh end if du menu+0,0,title,0 if fontname eq du 8,'MS Sans Serif',0 else du fontsize+0,fontname,0 end if align 4 dialog_size equ size = $ - data dialog_items equ items = dialog_items_counter dialog_items_counter = 0 }
Если кому интересно, разрешил эту проблему методом тыка.. а точнее повнимательнее посмотрел на свой макрос... как всегда дело в нолике... (и моей невнимательности ) В выше приведёном макросе (стандартном, из resource.inc) нужно заменить Код (Text): du menu+0,0,title,0 на Код (Text): du menu+0,class,0,title,0 ну и добавить class в заголовок макроса. Mikl__, спасибо. Последний файл оч. интересный, но там тоже класс не определяется на диалоге и на мой взгляд довольно рассточительно генерить ресурсы програмно, хотя позновательно и может пригодиться.