C++ 如何在MFC功能包中获取ribbon控件以处理ID\u WINDOW\u TILE\u VERT

C++ 如何在MFC功能包中获取ribbon控件以处理ID\u WINDOW\u TILE\u VERT,c++,mfc,mfc-feature-pack,C++,Mfc,Mfc Feature Pack,我正在移植一个旧的MFC应用程序,以便将MFC功能包与ribbon UI一起使用,并发现ribbon UI不处理MDI窗口平铺命令,例如ID\U WINDOW\U TILE\U VERT。有没有办法启用此功能 在C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\atlmfc\src\MFC\winmdi.cpp中,一步一步地浏览MFC源代码,结果如下所示,这似乎是正确的 BOOL CMDIFrameWnd::OnMDIWindowCmd(UINT

我正在移植一个旧的MFC应用程序,以便将MFC功能包与ribbon UI一起使用,并发现ribbon UI不处理MDI窗口平铺命令,例如ID\U WINDOW\U TILE\U VERT。有没有办法启用此功能

在C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\atlmfc\src\MFC\winmdi.cpp中,一步一步地浏览MFC源代码,结果如下所示,这似乎是正确的

BOOL CMDIFrameWnd::OnMDIWindowCmd(UINT nID)
{
    ASSERT(m_hWndMDIClient != NULL);

    UINT msg;
    UINT wParam = 0;
    switch (nID)
    {
    default:
        return FALSE;       // not for us
    case ID_WINDOW_ARRANGE:
        msg = WM_MDIICONARRANGE;
        break;
    case ID_WINDOW_CASCADE:
        msg = WM_MDICASCADE;
        break;
    case ID_WINDOW_TILE_HORZ:
        wParam = MDITILE_HORIZONTAL;
        // fall through
    case ID_WINDOW_TILE_VERT:
        ASSERT(MDITILE_VERTICAL == 0);
        msg = WM_MDITILE;
        break;
    }

    ::SendMessage(m_hWndMDIClient, msg, wParam, 0);
    return TRUE;
}
我也试过打电话

MDITile(MDITILE_HORIZONTAL);

直接,基本上做相同的事情,但不起作用。

根据一些实验,当MFC mdi接口基于CMDIFrameWndEx承载基于可停靠窗格的CMDIChildWndEx的框架并启用选项卡式文档时,浮动窗口不可用,因此平铺或层叠也不可用

要启用平铺,只需删除线即可

EnableMDITabbedGroups(TRUE, mdiTabParams);
从CMainFrame::OnCreate方法。缺点是您也会丢失漂亮的选项卡式文档UI。FWIW,在启用选项卡式组之后,我还尝试调用EnableDocking(CBRS\u FLOAT\u MULTI),但没有任何区别。也在讨论中

更新:为了保持选项卡式界面并拆分屏幕,以下替代方法可以很好地将具有多个选项卡的单个水平视图拆分为两个视图,当前选项卡位于新视图中

void SplitViews(CMDIFrameWndEx *pFrame) 
{   
    pFrame->MDITabNewGroup();
    pFrame->MDITabMoveToNextGroup(); 
}

根据一些实验,当MFC mdi接口基于承载基于可停靠窗格的CMDIFrameWndEx框架,并且启用了选项卡式文档时,浮动窗口不可用,因此平铺或层叠也不可用

要启用平铺,只需删除线即可

EnableMDITabbedGroups(TRUE, mdiTabParams);
从CMainFrame::OnCreate方法。缺点是您也会丢失漂亮的选项卡式文档UI。FWIW,在启用选项卡式组之后,我还尝试调用EnableDocking(CBRS\u FLOAT\u MULTI),但没有任何区别。也在讨论中

更新:为了保持选项卡式界面并拆分屏幕,以下替代方法可以很好地将具有多个选项卡的单个水平视图拆分为两个视图,当前选项卡位于新视图中

void SplitViews(CMDIFrameWndEx *pFrame) 
{   
    pFrame->MDITabNewGroup();
    pFrame->MDITabMoveToNextGroup(); 
}