Имя класса ActiveWindow в MFC - PullRequest
       1

Имя класса ActiveWindow в MFC

0 голосов
/ 29 июля 2011

В моем приложении MDI я загружаю один DialogBar в мейнфрейм. Но я хочу показать этот DialogBar, когда вызывается какое-то дочернее окно (GroupView, TrendView). Для других окон оно должно быть скрыто (GraphView). Так что для всех функций используется для вызова дочернего окна из CMainFrame скрывает DialogBar, как это.

void CMainFrame::OnGroupview()
{
.
.
.
m_RecentAlarms.ShowWindow(SW_HIDE);
} 

Для некоторых

void CMainFrame::OnGroupview()
{
.
.
.m_RecentAlarms.ShowWindow(SW_SHOW);
}

Итак, когда я нажимаю TrendView, я получаю DialogBar, а когда я нажимаю GraphView, DialogBar скрывается. Но опять же, когда я нажимаю TrendView, я не получаю Dialogbar. Поскольку приложение представляет собой несколько окон. Предыдущий TrendView находится за GraphView, когда я вызываю только его показ в передней части.

Таким образом, моя идея состоит в том, что у меня есть один поток в мейнфрейме, эта функция обновляет некоторые значения во всех представлениях. В этом я проверю, является ли активный просмотр TrendView, если это так, тогда DialogBar будет показан иначе, он будет скрыт .

Я использовал это ..

CMDIChildWnd* pChild = ((CMainFrame*)AfxGetMainWnd())->MDIGetActive();

Но я не знаю, как получить активное представление только TrendView ....

Пожалуйста, помогите мне в этом вопросе.

Ответы [ 2 ]

1 голос
/ 29 июля 2011

Сначала CMDIFrameWnd :: MDIGetActive получает активный дочерний фрейм MDI.
Затем вы можете получить его активное представление с помощью вызова CFrameWnd :: GetActiveView .
Наконец, вызовите CObject :: IsKindOf .

Пример:

   CMDIChildWnd* pFrame = ((CMDIFrameWnd*)AfxGetMainWnd())->MDIGetActive();
   if(NULL != pFrame)
   {
      CView* pView = pFrame->GetActiveView();
      if(NULL != pView)
      {
         if(pView->IsKindOf(RUNTIME_CLASS(TrendView)))
         {
            // The active view is of type 'TrendView'
         }
         else if(pView->IsKindOf(RUNTIME_CLASS(GraphView)))
         {
            // The active view is of type 'GraphView'
         }
      }
   }

Примечания:

  1. Убедитесь, что классы представления определилиDECLARE_DYNCREATE и IMPLEMENT_DYNCREATE для использования IsKindOf (RUNTIME_CLASS ...
  2. Я разместил здесь связанный пример кода о поиске активного представления в приложениях SDI / MDI MFC.
1 голос
/ 29 июля 2011

Здесь у вас есть активное окно в pChild. Надеюсь, у вас есть переменная-член, соответствующая каждому представлению (GraphView, TrendView и т. Д.) Я полагаю, это будет что-то вроде: m_GraphView, m_TrendView и т. Д. Теперь вам нужно сравнить ручки обоих окон.

Попробуйте этот код:

if( pChild->GetSafeHWND() == m_GraphView.GetSafeHWND() )
{
   m_RecentAlarms.ShowWindow(SW_HIDE);
}
else
{
  m_RecentAlarms.ShowWindow(SW_SHOW); 
}

Лучше всего сравнить ручку окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...