非常之奇怪于是我新建了一个项目,只对其中默认加载IDR_MAINFRAME的m_wndToolBar进行操作,下面是OnCreate中的和m_wndToolBar相关的源码
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME))
{
TRACE0("未能创建工具栏\n");
return -1; // 未能创建
}
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndToolBar);
照理来说,EnableDocking(CBRS_ALIGN_ANY)允许各种菜单对象进行停靠
CBRS_TOP指定了m_wndToolBar初始的停靠位置
而m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY)允许m_wndToolBar自身在用户操作下移动到客户区任意窗口进行停靠
但最终的结果是CBRS_TOP这个参数经常会不起作用,当我把它改为CBRS_RIGHT的时候,它也不会停靠到右边,把它改回为CBRS_TOP的时候,它竟然悬浮在客户区中! 有的时候,两次F5出的结果也会不一样,第一次它直接失踪了,第二次才显示出来
请问究竟哪个函数是可以设置某个工具栏的初始停靠位置的!
8 个解决方案
#1
http://msdn.microsoft.com/zh-cn/library/cc468230(v=vs.71).aspx
#2
看过了,不过vc2008中新的窗体貌似不支持CControlBar了,定义的是CMFCToolBar,是从CWnd->CBasePane->CPane->CMFCBaseToolBar->继承过来的
我想解决的是设置 初始停靠位置的问题
CFrameWnd::EnableDocking(CBRS_ALIGN_ANY)
和 CMFCToolBar::EnableDocking(CBRS_ALIGN_ANY)已经解决了 可以停靠的问题了,但是生成程序后 初始位置混乱,和create中填的参数不符
#3
需要删除注册表中的一些数据项
具体的在注册表中查询
具体的在注册表中查询
#4
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
在注册表中 查找SetRegistryKey(_T("……"));中的内容
在注册表中 查找SetRegistryKey(_T("……"));中的内容
#5
不懂了。。和注册表有关系么,指点下
#6
2008对于工具栏以及其他浮动工具具有记忆功能
这些都表现在注册表中
查看你的APP类InitInstance()函数有类似的函数
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
在CMainFrame::OnCreate()中有LoadBarState(_T("ToolBarState"));
在其他退出函数中应该有 SaveBarState(_T("ToolBarState"));
说的比较笼统具体你可以查看MSDN
这些都表现在注册表中
查看你的APP类InitInstance()函数有类似的函数
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
在CMainFrame::OnCreate()中有LoadBarState(_T("ToolBarState"));
在其他退出函数中应该有 SaveBarState(_T("ToolBarState"));
说的比较笼统具体你可以查看MSDN
#7
md,折腾我好几天啊,想ms也没那么龊吧,还是找到方法了,在CMainFrame::OnActivate里,把你的barm_testBar.ShowWindow(SW_SHOW);就可以显示了,我测试的不是toolbar,是dockbar,不知道对你们是否适用。
#8
谢了 晓得了不少
#1
http://msdn.microsoft.com/zh-cn/library/cc468230(v=vs.71).aspx
#2
看过了,不过vc2008中新的窗体貌似不支持CControlBar了,定义的是CMFCToolBar,是从CWnd->CBasePane->CPane->CMFCBaseToolBar->继承过来的
我想解决的是设置 初始停靠位置的问题
CFrameWnd::EnableDocking(CBRS_ALIGN_ANY)
和 CMFCToolBar::EnableDocking(CBRS_ALIGN_ANY)已经解决了 可以停靠的问题了,但是生成程序后 初始位置混乱,和create中填的参数不符
#3
需要删除注册表中的一些数据项
具体的在注册表中查询
具体的在注册表中查询
#4
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
在注册表中 查找SetRegistryKey(_T("……"));中的内容
在注册表中 查找SetRegistryKey(_T("……"));中的内容
#5
不懂了。。和注册表有关系么,指点下
#6
2008对于工具栏以及其他浮动工具具有记忆功能
这些都表现在注册表中
查看你的APP类InitInstance()函数有类似的函数
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
在CMainFrame::OnCreate()中有LoadBarState(_T("ToolBarState"));
在其他退出函数中应该有 SaveBarState(_T("ToolBarState"));
说的比较笼统具体你可以查看MSDN
这些都表现在注册表中
查看你的APP类InitInstance()函数有类似的函数
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
在CMainFrame::OnCreate()中有LoadBarState(_T("ToolBarState"));
在其他退出函数中应该有 SaveBarState(_T("ToolBarState"));
说的比较笼统具体你可以查看MSDN
#7
md,折腾我好几天啊,想ms也没那么龊吧,还是找到方法了,在CMainFrame::OnActivate里,把你的barm_testBar.ShowWindow(SW_SHOW);就可以显示了,我测试的不是toolbar,是dockbar,不知道对你们是否适用。
#8
谢了 晓得了不少