Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Доступ к объекту CView

4.8K
12 мая 2011 года
fakel15
54 / / 02.12.2005
Добрый день!
Возникла следующая проблема:
Есть SDI проект, в нём Окно представления разделено с помощью CSplitterWnd.
Соответственно имеем функцию:
Код:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)
{
    CRect rect;
    GetClientRect(rect);

    if (!m_wndSplitter.CreateStatic(this, 1, 2))
    {      
        return FALSE;
    }
   
    if (!m_wndSplitter.CreateView(0, 0,
        RUNTIME_CLASS(CTreePanel), CSize((rect.right-rect.left)/2, (rect.bottom-rect.top)/2), pContext))
    {
        return FALSE;
    }

    if (!m_wndSplitter.CreateView(0, 1,
        RUNTIME_CLASS(CInfoPanel), CSize((rect.right-rect.left)/2, (rect.bottom-rect.top)/2), pContext))
    {
        return FALSE;
    }
   
    SetActiveView((CView*)m_wndSplitter.GetPane(0,0));
   
    return TRUE;
}

CInfoPanel (это класс на базе которого создаётся правая половина окна) необходимо периодически перерисовывать, т.е. вызывать CInfoPanel::OnDraw(CDC* pDC).
Но как это сделать!?
При свертывании/развертывании, измерении размеров и т.п. оно естественно перерисовывается, но как это сделать из кода программы? Или хотя бы как получить ссылку на этот объект? (Он создаётся при вызове m_wndSplitter.CreateView(....) и в явном виде нигде не присутствует)
8.2K
12 мая 2011 года
user1
71 / / 16.03.2007
Посмотри MSDN по классу CSplitterWnd.

вот пример на всякий случай

m_pViewFavirites = ((CFavoritesView*)m_wndSplitter->GetPane(0,0)); //CFavoritesView - класс вида наследник CView
m_pViewExplorer = ((CExplorerView*)m_wndSplitter->GetPane(0,1)); //CExplorerView - класс вида наследник CView

и, кстати, это что

Цитата:
SetActiveView((CView*)m_wndSplitter.GetPane(0,0));

14
13 мая 2011 года
Phodopus
3.3K / / 19.06.2008
Ну и дальше CDocument::UpdateAllViews(pViewThatNotUpdatedAkaSender, ...) или CView::OnUpdate(NULL,...)
4.8K
13 мая 2011 года
fakel15
54 / / 02.12.2005
SetActiveView((CView*)m_wndSplitter.GetPane(0,0)); выставляет конкретный CView* активным в данный момент.
Немножко подумал и решил, что она здесь не нужна (ибо немного бессмысленна в рамках решаемой мною задачи).
Для обновления окошка использовал InvalidateRect(NULL, 1).
Спасибо за советы! Очень помогли!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог