Связывание CDocument c 2-мя CView
От: mvd Украина  
Дата: 18.11.05 16:47
Оценка:
Здраствуйте. Я конечно новичек, как на сайте так и в MFC.

Я создаю SDI приложение и указываю что нужно делать его в стиле Internet Explorer (ну есть там такая радио буттон).
Создается 2 вьюва которые наследуются один от CListView, второй от CTreeView. Оба они связаны с одним документом (см документ\вид архитектуру). То что эта связка делается где то в недрах библиотеки это понятно, но все же где и как это отображается в полученом коде? ведь по смыслу код остается тем же что для простого SDI приложения в стиле MFC.
Re: Связывание CDocument c 2-мя CView
От: alexsoff Россия  
Дата: 19.11.05 11:11
Оценка: +1
Здравствуйте, mvd, Вы писали:

mvd> Здраствуйте. Я конечно новичек, как на сайте так и в MFC.


mvd> То что эта связка делается где то в недрах библиотеки это понятно, но все же где и как это отображается в полученом коде? ведь по смыслу код остается тем же что для простого SDI приложения в стиле MFC.

Нет, связка создается в исходном коде сгенерированном визартом, это можно увидеть в файле главной формы("MainFrm.cpp")

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)
{
    // создаем сплиттер
    if (!m_wndSplitter.CreateStatic(this, 1, 2))
        return FALSE;
         /*привязываем к частям сплиттора  два вьюера CLeftView:CTreeView, и CxxView:CListView */
    if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(100, 100), pContext) ||
        !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CForum2View), CSize(100, 100), pContext))
    {
        m_wndSplitter.DestroyWindow();
        return FALSE;
    }

    return TRUE;
}

И все...
Re[2]: Связывание CDocument c 2-мя CView
От: Mikhail Украина  
Дата: 21.11.05 10:45
Оценка:
Здравствуйте, alexsoff, Вы писали:


A>Нет, связка создается в исходном коде сгенерированном визартом, это можно увидеть в файле главной формы("MainFrm.cpp")


A>
A>BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
A>    CCreateContext* pContext)
A>{
A>    // создаем сплиттер
A>    if (!m_wndSplitter.CreateStatic(this, 1, 2))
A>        return FALSE;
A>         /*привязываем к частям сплиттора  два вьюера CLeftView:CTreeView, и CxxView:CListView */
A>    if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(100, 100), pContext) ||
A>        !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CForum2View), CSize(100, 100), pContext))
A>    {
A>        m_wndSplitter.DestroyWindow();
A>        return FALSE;
A>    }

A>    return TRUE;
A>}
A>

A>И все...

То есть если я добавлю еще один вью в сплиттер, то функция GetDocument() этого вью будет возврящать указатель на то же документ что и у CLeftView и CForum2View?
Re[3]: Связывание CDocument c 2-мя CView
От: Burz  
Дата: 22.11.05 09:26
Оценка:
Здравствуйте, Mikhail, Вы писали:

A>>
A>>BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
A>>    CCreateContext* pContext)
A>> ....
A>>    if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(100, 100), pContext) ||
A>>        !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CForum2View), CSize(100, 100), pContext))
A>>

A>>И все...
M>То есть если я добавлю еще один вью в сплиттер, то функция GetDocument() этого вью будет возврящать указатель на то же документ что и у CLeftView и CForum2View?

Какой документ использовать написано в переменной CCreateContext* pContext.
Re[4]: Связывание CDocument c 2-мя CView
От: alexsoff Россия  
Дата: 22.11.05 10:49
Оценка:
Здравствуйте, Burz, Вы писали:


B>Какой документ использовать написано в переменной CCreateContext* pContext.

Помой-му это не важно, т.к. у нас все- таки SDI -приложение, соответственно документ должен быть один. а по поводу
B>То есть если я добавлю еще один вью в сплиттер, то функция GetDocument() этого вью будет возврящать указатель на то же документ что и у CLeftView и CForum2View?
Что, значит: "добавить View в сплиттер " заменить на другой, или создать дополнительный сегмент в сплиттере?
В первом случае нужно организовать в CMainForm какую- нибуть процедуру изменения текущего представления
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.