我一直在尝试在Visual Studio 2010中的MFC项目中创建自定义工具栏。我一直在关注Ivan Horton的Beginning Visual C ++ 2010中的Sketcher教程。我遇到的问题是工具栏没有不要更新以反映我创建的图标的顺序和间距。
我创建了一个小屏幕截图来演示问题:
在后台是visual studio工具栏编辑器,带有我想要的工具栏配置。前景是实际的应用程序,它不反映我设计的图标的间距或顺序。它确实反映了正在添加的新图标,图标工作正常,但我似乎无法让他们重新订购或适当地放置自己。它们只是以我创建的顺序附加到最后。
我尝试过重新启动VS和Windows的基本技术,但无济于事。
有关让它发挥得很好的任何提示吗?缺乏这个,是否有地方可以手动查看或编辑工具栏编辑器生成的代码?
答案 0 :(得分:3)
对于初学者,如果在VS.NET 2005中创建MFC SDI / MDI项目,则不存在此类问题。它发生在VS.NET 2008和2010中。
事实上,标准工具栏的重新排列确实生效。它只是没有显示默认状态。要恢复状态:单击工具栏末尾的小箭头按钮 - >添加或删除按钮 - >标准 - >重置工具栏。
虽然我不是百分之百确定它为什么会这样(像这样的设计或一个bug),但有一种方法可以解决它并起作用:
将以下代码添加到CMainFrame::LoadFrame(...)
BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext)
{
...
// Explicitly restore toolbar state
m_wndToolBar.RestoreOriginalstate();
return TRUE;
}
我建议您与Microsoft支持工程师联系,因为网络资源很少。
答案 1 :(得分:1)
原因可能是应用程序启动时已从注册表加载工具栏状态。因此框架读取工具栏状态并将新按钮添加到结尾。您的注册表中是否有Workspace键,您是否在对工具栏进行更改时尝试删除它?密钥应位于HKEY_CURRENT_USER \ Software \ MyCompany \ MyApp \ Workspace
之类的位置MyCompany和MyApp的值通常在InitInstance中设置。始终调用RestoreOriginalState()会破坏代码以允许用户修改工具栏。