在我的MDI应用程序中,我在mainframe中加载一个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的后面,当我调用它时,它就显示在前面。
所以我的想法是我在Mainframe中有一个线程,这个函数更新所有视图中的一些值。在那里我将检查Active View是否是TrendView,如果是,那么DialogBar将被显示为其他方面它将被隐藏
我用过这个..
CMDIChildWnd* pChild = ((CMainFrame*)AfxGetMainWnd())->MDIGetActive();
但我不知道如何让活动视图只是TrendView ....
请帮我解决这个问题。
答案 0 :(得分: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 :(得分: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'
}
}
}
注意: