【问题标题】:How to SetOriginalState of a dynamically created CMFCToolbar?如何设置动态创建的 CMFCToolbar 的原始状态?
【发布时间】:2018-09-12 11:51:42
【问题描述】:

我在我的 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;
    }

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

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

【问题讨论】:

  • 正如documentation 指出的那样:“此方法从资源文件 [...]”加载工具栏。如果您的工具栏未在资源中定义,则不能使用此类成员。毕竟,系统应该从哪里加载布局?如果没有可加载的资源,您将不得不手动重新创建工具栏。尝试获取 Petzold 的“Programming Windows” 以了解资源。

标签: c++ mfc toolbar cmfctoolbar cmfcmenubutton


【解决方案1】:

您应该按照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;
} 

【讨论】:

  • 在覆盖此函数时,我正在使用 'MFCToolBarButton* pButton = (CMFCToolBarButton*) m_Buttons.GetHead();'和 pButton->SetVisible();使第一个按钮可见并且它可以工作。谁能告诉如何遍历所有按钮并将它们设置为可见?
  • @fat:如果您有新问题,请点击 按钮。
  • @IInspectable 不,这不是一个新问题。尚未找到问题的解决方案。
  • @fat:您接受了这个答案,从而表明它解决了您的问题(忽略假代码)。您现在提出的问题可能是您要解决的更大问题的一部分,但这是一个新问题,因此请使用 按钮。
  • @fat:要设置集合 m_Buttons 中的所有按钮可见,建议使用 for 循环,如果没有帮助,请在其他问题中向我们展示您的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
相关资源
最近更新 更多