如何设置动态创建的 CMFCToolbar 的 OriginalState?

How to SetOriginalState of a dynamically created CMFCToolbar?

我在我的 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 button from menu. The toolbar does not reset to its original state only the message box 重置此工具栏时出现提示,但未恢复任何更改。

我假设问题是当 CMFCToolBar::RestoreOriginalstate() 执行条件时:

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

为真,函数 returns 为假,因为 m_uiOriginalResID 中没有资源 ID。

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

您应该按照 Note section:

中所述覆盖 RestoreOriginalstate()

This method is called when the user selects Reset from the customization menu.You can also manually call this method to programmatically reset the state of the menu bar.This method loads the original state from the resource file.

Override this method if you want to do any processing when the user selects the Reset option.

您还应该覆盖 CanBeRestored() 函数,如果资源 ID 为 0,defaut implementation returns 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;
}