如何动态创建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按钮和图标?