如何动态创建CMFCToolbar的SetOriginalState?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何动态创建CMFCToolbar的SetOriginalState?相关的知识,希望对你有一定的参考价值。

我在我的mfc应用程序中动态创建了一些工具栏

m_cToolBarEx.CreateEx(this, TBSTYLE_FLAT , WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC | CBRS_HIDE_INPLACE);

工具栏没有位图或资源ID。我使用InsertButton函数在工具栏中添加按钮

当我尝试通过菜单中的Reset Toolbar按钮重置此工具栏时。工具栏不会重置为其原始状态,仅提示message box并且不会恢复任何更改。

我认为问题是当CMFCToolBar::RestoreOriginalstate()被执行时的条件:

if (m_uiOriginalResID == 0)
    {
        return FALSE;
    }

获取为true,函数返回false,因为m_uiOriginalResID中没有资源ID。

有没有办法加载动态创建的工具栏或我必须继承RestoreOriginalstate函数并编写我自己的。

答案

您应该覆盖Note section中所述的RestoreOriginalstate():

当用户从自定义菜单中选择“重置”时,将调用此方法。您还可以手动调用此方法以编程方式重置菜单栏的状态。此方法从资源文件加载原始状态。

如果要在用户选择“重置”选项时进行任何处理,请覆盖此方法。

您还应该覆盖CanBeRestored()函数,如果资源ID为0,则defaut implementation返回FALSE。

这是RestoreOriginalstate()的an exemple

BOOL CLinksBar::RestoreOriginalstate ()
{
    RemoveAllButtons ();

    InsertButton (CLinkButton (_T("MSDN Home"), _T("http://www.msdn.com")));
    InsertButton (CLinkButton (_T("Microsoft Home"), _T("http://www.microsoft.com")));
    InsertButton (CLinkButton (_T("Visual C++ Developer Center"), _T("http://msdn2.microsoft.com/visualc/")));

    EnableCustomizeButton (TRUE, -1, _T(""));

    AdjustLayout ();
    Invalidate ();

    return TRUE;
} 

以上是关于如何动态创建CMFCToolbar的SetOriginalState?的主要内容,如果未能解决你的问题,请参考以下文章

如何在mfc中设置大小和透明/清除CMFCToolBar按钮和图标?

如何从自定义对话框工具栏属性页隐藏CMFCToolBar?

销毁 CMFCMenuBar 和 CMFCToolBar 并重新创建它们的正确方法是啥?

如何使浮动 CMFCToolbar 不可移动

如何更改 CMFCToolBar 运行时

MFC:如何让 CMFCToolBarComboBoxButton 显示在 CMFCToolBar 上?