От:
R!M
Дата: 14.05.02 15:54
Оценка:
Привет!
У меня тут проблема с CMainFrame и CView.
Во общем у меня ясть DialogBar(в CMainFrame'е),
в нем CTreeCtrl, и мне нужно в момент перерисовки окна(OnDraw) знать какой элемент
сейчас выделен.
CTreeCtrl *tr=(CTreeCtrl*)m_wndFiles.GetDlgItem(IDC_TREE);
HTREEITEM cur=tr->GetSelectedItem();
m_wndStatusBar.SetWindowText(tr->GetItemText(cur));
UpdateData(FALSE);
Это работает только из CMainFrame, но OnDraw находиться в CSCView.
Так вот как мне "достать" CTreeCtrl(из CMainFrame) из CSCView(в OnDraw) ?
R!M
Здравствуйте R!M, Вы писали:
RM>Так вот как мне "достать" CTreeCtrl(из CMainFrame) из CSCView(в OnDraw) ?
void CSCView::OnDraw()
{
CMainFrame* pFrame=(CMainFrame*)GetParentFrame ();
// и т.д.
}
От:
The Lex
Дата: 14.05.02 19:10
Оценка:
Здравствуйте Admiral, Вы писали:
A>A>void CSCView::OnDraw()
A>{
A> CMainFrame* pFrame=(CMainFrame*)GetParentFrame ();
A> // и т.д.
A>}
A>
GetParentFrame() из вида вернет первый найденый Frame — для MDI это будет клиентский Frame.
Голь на выдумку хитра, однако...
От:
The Lex
Дата: 14.05.02 19:15
Оценка:
Здравствуйте R!M, Вы писали:
R!M>У меня тут проблема с CMainFrame и CView...
R!M>Так вот как мне "достать" CTreeCtrl(из CMainFrame) из CSCView(в OnDraw) ?
CMainFrame* pMainFrame = (CMainFrame*) AfxGetMainWnd();
ASSERT(pMainFrame);
CTreeCtrl *pTreeCtrl = (CTreeCtrl*) pMainFrame->m_wndFiles.GetDlgItem(IDC_TREE);
...
Наверное немного "подровнять" с помощью "правильного" приведения и проверки наследования.
Я, правда, так ни разу не делал — пока вроде все работает...
Кстати: а почему Вы это делаете в CXXXView::OnDraw(...)?
Голь на выдумку хитра, однако...
От:
Admiral
Дата: 15.05.02 06:45
Оценка:
Здравствуйте The Lex, Вы писали:
TL>Здравствуйте Admiral, Вы писали:
A>>A>>void CSCView::OnDraw()
A>>{
A>> CMainFrame* pFrame=(CMainFrame*)GetParentFrame ();
A>> // и т.д.
A>>}
A>>
TL>GetParentFrame() из вида вернет первый найденый Frame — для MDI это будет клиентский Frame.
Да, верно. Я не уточнил, что предложенный мной способ — для SDI. Прошу прощения, если ввел кого-либо в заблуждение.
От:
The Lex
Дата: 15.05.02 07:08
Оценка:
Здравствуйте Admiral, Вы писали:
A>Да, верно. Я не уточнил, что предложенный мной способ — для SDI. Прошу прощения, если ввел кого-либо в заблуждение.
Отрицательную оценку удалить?
Голь на выдумку хитра, однако...
От:
Admiral
Дата: 15.05.02 07:17
Оценка:
Здравствуйте The Lex, Вы писали:
TL>Здравствуйте Admiral, Вы писали:
A>>Да, верно. Я не уточнил, что предложенный мной способ — для SDI. Прошу прощения, если ввел кого-либо в заблуждение.
TL> Отрицательную оценку удалить?
Не надо, мне урок будет.
Хотя, в вопросе не было сказано, какой тип проекта используется. Так что свой ответ я считаю верным.
От:
R!M
Дата: 15.05.02 13:40
Оценка:
Спасибо!
Соррии что не указал тип приложения...незнал про этот GetParentFrame.
R!M
void CSCView::OnDraw()
{
CMainFrame *pFrame = (CMainFrame *)GetTopLevelFrame();
// ...
}
ЗЫ: этот вариант и для SDI и для MDI подойдет ...
Опыт позволяет нам ошибаться гораздо увереннее...
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить