0

在我们的一个应用程序中,我使用了一些 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“功能包”中的一些类,这些类非常漂亮,但这种方法不再有效(它断言,我可以通过一些小的修改来修复它,但侧边栏不会出现)。这些新类的文档很糟糕,所以我很难弄清楚我应该做什么。我尝试了似乎是“新”方法:

  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

4 回答 4

2

这是我作为我的一部分所做的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);

Mym_projectsPane是一个类,然后ON_WM_GETMINMAXINFO会被填充ptMinTrackSize(以确保用户不能将对话框的大小调整到某个最小值以下)。我在我的代码中看不到任何其他内容,并且停靠窗格的大小调整工作正常。

于 2009-04-15T10:10:14.833 回答
1

如果我们都在黑暗中射击,我们击中东西的机会就会增加一倍。

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

于 2009-04-02T21:27:47.663 回答
0

我仍然无法将 CDialogBox 停靠在主框架上。当我这样做时,它只是显示为浮动的空迷你框框。在盒子里面,有一个刷新问题,屏幕上的任何东西都被画在那里。

我注意到的是:如果 CPaneDialog 停靠在其他 CDockablePane 上,它会正确显示。但如果它停靠在 MainFrm 上,则不是。这很有趣,因为 CPaneDialog 也是 CDockablePane 的子类。其他 CDockablePane 停靠在 MainFrm 上没有问题。(使用 MFC Featurepack 示例中的 SetPaneSize 示例进行测试。)

于 2009-12-11T16:51:35.407 回答
0

虽然这可能不再惠及原本需要的人。问题可能是您在 Visual Studio 中添加的资源对话框上的设置。由于此控件会在创建对话框时产生,因此您可能提供给 Create() 方法的任何/所有样式都将被资源文件中的设置覆盖。确保 visible 属性设置为 True,Transparent 设置为 False。我这样做了,通过 DockPane() 将 CPaneDialog 添加到主框架没有问题。

于 2010-02-02T15:23:10.523 回答