powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / CDialog && (CFrameWnd + CSplitterWnd) = ?
13 сообщений из 13, страница 1 из 1
CDialog && (CFrameWnd + CSplitterWnd) = ?
    #33323310
KALAKOM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В диалоге (например CDlgTest) создаю CLIstCtrl - слева, а CListBox - справа.
Хочу чтобы между ними был CSplitterWnd и выполнял то, для чего он создан (имеется ввиду CSplitterWnd).

Как создавать CSplitterWnd во фреймовом окне знаю.

Какая последовательность действий в этом случае.

Спасибо.
...
Рейтинг: 0 / 0
CDialog && (CFrameWnd + CSplitterWnd) = ?
    #33323855
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CSplitterWnd не будет работать в диалоге. Он работает только внутри CFrameWnd (фрейм должен быть его родительским окном, и , на сколько я помню, непосредственным родителем).
Вообще, CSplitterWnd очень негибкий класс, хотя мог бы быть гораздо гибче.
Очень я с ним плотно повозился -- могу сказать, лучше свой написать, чем заставить его работать. Короче, он предназначен только для одного применения, для которого он используется в генеренных визардом проектах - разделять N View в одном фрейме и динамический Splitter. Больше ни для чего это чудо не годится.

Рекомендую найти какой-нибудь самописанный сплиттер, их много для MFC, хотя бы на codeguru .
...
Рейтинг: 0 / 0
CDialog && (CFrameWnd + CSplitterWnd) = ?
    #33325704
KALAKOM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для того чтобы это получилось надо сделать так:
http://www.rsdn.ru/article/mfc/dlgframes.xml
...
Рейтинг: 0 / 0
CDialog && (CFrameWnd + CSplitterWnd) = ?
    #33325723
KALAKOM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос следующий:

С помощью методы CSplitterWnd.CreateView мы создаем объект виды используя RUNTIME_CLASS. Если у меня на этом виде созданы какие-нибудь контролы, то каким образом я до них доберусь, ведь у меня нет указателя на объект вида который был создан с помощью RUNTIME_CLASS.

Как получить указатель на объект созданный таким образом.

Спасибо.
...
Рейтинг: 0 / 0
CDialog && (CFrameWnd + CSplitterWnd) = ?
    #33326197
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну найти в окне-то всегда можно. Или через список views для данного document.
...
Рейтинг: 0 / 0
CDialog && (CFrameWnd + CSplitterWnd) = ?
    #33326198
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще в сплиттере есть метод типа GetPane( m, n ).
...
Рейтинг: 0 / 0
CDialog && (CFrameWnd + CSplitterWnd) = ?
    #33326349
KALAKOM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По поводу первого ответа:

Когда мы создаем фрейм то может получиться так, что к нему не будет прикреплен документ(просто нет в нем необходимости). Т.о. у нас нет документа а слеовательно и нет ссылки на его представление. Даже если бы и был документ, то как получить через этот документ ссылку на второой вид. Ведь в сплитере допустим два вида и классы у них разные.

Нет ли возможности выдернуть эти указатели из структуры CRuntimeClass что возвращает RUNTIME_CLASS.

По поводу второго ответа надо попробывать, думаю что получиться.

Спасибо за ответы.
...
Рейтинг: 0 / 0
CDialog && (CFrameWnd + CSplitterWnd) = ?
    #33326448
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда мы создаем фрейм то может получиться так, что к нему не будет прикреплен документ(просто нет в нем необходимости).

ЭЭ, как бы сложно это через CDocemplate создать представление без документа. Но можно , конечно. Но зачем, сделай пустой фиктивный документ и все. Это достаточно стандартный прием.

Даже если бы и был документ, то как получить через этот документ ссылку на второой вид. Ведь в сплитере допустим два вида и классы у них разные.

Ну значит из другого документа. А еще есть Aplication со списком всех DocTemplate, а в каждом DocTemplate - список созданных им документов и кажется представлений тоже. Но гораздо проще при создании представления сохранить нужные указатели в, например, документе. Можно и в Application, но тут уже думать надо , не будет ли это криво.

Нет ли возможности выдернуть эти указатели из структуры CRuntimeClass что возвращает RUNTIME_CLASS.

Нет. CRuntimeClass - это по сути кусок фабрики классов, грубо говоря, указатель на функцию создания объекта.

Указатели на все создаваемое добро сохраняются в CDocTemplate, который занимается созданием. Хотя не на долго.

[/quot]
...
Рейтинг: 0 / 0
CDialog && (CFrameWnd + CSplitterWnd) = ?
    #33328210
KALAKOM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все понятно, спасибо.

Из разговора напрашивается другой вопрос ЧТО ЛУЧШЕ для поиска объектов в приложении через их указатели:

1.) Использовать CManager - класс который хранит указатели на шаблоны документов ну и т.д. можно найти любой объект.

ИЛИ

2.) Завести структуру в глобальной области видимости с указателями на каждый класс объекта в программе и в конструкторе каждого класса записывать указатель this в свое поле структуры, а затем искать объекты используя эту структуру.

ИЛИ

есть еще какой-нибудь способ

Спасибо.
...
Рейтинг: 0 / 0
CDialog && (CFrameWnd + CSplitterWnd) = ?
    #33328269
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KALAKOM.....ЧТО ЛУЧШЕ для поиска объектов в приложении через их указатели......

А зачем простите искать ?
Тем более другой вид... Ведь идеология была заложена таковой, что Вы работаете с документом, а вид - это способ отображения. Данные отображаться могут по разному... Единственный тук-тук к другому виду - как правило это апдэйт. Но простите, более элегантно апдэйтить сам обьект подверженный изменению. А где его экземпляры валяються - да пофигу...

Рекомендую прочитать книжку Джэфа Элджера...
Там найдёте много интересного... Правда программу свою после этого - будете переделывать :)
...
Рейтинг: 0 / 0
CDialog && (CFrameWnd + CSplitterWnd) = ?
    #33328330
KALAKOM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
За книгу спасибо, постараюсь найти.

Допустим вот структура объект создается в обекте:

CFrameWnd - 1 - 2 - 3 - 4 - 5
т.е. Класс 1 является членом CFrameWnd, класс 2 является членом 1 и т.д.

в 3 есть визуальные компоненты, в 5 происходит то, что должно изменить данные в 3.

Как добраться до объекта 3?

Спасибо.
...
Рейтинг: 0 / 0
CDialog && (CFrameWnd + CSplitterWnd) = ?
    #33328616
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KALAKOM...Как добраться до объекта 3?....

Понимаете ли в чём дело...
Попробую обьяснить...
Предположим Вы добрались до обьекта 3. И что ? кто вообще сказал, что его нужно абдэйтить ? Об этом знает только класс отображения. И это правильно - работает инкапсуляция. Другое дело Вам нужно сообщить. Тут как правило стандартное "апдэйт олл вью" (MFC). И идеалогия апдэйта - через документ (MFC) а почему ? Да потому, что данные храняться в документе. А виды - есть способы их (данных) отображения. Посему если Вам уж хочеться "добраться" - то в MFC например нуна просто регистнуть все вьюшки в документе. И стандартный описанный выше механизм мона юзать (если ничего не попутал).

Это шаг первый. ломовой..

Шаг второй (см. книгу). В данной книге идут рассуждения на тему корректности данных, их экземплярности... Вводиться понятия умный указатель, мудрый, кристалл, грань и прочая словесная шумиха. Но Вам никто не мешает спроецировать любой класс на подобную же технологию (документ-вид, почти..). То есть, давайте похфантазируем...

представте Ваш класс. Вы изменяете его свойства (данные) и все его отображения меняються по программе. Просто к юзанью. Оптимально к скорости (без апдэйта ненужных представлений данных).

всё... далее сами... не буду мешать полёту Вашей фантазии :)

удачи Вам
(круглый)
...
Рейтинг: 0 / 0
CDialog && (CFrameWnd + CSplitterWnd) = ?
    #33329699
KALAKOM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На данном этапе я еще не совсем познал всю философию MFC во всех ее тонкостях, да может быть и саму концепцию ООП в С++ (ее тонкие возможности).
Но Ваши высказывания немного заставили меня взглянуть на все это чуть по другому.
Надеюсь, что когда изучу необходимый материал, то буду Вам достойным собеседником.

Спасибо.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / CDialog && (CFrameWnd + CSplitterWnd) = ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]