none
MFC,outlookbar 为什么调用了EnableTabDetach(),且指定为FALSE,还是可以浮动tab呢? RRS feed

  • 问题

  • 我正常学习MFC中的outlookbar的使用。于是我下载了官方在github上提供的一份示例程序OutlookMultiViews

    我想禁止tab的浮动,让tab可以像另外一个outlookbar的示例程序 OutlookDemon 的2003风格一样固定住。

    经过查找,我觉得

    EnableTabSwap

    EnableTabDetach

    应该可以帮助我于是,我在OutlookMultiViews 的 MainFrm.cpp 第393行加入了如下代码

    //	pShortcutsBarContainer->AddTab (&m_wndShortcutsPane1, _T("Views"), (UINT)-1, FALSE);
    	pShortcutsBarContainer->AddTab (&m_wndShortcutsPane1, _T("hello"), (UINT)-1, true);
    	pShortcutsBarContainer->AddTab(&m_wndShortcutsPane1, _T("abcd"), (UINT)-1, true);
    	pShortcutsBarContainer->EnableTabSwap(FALSE);
    	pShortcutsBarContainer->EnableTabDetach(0, FALSE);
    	pShortcutsBarContainer->EnableTabDetach(1, FALSE);

    然而, 编译运行后,我发现,仍然有tab可以浮动,并且虽然出现了第二个tab,但是两个tab名称都是 hello

    我想问的是。如何实现我的目的,让两个tab都不可以浮动。并且,同名的情况我该如何解决呢?

    任何帮助都行,请回复下我,谢谢。


    于 MainFrm.cpp 第393行
    于 MainFrm.cpp 第393行
    2019年9月18日 10:14

答案

  • 我已经自己找到了答案。

    相关解释在

    https://docs.microsoft.com/zh-cn/cpp/mfc/reference/cmfcoutlookbar-class?view=vs-2019#create

    Remarks部分。

    另外,OutlookDemon  和 OutlookMultiViews,分别使用了两种方法在容器中添加选项卡,

    一种是AddControl,另外一种是 AddTab。

    其中,OutlookDemon  展示了两种OutlookBar模式,一种是 mode2003(不可浮动),还有一种是mode2007(可浮动),请注意,我并没有深入研究mode2003是原生不支持浮动,还是某个参数让它不可浮动。

    与此相比,OutlookMultiViews就清晰的多了,它使用AddTab。只要在设置Tab的参数就行

    2019年9月19日 1:34