2011-07-29 19 views
0

在我的MDI應用我加載一個DialogBar在mainframe.But我想表明DialogBar當一些子窗口被調用(GroupView,TrendView)。對於其他窗口應該被隱藏(GraphView)因此,用於從CMainFrame調用子窗口的所有函數都像這樣隱藏了DialogBar。類名在MFC

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

對於一些觀點

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

所以,當我點擊TrendView我得到的DialogBar,當我點擊GraphView的DialogBar被hidden.But當我再次點擊TrendView我沒有得到Dialogbar。因爲應用程序是多個窗口。以前的TrendView位於GraphView的後面,當我調用它時顯示在前面。

所以我的想法是我在Mainframe中有一個線程,這個函數更新了所有視圖中的一些值。在那我將檢查Active View是否是TrendView,如果是這樣的話那麼DialogBar會顯示爲其他方式,隱。

我用這個..

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

但我不知道如何得到活動視圖是TrendView只有....

請幫助我在這個問題上。

回答

1

在這裏,你有pChild活動窗口。 希望你有一個成員變量對應於每個視圖(GraphView,TrendView等) 我想它會是這樣的:m_GraphView,m_TrendView等 現在你要做的就是比較兩個窗口的句柄。

試試這個代碼:

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

比較的窗口的句柄是最好的辦法。

1

首先,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. 是確保視圖類人爲了使用 IsKindOf(RUNTIME_CLASS定義DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE ...
  2. 我張貼here有關在SDI/MDI MFC應用程序中查找活動視圖 的相關示例代碼。
+0

如果比較的不是一個具體實例,但只是視圖類型,那麼我建議這個答案! –

+0

我用這個代碼..它顯示了像這樣使用的MDIGetActive()中的錯誤** CMDIFrameWnd * pMainWnd =(CMDIFrameWnd *)AfxGetApp() - > m_pMainWnd; CMDIChildWnd * pChild =(CMDIChildWnd *)pMainWnd-> GetActiveFrame(); CView * pView =(CView *)pChild-> GetActiveView(); if(NULL!= pView)**但pView返回NULL.Im在MainFrame類中使用這段代碼。 – Anu