0

我在我的 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 在我的工具栏中添加按钮

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

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

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

得到 true 并且函数返回 false,因为 m_uiOriginalResID 中没有资源 ID。

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

4

1 回答 1

0

您应该按照注释部分中的说明覆盖 RestoreOriginalstate() :

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

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

您还应该重写 CanBeRestored() 函数,如果资源 ID 为 0 ,则默认实现返回 FALSE。

这是RestoreOriginalstate () 的示例:

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;
} 
于 2018-09-12T12:50:42.107 回答