代码之家  ›  专栏  ›  技术社区  ›  Peter

是否将控制栏/窗格停靠到CmdiFramewIndex?

  •  0
  • Peter  · 技术社区  · 16 年前

    在我们的一个应用程序中,我使用了一些MFC类来允许停靠边栏窗口,大致如下所示:

    CDialogBar* bar = new CDialogBar;
    bar->Create(this, IDD, WS_CHILD | WS_VISIBLE | CBRS_RIGHT | CBRS_TOOLTIPS, IDD));
    bar->EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_RIGHT | CBRS_ALIGN_LEFT);
    DockControlBar(bar, AFX_IDW_DOCKBAR_RIGHT);
    

    这一切都很好。

    我现在想在另一个应用程序中做类似的事情。不幸的是,它已经被更改为使用MFC“Feature Pack”中的一些类,这些类非常漂亮,但是这种方法不再有效(它断言,我可以通过一些小的修改来修复,但是边栏不会出现)。这些新类的文档很糟糕,所以我很难弄清楚应该怎么做。我尝试过“新”方法:

      CPaneDialog* pane = new CPaneDialog;
      pane->Create("pane", this, TRUE, IDD, WS_VISIBLE | WS_CHILD, IDD);
      EnableDocking(CBRS_ALIGN_RIGHT | CBRS_ALIGN_LEFT);
      AddPane(pane);
      DockPane(pane);
    

    这在侧边栏窗口出现时有效,但它似乎不可移动,并且无法正确绘制。

    我觉得这一切都是在黑暗中拍摄。有人知道什么是正确的方法吗?

    4 回复  |  直到 15 年前
        1
  •  1
  •   Mark Ransom    16 年前

    如果我们都在黑暗中射击,我们命中某物的几率会加倍。

    查看文档 CDockablePane (cpanedialog的父类),我注意到一个方法 EnableGripper . 试试看。

        2
  •  2
  •   Randy Voet    15 年前

    这是我作为我的一部分所做的 CMainFrame::OnCreate :

    if (!m_projectsPane.Create(L"Projects", this, CRect(0,0,0,0), true, IDD_PROJECTSPANE, WS_CHILD|WS_VISIBLE))
        return -1;
    AddDockSite();
    EnableDocking(CBRS_ALIGN_ANY);
    EnableAutoHidePanes(CBRS_ALIGN_ANY);
    m_projectsPane.EnableDocking(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT);
    DockPane(&m_projectsPane, AFX_IDW_DOCKBAR_RIGHT);
    

    我的 m_projectsPane 是一个可以抓住 ON_WM_GETMINMAXINFO 填补 ptMinTrackSize (以确保用户不能将对话框的大小调整到一定的最小值以下)。我在代码中看不到任何其他内容,停靠窗格的大小调整工作正常。

        3
  •  0
  •   JongAm Park    15 年前

    我仍然无法使CDialogbox停靠到主框架。当我这样做时,它只是显示为浮动的空迷你框。在盒子里,有一个刷新问题,屏幕上的任何东西都会在那里绘制出来。

    我注意到的是:如果CPane对话框停靠到其他CDockablePane,它将正确显示。但是,如果它被连接到mainfrm,它就不是。这很有趣,因为cpanedialog也是cdockablepane的子类。其他CDockablePane与mainfrm对接没有问题。(使用来自MFCFeaturePack示例的setPanesize示例进行测试。)

        4
  •  0
  •   user264446    15 年前

    虽然这可能无法满足最初的需要。 问题可能是您在Visual Studio中添加的资源对话框上的设置。 由于此控件在创建对话框时产生结果,因此资源文件中的设置将覆盖您提供给create()方法的任何/所有样式。确保Visible属性设置为true,而Transparent属性设置为false。我做到了这一点,并且通过dockpane()向主框架添加了一个cpane对话框没有问题。

    推荐文章