MFC对接窗口和它们停靠的地方

时间:2010-03-02 17:38:02

标签: mfc

我创建(生成)带有选项卡式文档的MDI项目 VS2008 Pro。 Visual Studio使用“文件/类”视图生成应用程序 窗口,属性窗口,输出窗口和第一个MDI文档/ 视图。

我想控制窗户停靠的两侧。我想这个 在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 个答案:

答案 0 :(得分:1)

IIRC,CBRS_TOP等适用于可以停靠的地方,而不适用于启动应用程序时 停靠的位置。它保存在注册表中,基本上它会显示最后一次关闭应用程序时的位置。

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

不是一个真正的答案,但希望它会让你顺利...