if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } if (!m_wndMyToolBar.Create(this)|| !m_wndMyToolBar.LoadToolBar(IDR_MYMAINFRAME)) //另外的资源 { TRACE0("Failed to create MYtoolbar\n"); return -1; // fail to create } if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } // TODO: Remove this if you don't want tool tips or a resizeable toolbar m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); m_wndMyToolBar.SetBarStyle(m_wndMyToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); // TODO: Delete these three lines if you don't want the toolbar to // be dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); m_wndMyToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); DockControlBar(&m_wndMyToolBar);
以下供参考int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.Create(this) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
} if (!m_wndMyToolBar.Create(this)||
!m_wndMyToolBar.LoadToolBar(IDR_MYMAINFRAME)) //另外的资源
{
TRACE0("Failed to create MYtoolbar\n");
return -1; // fail to create
} if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
} // TODO: Remove this if you don't want tool tips or a resizeable toolbar
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndMyToolBar.SetBarStyle(m_wndMyToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndMyToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar);
DockControlBar(&m_wndMyToolBar);
return 0;
}我的想法:
在切换view的时候,
把对应的controlbar用ShowWindow(SW_SHOW)显示出来
其它的controlbar用ShowWindow(SW_HIDE)隐藏即可
http://www.codeproject.com
具体的用法看看MSDN就可以了
我也那么做过,只是一到m_wndMyToolBar.ShowWindow(SW_SHOW)这就出错,我还试过SetFocus()、SetActiveView()、BringWindowToTop()等方法,但都是编译不报错,运行时到该语句就出错。由于我没经验,分析不出到底是什么原因。TO: riverboat(诸葛不亮),
我去codeproject看过,那上面有一个列子,还有一个Another solution。他的那个例子里要多建一个客户区的类,而且他的两个视图在切换的时候不能重绘,存在很多毛病。如果没有那些毛病的话,他的例子正是我要的效果。我对重绘这块搞的一塌糊涂,所以没敢用他的方法。如果您能帮我把那个例子的bug修正,我再另给您100分。对于他那儿的第二种解决方法,看去来很好,在SelectBar()中要动态清除并再生成工具栏。可是我这也是到了关键的地方m_myToolBar->LoadToolBar()就出错。 头晕!TO: Cline(营营) 、xt_jat(桑巴) ,
我对消息这也不熟,我不清楚我的消息应该在哪儿发,消息又该在哪儿处理。比如我有mmView和nnView两个视图,当激活mmView时要发送消息,我的消息在mmView.cpp的OnSetFocus()中发吗? 消息又再哪儿处理?在MainFrm.cpp里建一个处理函数,在该函数中ShowWindow()或SetActiveView()吗??TO: MasterGo(皮皮),
能详细讲一下吗??TO: Mackz(在相互) ,
我的是MDI非常感谢诸位的帮助。我先把上一个帖子结了。这个帖子再讨论两天。
还望大哥大姐们继续指点。谢谢!!
ON_UPDATE_COMMAND_UI(ID_YOUR_BAR, OnUpdateControlBarMenu)吗?-------------挖掘MFC代码--------------BOOL CFrameWnd::OnBarCheck(UINT nID)
{
ASSERT(ID_VIEW_STATUS_BAR == AFX_IDW_STATUS_BAR);
ASSERT(ID_VIEW_TOOLBAR == AFX_IDW_TOOLBAR);
ASSERT(ID_VIEW_REBAR == AFX_IDW_REBAR); CControlBar* pBar = GetControlBar(nID);
if (pBar != NULL)
{
ShowControlBar(pBar, (pBar->GetStyle() & WS_VISIBLE) == 0, FALSE);
return TRUE;
}
return FALSE;
}void CFrameWnd::ShowControlBar(CControlBar* pBar, BOOL bShow, BOOL bDelay)
{
ASSERT(pBar != NULL);
CFrameWnd* pParentFrame = pBar->GetDockingFrame();
ASSERT(pParentFrame->GetTopLevelParent() == GetTopLevelParent());
// parent frame of bar must be related if (bDelay)
{
pBar->DelayShow(bShow);
pParentFrame->DelayRecalcLayout();
}
else
{
pBar->SetWindowPos(NULL, 0, 0, 0, 0,
SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|
(bShow ? SWP_SHOWWINDOW : SWP_HIDEWINDOW));
// call DelayShow to clear any contradictory DelayShow
pBar->DelayShow(bShow);
if (bShow || !pBar->IsFloating())
pParentFrame->RecalcLayout(FALSE);
} // show or hide the floating frame as appropriate
if (pBar->IsFloating())
{
int nVisCount = pBar->m_pDockBar != NULL ?
pBar->m_pDockBar->GetDockedVisibleCount() : bShow ? 1 : 0;
if (nVisCount == 1 && bShow)
{
pParentFrame->m_nShowDelay = -1;
if (bDelay)
{
pParentFrame->m_nShowDelay = SW_SHOWNA;
pParentFrame->RecalcLayout(FALSE);
}
else
pParentFrame->ShowWindow(SW_SHOWNA);
}
else if (nVisCount == 0)
{
ASSERT(!bShow);
pParentFrame->m_nShowDelay = -1;
if (bDelay)
pParentFrame->m_nShowDelay = SW_HIDE;
else
pParentFrame->ShowWindow(SW_HIDE);
}
else if (!bDelay)
{
pParentFrame->RecalcLayout(FALSE);
}
}
}
把程序发给我[email protected]
我帮你看看
再次感谢。请您到我新开的帖子领分:
http://expert.csdn.net/Expert/topic/1590/1590896.xml?temp=.5631983