MFC 中 ActiveWindow 的类名

发布于 2024-11-26 23:28:28 字数 816 浏览 0 评论 0原文

在我的 MDI 应用程序中,我正在主机中加载一个 DialogBar。但是我想在调用某个子窗口(GroupView、TrendView)时显示该 DialogBar。对于其他窗口,它应该隐藏(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....

请帮助我解决这个问题。

In my MDI application I'm loading one DialogBar in mainframe.But I want to show that DialogBar when some child window gets invoked(GroupView,TrendView).For other windows it should be hidden(GraphView).So for all functions used to invoke child window from CMainFrame is hiding the DialogBar like this.

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

For some view

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

So,when I click TrendView I get the DialogBar and when I click GraphView the DialogBar gets hidden.But Again when I click TrendView I didn't get Dialogbar. Because the application is multiple window.The previous TrendView is behind the GraphView, when i invoke just it show in front.

So my idea is I have one thread in Mainframe,this function updates some values in all views.In that I will check whether the Active View is TrendView, if it is so then DialogBar will be shown other wise it will be hidden.

I used this..

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

But I dont know how to get the active view is TrendView only....

Pls help me in this issue.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜警司 2024-12-03 23:28:28

在这里,pChild 中有活动窗口。
希望你有一个对应于每个视图(GraphView、TrendView 等)的成员变量
我想它会是这样的:m_GraphViewm_TrendView等。
现在您要做的就是比较两个窗口的句柄。

试试这个代码:

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

比较窗口的句柄是最好的方法。

Here, you have the active window in pChild.
Hope you have a member variable corresponding to each view (GraphView, TrendView etc)
I suppose it will be something like: m_GraphView, m_TrendView etc.
Now what you have to do is compare the handles of both the windows.

Try this code:

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

To compare the handle of the window is the best way.

一江春梦 2024-12-03 23:28:28

首先,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 和
    IMPLMENT_DYNCREATE 为了使用 IsKindOf(RUNTIME_CLASS...
  2. 我发布了 此处有关查找活动视图的相关示例代码
    在 SDI/MDI MFC 应用中。

First, CMDIFrameWnd::MDIGetActive gets the active MDI child frame.
Next, you can get its active view by a call of CFrameWnd::GetActiveView.
Finally, call CObject::IsKindOf.

Example:

   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'
         }
      }
   }

Notes:

  1. Be sure the view classes have defined DECLARE_DYNCREATE and
    IMPLEMENT_DYNCREATE in order to use IsKindOf(RUNTIME_CLASS...
  2. I posted here related sample code about finding the active view
    in SDI/MDI MFC applications.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文