怎样让MFC工具栏停靠在左侧

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样让MFC工具栏停靠在左侧相关的知识,希望对你有一定的参考价值。

我想程序一开始,工具栏就停靠在左侧,而不是运行后,再用鼠标去拖到左侧停靠。(我是初学者,希望哪位高手说得清楚点,小弟感激不尽)

参考技术A if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_LEFT
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

TRACE0("Failed to create toolbar\n");
return -1; // fail to create
本回答被提问者采纳

MFC 停靠窗口及其停靠位置

【中文标题】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文档应用程序CToolBar:设置两个工具条并列停靠到同一条边上 转

顶行的 MFC 工具栏右对齐

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

MFC 功能包 - 关闭后无法显示可停靠窗格

窗体中怎么让toolstrip漂浮(停靠已经做出来了)(C#)

在mfc怎样在工具条中添加编辑框