Форум программистов, компьютерный форум CyberForum.ru

Помогите с documen/view - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как получить время с интернета? http://www.cyberforum.ru/cpp-beginners/thread487941.html
Объясните, как получить время из нета.. если можно, то укажите IP адрес, который необходим
C++ Как решить проблему fast drawing в borlandc 3.1 ? Как решить проблему fast drawing в borlandc 3.1 ? http://www.cyberforum.ru/cpp-beginners/thread487931.html
Visual C++ Как подключить ActiveX
Подскажите, пожалуйста, как в VC++ использовать ActiveX конрол. так неполучается //dlgDlg.h class CdlgDlg : public CDialog { // ... public: CCwindow1 m_TestControl; // ...
Создание MFC ActiveX control Visual C++
При создании MFC ActiveX control, его обязательно ручками рисовать или можно как-то подключить готовый диалог? Есть ли такая возможность?
C++ Локализация(интеренационализация) приложения VC++ http://www.cyberforum.ru/cpp-beginners/thread487843.html
Извиняюсь за столь примитивный вопрос, но все таки может кто-то просветит как это сделать. В MSDN нашел как это делать только через DLL, но так не очень нравится. Хотелось бы что бы все ресурсы(в смысле строки) хранились в каком нибудь текстовом файле(ini или xml), и язык можно было бы изменить во время работы програмы, т.е. без перекомпиляции.
C++ Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!! Привет всем! Народ выручайте плиз, начальство поставило задачу и сказало в течении недели ее выполнить! Суть задачи вот в чем: Есть машина в сети под управлением Windows 98, к COM портам этой машины подключены два устройства(терминал весовой 'ТВ-003/05Д'), эти терминалы опрашивает некая програмка и пишет полученные данные в базу в формате Paradox, есть в этой проге один глюк она позволяет вес... подробнее

Показать сообщение отдельно
Tremr
Сообщений: n/a
08.09.2010, 19:20     Помогите с documen/view
Я нашел решение! Урррааа!!! Может кому будет интересно. Вот оно.

AppWizard для MDI интерфейса создает три класс рожденные, соответственно, от CDocument, CMDICildWnd (фрейм) и CView (этот класс мы допустим рождаем от CTreeView).

Создаем еще два класса рожденные соответственно от CMDICildWnd (фрейм) и, например, CListView.
Класс фрейма назовем CMyListFrame. А клас вида - CMyListView. Классы, которые создал AppWizard, пусть называются CMyDoc, CChildFrame, CChildView.

Если запустить программу сейчас, то в главном ее окне появится одно окно CChildFrame с CChildView внутри.
Можно сколько угодно таких окон выспетить, добавив несколько простых команд. Но чтобы к имеющемуся документу добавить еще одно отдельное окно с другим видом, нужно постараться. Что я и делал, причем долго безуспешно.

Решение лежит в классе шаблона документа CMultiDocTemplate. Вернее там лежит невозможность решения. Если посмотреть текст функции родительского класса CDocTemplate::CreateNewFrame, которая отвечает за создание фрейма с прикрепленными к нему видом и документом, то можно увидеть, что функция создает фрейм того класса который был задан при создании самого шаблона.
Когда я просмотрел на эту функцию у меня родилась идея создавать фрейм другого класса. Как это осуществить?
Надо создать, ни много ни мало, дочерний к CMultiDocTemplate класс. В котором написать
функцию полностью повторяющую CDocTemplate::CreateNewFrame, но вместо записанного в шаблоне класса для фрейма использовать другой класс. Например тот, который будет передан в эту функцию в качестве параметра (необходимо использовать CRuntimeClass*).

Теперь в функции C<имя пректа>App::InitInstance надо просто подменить тип указателя шаблона документ с CMultiDocTemplate на написанный нами дочерний класс шаблона. Ну и соответственно вызвать конструктор этого класса. А потом где-либо запускать функцию для создания нового фрейма, которую мы написали для дочернего шаблона документа.
И все создастся новый фрейм заданного класса.

Теперь еще одно. Чтобы фрейм нового класса присоединял к себе другой вид. Для этого существуюет функция OnCreateClient. Ее необходимо переопределить в классе этого фрейма примерно так, как написал в этой теме камрад ShepA. Кстати большое ему за это спасибо.

В итоге для каждого нового типа окна нам надо написать новый класс вида и новый класс фрейма, в функции OnCreateClient которого мы прописываем прикрепление этого вида.

Если кому непонятно, а понять хочется, пишите мне на tremr@mail.ru. Я вышлю вам свой проект реализующий эту фичу.
 
Текущее время: 01:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru