Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FormView на осове разных диалогов. 
:(
    Опции темы
v2v
Дата 10.4.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



каким образом заставиль FormView создаваться на основе разных диалогов из ресурсов
Вот так 
enum { IDD = IDD_FORMVIEWBASE1 }; 
я указываю 1 диалог на основе которого создаётся класс...

А вот тут я так понимаю обращаюся к этому диалогу 
FormViewBase::FormViewBase()
    : CFormView(FormViewBase::IDD)
{
}
...
Вот а теперь как сделать что бы в одном случае загружалось IDD_FORMVIEWBASE1  , а в другом некий IDD_FORMVIEWBASE2...


Спасибо.





--------------------
PM   Вверх
Earnest
Дата 10.4.2007, 20:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Выкинь нафиг этот enum... Вот за это разработчиков MFC - визардов убить надо... Смысла никакого, но зато вынуждает подключать resource.h уже в диалог-хедер, что плохо, т.к. порождает ненужные зависимости.
Никто не мешает нужный IDD_XXX передавать явно.

Что касается собственно вопроса. Класс-наследник CFormView объявляется DYNCREATE (чтобы создаваться в шаблоне CDocTemplate), а это значит, что он должен иметь конструктор без параметров. Поэтому вопрос как передать в базовый класс нужный IDD, напрямую зависит от вопроса зачем.
Как вариант, могу предложить такой метод:
Код

CFormViewBase::CFormViewBase():
    CFormView (GetCurrentIDD())
{
}

где GetCurrentIDD - глобальная или статическая в классе функция, которая определяет нужный IDD на основе контекста - флагов, или чего там у тебя.

С другой стороны, если CFormViewBase - это базовый класс для других форм-вью, то просто сделай ему конструктор с параметром.



--------------------
...
PM   Вверх
v2v
Дата 13.4.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



Замечательно, так работает.
продолжение вопроса:

 как мне сделать создание новых документов по выбору пункта меню(не новый документ), а пункта который создан мною...?


--------------------
PM   Вверх
Greeen
Дата 13.4.2007, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добавляешь в карту сообщений объекта приложения следующий макрос
Код

ON_COMMAND(ID_MY_ITEM, CWinApp::OnFileNew)



--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
v2v
Дата 16.4.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



Немного не то, но спсб... разобрался...


далее по теме... 

Последовательность инициализации.


У меня на моей форм-вью есть комбо-бокс.
Я хочу при создании заполнить его значениями. Для этого комбо-бокса я создал переменную m_combo.
Но в OnCreate() или PreCreate() эта переменная ещё не инициализирована!!!!.

В CDialog есть событие OnInitDialog() ... вот тут переменные уже проинициализированы... 
А в формью где мне перехватить такое событие????

Это сообщение отредактировал(а) v2v - 16.4.2007, 18:23


--------------------
PM   Вверх
Greeen
Дата 16.4.2007, 19:13 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

virtual void OnInitialUpdate(); // called first time after construct



--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
v2v
Дата 16.4.2007, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



то что надо!.
спсб.

Возник вопрос:

например:
ОнКриэйт() надо записывать в Месадж мап, а эту функцию нет... почему??


--------------------
PM   Вверх
Greeen
Дата 16.4.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Смотрим MSDN по слову OnInitialUpdate:
Цитата
Called by the framework after the view is first attached to the document, but before the view is initially displayed
.
То есть это просто виртуальная функция. А ON_WM_CREATE() - макрос связывающий обработку сообщения WM_CREATE с функцией int OnCreate(LPCREATESTRUCT lpCreateStruct)


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


 




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


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

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