0%

MFC停靠窗口位置设定

  1. 创建时
  2. 创建后主窗口设置
  3. 创建后自身设置
    1. 与其他停靠窗口一起成为多标签窗口
    2. 与其他窗口贴贴

以属性窗口m_wndProperties为例

创建时

1
m_wndProperties.Create(strPropertiesWnd, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI)

CBRS_RIGHT变量使其停靠在右侧

创建后主窗口设置

1
2
3
// int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
m_wndProperties.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndProperties);

CBRS_ALIGN_ANY使其可停靠在任意位置

CMainFrame::DockPane()函数使其成为主窗口的停靠窗口

创建后自身设置

与其他停靠窗口一起成为多标签窗口

CDockablePane Class | Microsoft Learn

1
2
3
4
5
6
7
8
m_wndFileView.EnableDocking(CBRS_ALIGN_ANY);
m_wndClassView.EnableDocking(CBRS_ALIGN_ANY);
m_wndTestView.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndFileView);

CDockablePane* pTabbedBar = NULL;
m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar);
m_wndTestView.AttachToTabWnd(pTabbedBar, DM_SHOW, TRUE, &pTabbedBar);

AttachToTabWnd函数:

  • 第一个参数是CDockablePane*,指向另一个停靠窗口
  • 第二个参数指定停靠方式,一般设置为DM_SHOW,在当前场景下用处不大,详见CPane Class | Microsoft Learn
  • 第三个参数是BOOL,控制附属后是否显示,如果FALSE则贴上去但不是最前显示
  • 第四个参数是CDockablePane**,窗口附属到另一个窗口后,会生成一个新的可停靠窗口,通过这个指针传递出来,可以理解为“多标签可停靠窗口”

效果:

image-20230215181601418

与其他窗口贴贴

CDockablePane Class | Microsoft Learn

与另一个可停靠窗口并列

1
2
3
4
m_wndProperties.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndProperties);

m_wndProperties.DockToWindow(pTabbedBar, CBRS_ALIGN_BOTTOM);

DockToWindow函数:

  • 第一个参数是CDockablePane*,指向另一个停靠窗口
  • 第二个参数是停靠位置,CBRS_开头

效果:

image-20230215181457389