|
|
|
CDialog && (CFrameWnd + CSplitterWnd) = ?
|
|||
|---|---|---|---|
|
#18+
В диалоге (например CDlgTest) создаю CLIstCtrl - слева, а CListBox - справа. Хочу чтобы между ними был CSplitterWnd и выполнял то, для чего он создан (имеется ввиду CSplitterWnd). Как создавать CSplitterWnd во фреймовом окне знаю. Какая последовательность действий в этом случае. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 16:55 |
|
||
|
CDialog && (CFrameWnd + CSplitterWnd) = ?
|
|||
|---|---|---|---|
|
#18+
CSplitterWnd не будет работать в диалоге. Он работает только внутри CFrameWnd (фрейм должен быть его родительским окном, и , на сколько я помню, непосредственным родителем). Вообще, CSplitterWnd очень негибкий класс, хотя мог бы быть гораздо гибче. Очень я с ним плотно повозился -- могу сказать, лучше свой написать, чем заставить его работать. Короче, он предназначен только для одного применения, для которого он используется в генеренных визардом проектах - разделять N View в одном фрейме и динамический Splitter. Больше ни для чего это чудо не годится. Рекомендую найти какой-нибудь самописанный сплиттер, их много для MFC, хотя бы на codeguru . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 22:14 |
|
||
|
CDialog && (CFrameWnd + CSplitterWnd) = ?
|
|||
|---|---|---|---|
|
#18+
Для того чтобы это получилось надо сделать так: http://www.rsdn.ru/article/mfc/dlgframes.xml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 16:20 |
|
||
|
CDialog && (CFrameWnd + CSplitterWnd) = ?
|
|||
|---|---|---|---|
|
#18+
Вопрос следующий: С помощью методы CSplitterWnd.CreateView мы создаем объект виды используя RUNTIME_CLASS. Если у меня на этом виде созданы какие-нибудь контролы, то каким образом я до них доберусь, ведь у меня нет указателя на объект вида который был создан с помощью RUNTIME_CLASS. Как получить указатель на объект созданный таким образом. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 16:25 |
|
||
|
CDialog && (CFrameWnd + CSplitterWnd) = ?
|
|||
|---|---|---|---|
|
#18+
Ну найти в окне-то всегда можно. Или через список views для данного document. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 22:44 |
|
||
|
CDialog && (CFrameWnd + CSplitterWnd) = ?
|
|||
|---|---|---|---|
|
#18+
А еще в сплиттере есть метод типа GetPane( m, n ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 22:44 |
|
||
|
CDialog && (CFrameWnd + CSplitterWnd) = ?
|
|||
|---|---|---|---|
|
#18+
По поводу первого ответа: Когда мы создаем фрейм то может получиться так, что к нему не будет прикреплен документ(просто нет в нем необходимости). Т.о. у нас нет документа а слеовательно и нет ссылки на его представление. Даже если бы и был документ, то как получить через этот документ ссылку на второой вид. Ведь в сплитере допустим два вида и классы у них разные. Нет ли возможности выдернуть эти указатели из структуры CRuntimeClass что возвращает RUNTIME_CLASS. По поводу второго ответа надо попробывать, думаю что получиться. Спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2005, 11:09 |
|
||
|
CDialog && (CFrameWnd + CSplitterWnd) = ?
|
|||
|---|---|---|---|
|
#18+
Когда мы создаем фрейм то может получиться так, что к нему не будет прикреплен документ(просто нет в нем необходимости). ЭЭ, как бы сложно это через CDocemplate создать представление без документа. Но можно , конечно. Но зачем, сделай пустой фиктивный документ и все. Это достаточно стандартный прием. Даже если бы и был документ, то как получить через этот документ ссылку на второой вид. Ведь в сплитере допустим два вида и классы у них разные. Ну значит из другого документа. А еще есть Aplication со списком всех DocTemplate, а в каждом DocTemplate - список созданных им документов и кажется представлений тоже. Но гораздо проще при создании представления сохранить нужные указатели в, например, документе. Можно и в Application, но тут уже думать надо , не будет ли это криво. Нет ли возможности выдернуть эти указатели из структуры CRuntimeClass что возвращает RUNTIME_CLASS. Нет. CRuntimeClass - это по сути кусок фабрики классов, грубо говоря, указатель на функцию создания объекта. Указатели на все создаваемое добро сохраняются в CDocTemplate, который занимается созданием. Хотя не на долго. [/quot] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2005, 14:21 |
|
||
|
CDialog && (CFrameWnd + CSplitterWnd) = ?
|
|||
|---|---|---|---|
|
#18+
Все понятно, спасибо. Из разговора напрашивается другой вопрос ЧТО ЛУЧШЕ для поиска объектов в приложении через их указатели: 1.) Использовать CManager - класс который хранит указатели на шаблоны документов ну и т.д. можно найти любой объект. ИЛИ 2.) Завести структуру в глобальной области видимости с указателями на каждый класс объекта в программе и в конструкторе каждого класса записывать указатель this в свое поле структуры, а затем искать объекты используя эту структуру. ИЛИ есть еще какой-нибудь способ Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2005, 14:36 |
|
||
|
CDialog && (CFrameWnd + CSplitterWnd) = ?
|
|||
|---|---|---|---|
|
#18+
KALAKOM.....ЧТО ЛУЧШЕ для поиска объектов в приложении через их указатели...... А зачем простите искать ? Тем более другой вид... Ведь идеология была заложена таковой, что Вы работаете с документом, а вид - это способ отображения. Данные отображаться могут по разному... Единственный тук-тук к другому виду - как правило это апдэйт. Но простите, более элегантно апдэйтить сам обьект подверженный изменению. А где его экземпляры валяються - да пофигу... Рекомендую прочитать книжку Джэфа Элджера... Там найдёте много интересного... Правда программу свою после этого - будете переделывать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2005, 14:55 |
|
||
|
CDialog && (CFrameWnd + CSplitterWnd) = ?
|
|||
|---|---|---|---|
|
#18+
За книгу спасибо, постараюсь найти. Допустим вот структура объект создается в обекте: CFrameWnd - 1 - 2 - 3 - 4 - 5 т.е. Класс 1 является членом CFrameWnd, класс 2 является членом 1 и т.д. в 3 есть визуальные компоненты, в 5 происходит то, что должно изменить данные в 3. Как добраться до объекта 3? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2005, 15:11 |
|
||
|
CDialog && (CFrameWnd + CSplitterWnd) = ?
|
|||
|---|---|---|---|
|
#18+
KALAKOM...Как добраться до объекта 3?.... Понимаете ли в чём дело... Попробую обьяснить... Предположим Вы добрались до обьекта 3. И что ? кто вообще сказал, что его нужно абдэйтить ? Об этом знает только класс отображения. И это правильно - работает инкапсуляция. Другое дело Вам нужно сообщить. Тут как правило стандартное "апдэйт олл вью" (MFC). И идеалогия апдэйта - через документ (MFC) а почему ? Да потому, что данные храняться в документе. А виды - есть способы их (данных) отображения. Посему если Вам уж хочеться "добраться" - то в MFC например нуна просто регистнуть все вьюшки в документе. И стандартный описанный выше механизм мона юзать (если ничего не попутал). Это шаг первый. ломовой.. Шаг второй (см. книгу). В данной книге идут рассуждения на тему корректности данных, их экземплярности... Вводиться понятия умный указатель, мудрый, кристалл, грань и прочая словесная шумиха. Но Вам никто не мешает спроецировать любой класс на подобную же технологию (документ-вид, почти..). То есть, давайте похфантазируем... представте Ваш класс. Вы изменяете его свойства (данные) и все его отображения меняються по программе. Просто к юзанью. Оптимально к скорости (без апдэйта ненужных представлений данных). всё... далее сами... не буду мешать полёту Вашей фантазии :) удачи Вам (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2005, 16:35 |
|
||
|
CDialog && (CFrameWnd + CSplitterWnd) = ?
|
|||
|---|---|---|---|
|
#18+
На данном этапе я еще не совсем познал всю философию MFC во всех ее тонкостях, да может быть и саму концепцию ООП в С++ (ее тонкие возможности). Но Ваши высказывания немного заставили меня взглянуть на все это чуть по другому. Надеюсь, что когда изучу необходимый материал, то буду Вам достойным собеседником. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2005, 10:42 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33326448&tid=2032605]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 260ms |
| total: | 397ms |

| 0 / 0 |
