Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создать основное диалог окно с помощью ресурсов 
V
    Опции темы
Алексеу
Дата 5.7.2008, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



Здравствуйте!

Вопрос такой - в WinAPI легко создать основное диалоговое окно программы с помощью .rc Возможно ли это в МФЦ? Мне сказали что невозможно... так ли это? Если нет, то как создать такое окно?
PM MAIL   Вверх
Earnest
Дата 7.7.2008, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Никогда больше не слушай того, кто тебе это сказал... smile 
Создавай ресурс диалога точно так же как для программы с API.
А приложение проще всего сгенерировать визардом - выбери приложение Dialog Based. 


--------------------
...
PM   Вверх
Алексеу
Дата 8.7.2008, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



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

Проблема в том что в MFC, насколько я знаю при отображении модального окна требуется структурa DLGTEMPLATE которая не создается при создании окна с помощью ресурсов :(
PM MAIL   Вверх
Earnest
Дата 9.7.2008, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(Алексеу @  8.7.2008,  15:22 Найти цитируемый пост)
Проблема в том что в MFC, насколько я знаю при отображении модального окна требуется структурa DLGTEMPLATE которая не создается при создании окна с помощью ресурсов :( 

Нет. MFC не отнимает возможностей, которые есть в программировании серез голый API, а только добавляет.

Код

class CMyDialog: public CDialog
{
public:
   CMyDialog(): CDialog (IDD_MYDIALOG) {}
};

...
if (CMyDialog().DoModal() == IDOK)
  ...;



--------------------
...
PM   Вверх
Алексеу
Дата 17.7.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



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

Все равно пробую - не получается. Сам понимаю что бред написал, но абсолютно не представляю как отобразить окно, нарисованное в ресурсах.
Наресованное окно имеет идентификатор IDD_DIALOG1

То что есть:

Код хедера:

Код

#include <afxwin.h>
#include "resource.h"

class MainDialog : public CDialog
{
public:
    MainDialog():CDialog(IDD_DIALOG1){};
    BOOL OnInitDialog();
    DECLARE_MESSAGE_MAP();
};

class Applic : public CWinApp
{
public:
    BOOL InitInstance();
};


Код главного файла

Код

#include "mainHead.h"

BOOL MainDialog::OnInitDialog()
{
    MainDialog().DoModal();
    return TRUE;
}


BEGIN_MESSAGE_MAP(MainDialog,CDialog)    
END_MESSAGE_MAP()

Applic appiclation;

BOOL Applic::InitInstance()
{
    MainDialog mv;
    m_pMainWnd=&mv;
    mv.DoModal();

return TRUE;
}



Как можно отобразить это окно?

Это сообщение отредактировал(а) Алексеу - 17.7.2008, 17:26
PM MAIL   Вверх
Earnest
Дата 18.7.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(Алексеу @  17.7.2008,  17:50 Найти цитируемый пост)
BOOL MainDialog::OnInitDialog()
{
    MainDialog().DoModal();
    return TRUE;
}

Это действительно бред. Здесь должен быть вызов базового метода OnInitDialog.

Остальное вроде правильно.Только в InitInstance верни FALSE - после модального цикла жизни нет...
Если не получится, сделай визардом dialog-based приложение и посмотри, что в InitInstance не хватает...
А можешь просто зайти отладчиком в DoModal и посмотреть, где отказ происходит. Раз уж хочешь ручками.



--------------------
...
PM   Вверх
Алексеу
Дата 19.7.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



К сожалению все равно не выходит. Посижу еще подумаю над этим.

Но хотелось бы тогда задать вопрос - с визардом делать все намного легче, но как создать в нем дополнительное диалоговое окно, которое бы отображалось при нажатии на какую-то кнопку? На учебе мы это абсолютно проскочили - все делали либо вручную полностью с прорисовкой окна или на WinApi, а как это сделать в MFC?

Заранее спасибо за ответ
PM MAIL   Вверх
Earnest
Дата 21.7.2008, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Возможно, у тебя на диалоге есть какой-то элемент, который требует дополнительной инициализации: рич-эдит или лист-контрол или еще что-то, вот диалог и не создается. Еще раз советую: прежде чем пытаться сделать что-то с нуля, попробуй визардом. Потом, если еть желание разобраться - разберешься по коду.
А диалог делается просто:
1) создаешь диалоговый ресурс
2) создаешь класс-наследник CDialog
3) в обработчике кнопке пишешь:
Код

   CMyDialog dlg;
   dlg.DoModal();



--------------------
...
PM   Вверх
Алексеу
Дата 22.7.2008, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



Большое спасибо за помощь!
Все окна отображаются.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1097 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.