Вопрос к программистам: MFC. Диалог.

L
На сайте с 29.10.2006
Offline
110
561

Думал куда поместить тему. Не нашел, но по определению подходит к Курилке как

Общение на любые темы, не связанные с работой

Хотелось спросить у программистов совета.

Пишу програмку на Visual C++, хочу через редактор ресурсов создать диалоговое окно.

Через WinApi писал, вручную окна создавал в MFC (с помощью структуры DLGTEMPLATE), а вот автоматом через ресрсы не доводилось. Никак не могу понять как это делается.

Буду благодарен за любые советы по этой теме.

SeBlock (/ru/forum/851994) - программа для ведения проектов по НЧ/СЧ. Буду рад отзывам/комментариям.
S
На сайте с 15.07.2008
Offline
139
#1

Борясь с ленью таки запускаю Студию...

Создаю новый проект, открываю вкладку "Resource View". В узле дерева ресурсов "Dialog" кликаю правой кнопкой мыши и выбираю пункт Add Resource. В окошке выбираю Dialog/IDD_DIALOGBAR и нажимаю кнопку New. Создался пустой диалог. F4. Вылазит окно с пропертями. Не забываем задать Border, Caption, Title Bar, System Menu чтобы окошко было более-менее похоже на диалог. Далее, из вкладки Toolbox перетягиваю кнопку Button1. Сохраняю эту красоту. :)

Сохраняю весь проект на тот случай, если следующим вопросом будет "А как повесить событие клика на кнопку?..." :)

L
На сайте с 29.10.2006
Offline
110
#2

Это все понятно. Диалоги создавал не раз, но вручную, прописываю шаблон диалогового окна.

Например, ранее я создавал такой шаблончик

DLGTEMPLATE shablon={

WS_VISIBLE|WS_SYSMENU,
0,0,
100,100,
300,300
};

Затем делал класс окна:

class MyWindow : public CDialog

{
public:
MyWindow();
BOOL OnInitDialog();
DECLARE_MESSAGE_MAP();
};

И класс приложения:

class Applic : public CWinApp

{
public:
BOOL InitInstance();
};

А затем в cpp файле уже это окно создавалось главным образом так (само-собой не все, очень упрощенно):

MyWindow::MyWindow()

{
InitModalIndirect(&shablon);
}

И класс приложение:

Applic application;


BOOL Applic::InitInstance()
{
MyWindow dg;
m_pMainWnd=&dg;
dg.DoModal();

return TRUE;
}

Здесь все четко и ясно - когда я сам все создавал.

Но вот с ресурсами проблема. Я создал саму картинку диалогового окна, она описана в rc файле, но как дальше - я, ведь, не могу сделать так же как и ранее:

MyWindow::MyWindow()

{
InitModalIndirect(&shablon);
}

т.к. этого шаблона нет, к примеру.

Честно говоря я просто в небольшом тупике. Если бы понять саму суть этого автоматического создания все дальше бы пошло само собой, но вот с этим запутался.

Был бы очень благодарен за подсказку.

Kide
На сайте с 29.03.2007
Offline
69
#3

Может сразу полное ТЗ огласить? ;)

Hasta La Victoria Siempre!
S
На сайте с 15.07.2008
Offline
139
#4
Kide:
Может сразу полное ТЗ огласить? ;)

Скорее не ТЗ, а задание на лабу... ;)

Kide
На сайте с 29.03.2007
Offline
69
#5
Santyago:
Скорее не ТЗ, а задание на лабу...

Та не... Каникулы сейчас... Так что все-таки ТЗ

L
На сайте с 29.10.2006
Offline
110
#6

Господа, давайте без флуда. Не не лабу, а просто для души.

На лабах научился все вручную писать, хотелось бы научится с использованием ресурса, но что-то не выходит :)

Luxer добавил 17.07.2008 в 23:03

Спасибо всем отписавшимся, тему можно закрывать.

Проблема была в том что я по привычке создавал пустое приложение без "фарша". С использованием же MFC мастера он по умолчанию добавляет то что нужно на самом старте.

Еще раз всем спасибо :)

S
На сайте с 15.07.2008
Offline
139
#7
Luxer:
Господа, давайте без флуда. Не не лабу, а просто для души.
На лабах научился все вручную писать, хотелось бы научится с использованием ресурса, но что-то не выходит :)

Luxer добавил 17.07.2008 в 23:03
Спасибо всем отписавшимся, тему можно закрывать.

Проблема была в том что я по привычке создавал пустое приложение без "фарша". С использованием же MFC мастера он по умолчанию добавляет то что нужно на самом старте.

Еще раз всем спасибо :)

Но я всё же вставлю свои пять копеек, раз Kide утверждает, что дело очень серьёзное... :)

Вариантов два.

1. Создание окна непосредственно из ресурса.


CDialog dlg(IDD_DIALOGBAR);
dlg.DoModal();

2. Создание окна через класс.

В Class View создаётся новый MFC класс-наследник CDialog. Указывается его название и ресурс диалога.


MyDialogBar wnd;
wnd.DoModal();

Самое главное - не забыть в пропертях ресурса окна установить Style=Popup. А то будет не совсем диалог..... )))

Удачи. :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий