VS2010/MFC Ribbon风格下CDockablePane的使用

如果是想做成TAB页的,需要在正常创建完该pane并Dock完之后加入代码:

正常:

        BOOL bNameValid;

// 创建属性窗口
CString strPropertiesWnd;
bNameValid = strPropertiesWnd.LoadString(IDS_PROPERTIES_WND);
ASSERT(bNameValid);
if (!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))
{
TRACE0("未能创建“属性”窗口\n");
return FALSE; // 未能创建
}

        // 创建事件窗口
CString strEventsWnd;
bNameValid = strEventsWnd.LoadString(IDS_EVENTS_WND);
ASSERT(bNameValid);
if (!m_wndEvents.Create(strEventsWnd, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_EVENTSWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
{
TRACE0("未能创建“事件”窗口\n");
return FALSE; // 未能创建
}

       //创建数据统计窗口
CString strStatisticsWnd;
bNameValid = strStatisticsWnd.LoadString(IDS_STATISTICS_WND);
ASSERT(bNameValid);
if (!m_wndStatistics.Create(strStatisticsWnd, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_STATISTICSWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
{
TRACE0("未能创建“数据统计”窗口\n");
return FALSE; // 未能创建
}

       //创建视频窗口
CString strVideoWnd;
bNameValid = strVideoWnd.LoadString(IDS_VIDEO_WND);
ASSERT(bNameValid);
if (!m_wndVideo.Create(strVideoWnd, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_VIDEOWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM| CBRS_FLOAT_MULTI))
{
TRACE0("未能创建“视频”窗口\n");
return FALSE; // 未能创建
}

        //开始Dock

m_wndProperties.EnableDocking(CBRS_ALIGN_ANY);

        DockPane(&m_wndProperties);

m_wndEvents.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndEvents);

m_wndStatistics.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndStatistics);


特别加入的代码:

CDockablePane* pTabbedBar = NULL;
m_wndEvents.AttachToTabWnd(&m_wndProperties, DM_SHOW, FALSE, &pTabbedBar);//第三个参数 BOOL bSetActive = TRUE/FALSE 
m_wndStatistics.AttachToTabWnd(&m_wndProperties, DM_SHOW, FALSE, &pTabbedBar);//第三个参数 BOOL bSetActive = TRUE/FALSE


要控制当前显示哪个TAB页,请注意上面的第三个参数。

如果想要在左侧视频窗口在属性窗口的下面需要:

m_wndVideo.DockToWindow(&m_wndProperties,CBRS_BOTTOM);

如果需要控制上下的大小还要需要创建两个panel的时候注意是在左侧还是底部创建。


其他相关:https://msdn.microsoft.com/zh-tw/library/vstudio/bb983712.aspx

CDockablePane::AttachToTabWnd

virtual CDockablePane* AttachToTabWnd( 
    CDockablePane* pTabControlBarAttachTo,
    AFX_DOCK_METHOD dockMethod,
    BOOL bSetActive = TRUE,
    CDockablePane** ppTabbedControlBar = NULL
); 

pTabControlBarAttachTo

指定目前窗格附加之目標窗格。 目標窗格必須是可停駐窗格。

[in] dockMethod

指定的方法。

[in] bSetActive

啟動的索引窗格的TRUE 在附加作業之後,否則, FALSE

[out] ppTabbedControlBar

包含的索引窗格從附加作業的結果。

對目前窗格的指標,則為,如果它不是有效的索引窗格,則為的索引窗格的指標因附加作業。 傳回值是 NULL ,如果目前窗格無法附加,則為,如果發生錯誤。

使用這個方法時,將可停駐窗格附加至另一個窗格,則會發生下列動作:

  1. 此架構會檢查目標窗格 pTabControlBarAttachTo 是標準停駐窗格,或是從 CBaseTabbedPane衍生。

  2. 如果目標是一個窗格的索引窗格,此架構會將目前窗格加入至它為索引標籤。

  3. 如果目標窗格是一般停駐窗格,架構會建立索引窗格。

    • 架構會呼叫 pTabControlBarAttachTo-_>CreateTabbedPane新的索引窗格設定樣式取決於 m_pTabbedControlBarRTC 成員。 根據預設,成員設定為 CTabbedPane執行階段類別。 如果您傳遞 AFX_CBRS_OUTLOOK_TABS 樣式做為 dwTabbedStyle 參數設定為 CDockablePane::Create 方法,執行階段類別物件設定為 CMFCOutlookBar執行階段類別。 您可以隨時變更成員變更新窗格的樣式。

    • 當這個方法會建立索引標籤窗格時,架構會取代指標 pTabControlBarAttachTo (如果窗格固定或浮動在多的小型框架視窗) 以指向新索引標籤式窗格。

    • 架構會將 pTabControlBarAttachTo 窗格加入的索引窗格,第一個索引標籤。 架構會將目前窗格做為第二個索引標籤。

  4. 如果目前的窗格。 CBaseTabbedPane衍生,它所有的索引標籤會移至 pTabControlBarAttachTo ,並終結目前窗格。 因此,請注意,當您呼叫時,這個方法,因為對目前窗格的指標可能是無效的,則當方法傳回時。

如果附加一個窗格加入至另一個,當建立停駐配置時,設定 dockMethodDM_SHOW

在附加另一個窗格為它之前,您應該修正第一個窗格。


https://msdn.microsoft.com/zh-tw/library/bb984573.aspx

CDockablePane::DockToWindow

Visual Studio 2013

停駐在另一個停駐窗格的停駐窗格。

virtual BOOL DockToWindow(
    CDockablePane* pTargetWindow,
    DWORD dwAlignment,
    LPCRECT lpRect = NULL
);

pTargetWindow

指定可停駐窗格內建這個窗格。

[in] dwAlignment

指定窗格停駐對齊。 可能是一 CBRS_ALIGN_LEFT、CBRS_ALIGN_TOP、CBRS_ALIGN_RIGHT、CBRS_ALIGN_BOTTOM 或 CBRS_ALIGN_ANY。 (定義於 afxres.h)。

[in] lpRect

指定窗格停駐矩形。

TRUE ,如果窗格成功固定,否則, FALSE

呼叫這個方法內建一窗格加入至 dwAlignment具有指定的對齊的另一個窗格。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值