CView->CMainFrame
От: 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
Re: CView->CMainFrame
От: Admiral Украина  
Дата: 14.05.02 16:12
Оценка: -1
Здравствуйте R!M, Вы писали:

RM>Так вот как мне "достать" CTreeCtrl(из CMainFrame) из CSCView(в OnDraw) ?

void CSCView::OnDraw()
{
  CMainFrame* pFrame=(CMainFrame*)GetParentFrame();
  // и т.д.
}
Re[2]: CView->CMainFrame
От: 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.
Голь на выдумку хитра, однако...
Re: CView->CMainFrame
От: 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(...)?
Голь на выдумку хитра, однако...
Re[3]: CView->CMainFrame
От: 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. Прошу прощения, если ввел кого-либо в заблуждение.
Re[4]: CView->CMainFrame
От: The Lex Украина  
Дата: 15.05.02 07:08
Оценка:
Здравствуйте Admiral, Вы писали:

A>Да, верно. Я не уточнил, что предложенный мной способ — для SDI. Прошу прощения, если ввел кого-либо в заблуждение.


Отрицательную оценку удалить?
Голь на выдумку хитра, однако...
Re[5]: CView->CMainFrame
От: Admiral Украина  
Дата: 15.05.02 07:17
Оценка:
Здравствуйте The Lex, Вы писали:

TL>Здравствуйте Admiral, Вы писали:


A>>Да, верно. Я не уточнил, что предложенный мной способ — для SDI. Прошу прощения, если ввел кого-либо в заблуждение.

TL> Отрицательную оценку удалить?

Не надо, мне урок будет. Хотя, в вопросе не было сказано, какой тип проекта используется. Так что свой ответ я считаю верным.
Re[6]: CView->CMainFrame
От: R!M  
Дата: 15.05.02 13:40
Оценка:
Спасибо!

Соррии что не указал тип приложения...незнал про этот GetParentFrame.
R!M
Re: CView->CMainFrame
От: sealg Россия  
Дата: 17.05.02 10:16
Оценка: 1 (1)
void CSCView::OnDraw()
{
CMainFrame *pFrame = (CMainFrame *)GetTopLevelFrame();
// ...
}

ЗЫ: этот вариант и для SDI и для MDI подойдет ...
Опыт позволяет нам ошибаться гораздо увереннее...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.