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;
}
Доступ к объекту CView
Возникла следующая проблема:
Есть SDI проект, в нём Окно представления разделено с помощью CSplitterWnd.
Соответственно имеем функцию:
Код:
CInfoPanel (это класс на базе которого создаётся правая половина окна) необходимо периодически перерисовывать, т.е. вызывать CInfoPanel::OnDraw(CDC* pDC).
Но как это сделать!?
При свертывании/развертывании, измерении размеров и т.п. оно естественно перерисовывается, но как это сделать из кода программы? Или хотя бы как получить ссылку на этот объект? (Он создаётся при вызове m_wndSplitter.CreateView(....) и в явном виде нигде не присутствует)
вот пример на всякий случай
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));
Ну и дальше CDocument::UpdateAllViews(pViewThatNotUpdatedAkaSender, ...) или CView::OnUpdate(NULL,...)
Немножко подумал и решил, что она здесь не нужна (ибо немного бессмысленна в рамках решаемой мною задачи).
Для обновления окошка использовал InvalidateRect(NULL, 1).
Спасибо за советы! Очень помогли!