MFC 停靠窗口及其停靠位置

Posted

技术标签:

【中文标题】MFC 停靠窗口及其停靠位置【英文标题】:MFC docking windows and where they dock 【发布时间】:2010-03-02 17:38:02 【问题描述】:

我已经创建(生成)了一个带有选项卡式文档的 MDI 项目 VS2008 专业版。 Visual Studio 使用文件/类视图生成应用程序 窗口、属性窗口、输出窗口和第一个MDI文件/ 看法。

我想控制 windows 停靠的边。我以为这个 在 BOOL CMainFrame::CreateDockingWindows() 中完成,我改变了 CBRS_TOP 到 CBRS_BOTTOM 和 CBRS_RIGHT 到 CBRS_LEFT ,但窗口 在客户区还是一样。没有什么不同的 什么用于 CBRS_xxxx 的窗口样式属性。地点和方式 我可以控制这些窗口停靠在客户区的什么位置吗? 我当时换了:

 BOOL CMainFrame::CreateDockingWindows() 
   
    BOOL bNameValid; 


    // Create class view 
    CString strClassView; 
    bNameValid = strClassView.LoadString(IDS_CLASS_VIEW); 
    ASSERT(bNameValid); 
    if (!m_wndClassView.Create(strClassView, this, CRect(0, 0, 200, 200), TRUE,ID_VIEW_CLASSVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |      
    WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)) 
     
            TRACE0("Failed to create Class View window\n"); 
            return FALSE; // failed to create 
     


    // Create file view 
    CString strFileView; 
    bNameValid = strFileView.LoadString(IDS_FILE_VIEW); 
    ASSERT(bNameValid); 
       if (!m_wndFileView.Create(strFileView, this, CRect(0, 0, 200, 200),TRUE, ID_VIEW_FILEVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | 
    WS_CLIPCHILDREN | CBRS_LEFT| CBRS_FLOAT_MULTI)) 
      
            TRACE0("Failed to create File View window\n"); 
            return FALSE; // failed to create 
     


    // Create output window 
    CString strOutputWnd; 
    bNameValid = strOutputWnd.LoadString(IDS_OUTPUT_WND); 
    ASSERT(bNameValid); 
    if (!m_wndOutput.Create(strOutputWnd, this, CRect(0, 0, 100, 100), 
       TRUE, ID_VIEW_OUTPUTWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | 
      WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)) 
     
            TRACE0("Failed to create Output window\n"); 
            return FALSE; // failed to create 
     


    // Create properties window 
    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("Failed to create Properties window\n"); 
            return FALSE; // failed to create 
     


    SetDockingWindowIcons(theApp.m_bHiColorIcons); 
    return TRUE; 



   

有人可以帮我解释一下如何控制边 这些窗口停靠? 谢谢。

【问题讨论】:

【参考方案1】:

IIRC、CBRS_TOP 等是针对它们可以停靠的位置,而不是它们在您启动应用程序时停靠的位置。保存在注册表中,基本上会显示上次关闭应用程序时的位置。

在过去(这不适用于 Feature Pack 停靠框架)如果您想在启动时停靠到特定的一侧,您必须将您希望工具栏停靠的一侧设置为唯一允许的一侧(例如右边),创建工具栏,停靠它(有一个 SetDocked() 或类似的东西),然后将允许的停靠边修改为您想要允许的方向。我不确定这种行为在当前版本中是否仍然存在,但我认为它确实存在,因为这是建立在低级停靠工具栏功能之上的东西,而功能包的东西只是建立在它之上。

不是一个真正的答案,但希望它能帮助你...

【讨论】:

以上是关于MFC 停靠窗口及其停靠位置的主要内容,如果未能解决你的问题,请参考以下文章

使用 MFC Feature Pack 1 在 VS2008 中停靠选项卡式窗格位置

获取 MFC CDockablePane 停靠的停靠区域

MFC 功能包 - 可停靠文件资源管理器和可停靠属性窗口

在远程调试窗口调整 Chrome DevTools 的停靠位置

谁知道怎么实现窗口停靠的功能? MFC

如何使 CMDIChildWnd 在 MFC 中可停靠?