Здраствуйте. У меня вопрос по диалоговым окнам в фасме. Есть секция ресурсов: Код (Text): section '.rsrc' resource data readable ID_MAINDLG = 37 directory RT_DIALOG, dialogs resource dialogs,\ ID_MAINDLG,LANG_ENGLISH+SUBLANG_DEFAULT,main_dialog dialog main_dialog,'Dialog Window',50,50,200,100,WS_CAPTION+WS_SYSMENU dialogitem 'STATIC','&Caption:',-1,10,10,70,8,WS_VISIBLE enddialog Далее регистрирую и отбражаю диалог. Код (Text): wc WNDCLASSEX \ 48,0,WndProc,0,DLGWINDOWEXTRA,NULL,0,0,COLOR_BACKGROUND,0,[i]ID_MAINDLG[/i],0 ... invoke RegisterClassEx, wc invoke CreateDialogParam,[wc.hInstance],[i]ID_MAINDLG[/i],NULL,NULL,NULL invoke ShowWindow, eax,SW_SHOWNORMAL Правильно ли я делаю что вместо названия класса помещаю ID_MAINDLG? В аттаче лежит исходник.
нет. описание диалога в ресурсах - это не класс, а описание элементов диалогового окна, а ID_MAINDLG - идентификатор этого описания. используй лучше Код (Text): invoke DialogBoxParam,[hInstance],ID_MAINDLG ,0,main_dlg_proc,0
Ну я так и думал =) Просто не знаю как задать имя класса в секции ресурсов используя макросы фасма. Посмотрел все примеры - там такого нет. А мне именно надо зарегистрировать класс диалогового окна, чтобы все сообщения передавались в оконную процедуру, а не диалоговую. Конечно легче сделать так, как ты говоришь, но мне хочется по моему =) Спасибо за ответ!
Если зарегистрируешь свой класс, то это уже не будет диалог и использовать эти функции (DialogBox*) не получится.
Так мне и надо зарегистрировать диалоговый шаблон как класс окна и создать "окно" из этого класса. Но проблема в том что я не знаю откуда взять имя класса, потому что используя макроинструкции fasm'а (при составлении секции ресурсов) не задаешь его. На масме делал так: Код (Text): MyDialog DIALOG 10, 10, 205, 60 STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK CAPTION "bla bla" CLASS "DLGCLASS" BEGIN EDITTEXT IDC_EDIT, 15,17,111,13, ES_AUTOHSCROLL | ES_LEFT END Регистрация класса: Код (Text): ... ClassName db "DLGCLASS",0 ... mov wc.lpszClassName,OFFSET ClassName ... invoke RegisterClassEx, addr wc ...
Извиняюсь, спутал. Конечно, можно. Но в макросах фасма нет объявления класса диалога. Используй редактор ресурсов и включай ресурс директивой.
Вот это я и хотел услышать =) Тема закрыта. Всем спасибо. Попробую поковырятся в макросах, может получится переделать как-нибудь.