//*******************************************************************************
// 関数名 :ツールバーの作成の後処理
// 作成日 :’05/06/16
// 変更日 :’07/04/06
//*******************************************************************************
// MFC\General\DockTool\MainFrm.cpp DockControlBarLeftOf より
BOOL ToolBar::CreateDocking (
CFrameWnd* frameW,
CToolBar* toolBar,
UINT idr,
CString title,
UINT barID,
CToolBar* last,
const BOOL canFloat // フローティング可能かどうか
)
{
toolBar->SetWindowText(title) ; // ウィンドウタイトルの設定
// toolBar->SetBarStyle(toolBar->GetBarStyle()|CBRS_TOOLTIPS|CBRS_FLYBY) ; // ツール チップなどの付加
toolBar->EnableDocking(CBRS_ALIGN_ANY) ; // ドッキング可能に
Resize(toolBar,idr) ; // ツールバーのリサイズ
{ // ツールバーの位置を決定する
static CToolBar* LastToolBar = NULL ; // 前のツールバーの位置
if (last != NULL) { LastToolBar = last ; } // 前のツールバーが指定された
if (LastToolBar == NULL || barID != 0) {
CControlBar* pDockBar = frameW->GetControlBar(barID) ;
if (pDockBar != NULL && canFloat) {
frameW->DockControlBar(toolBar,barID) ;
}
}
else {
frameW->RecalcLayout() ;
CRect rect ;
LastToolBar->GetWindowRect(&rect);
rect.OffsetRect(1,1);
DWORD dw = LastToolBar->GetBarStyle();
UINT tBarID = 0 ;
tBarID = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : tBarID ;
tBarID = (dw&CBRS_ALIGN_BOTTOM && tBarID==0) ? AFX_IDW_DOCKBAR_BOTTOM : tBarID ;
tBarID = (dw&CBRS_ALIGN_LEFT && tBarID==0) ? AFX_IDW_DOCKBAR_LEFT : tBarID ;
tBarID = (dw&CBRS_ALIGN_RIGHT && tBarID==0) ? AFX_IDW_DOCKBAR_RIGHT : tBarID ;
CControlBar* pDockBar = frameW->GetControlBar(tBarID) ;
if (pDockBar != NULL && canFloat) {
frameW->DockControlBar(toolBar,tBarID,&rect) ;
}
}
LastToolBar = toolBar ; // 次のツールバーの位置を求めるために保存しておく
}
return TRUE ;
}
http://cid-535f5973454c1292.skydrive.live.com/embedicon.aspx/.Public/MFC/ToolBar.hxx
ToolBar.hxx
2025/02/07 内容が古かったのと,不足していたため修正

MainFrm.h
class CMainFrame : public CFrameWnd
{
// ...
protected: // コントロール バー用メンバ
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;
/////////////////////////////////////////////////////////////
CToolBar m_wndToolZoom ; // 拡大/縮小のツールバー
CToolBar m_wndToolEye1 ; // 視点変更のツールバー
CToolBar m_wndToolEye2 ; // 視点変更のツールバー
CToolBar m_wndToolEye3 ; // 視点変更のツールバー
CToolBar m_wndToolEye4 ; // 視点変更のツールバー
CToolBar m_wndToolEye5 ; // 視点変更のツールバー
CToolBar m_wndToolExp1 ;
CToolBar m_wndToolExp2 ;
CToolBar m_wndToolExp3 ;
/////////////////////////////////////////////////////////////
// ...
} ;
MainFrm.cpp
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
#ifdef _____
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(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // 作成に失敗
}
#endif
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // 作成に失敗
}
// TODO: ツール バーをドッキング可能にしない場合は以下の3行を削除してください。
// m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
// DockControlBar(&m_wndToolBar);
// 標準のツールバーの作成
if (!CreateToolBar(this,&m_wndToolBar, IDR_MAINFRAME,_T("標準"), AFX_IDW_DOCKBAR_TOP)) { return -1 ; }
/////////////////////////////////////////////////////////////
// if (!CreateToolBar(this,&m_wndToolZoom,IDR_TOOL_ZOOM,_T("拡大/縮小"), 0, &m_wndToolBar)) { return -1 ; }
if (!CreateToolBar(this,&m_wndToolEye1,IDR_TOOL_EYE1,_T("固定視点"), AFX_IDW_DOCKBAR_LEFT)) { return -1 ; }
// if (!CreateToolBar(this,&m_wndToolEye2,IDR_TOOL_EYE2,_T("視点変更"))) { return -1 ; }
// if (!CreateToolBar(this,&m_wndToolEye3,IDR_TOOL_EYE3,_T("視点移動"), 0, &m_wndToolBar)) { return -1 ; }
if (!CreateToolBar(this,&m_wndToolEye4,IDR_TOOL_EYE4,_T("アイソメ視点"),0, &m_wndToolEye1)) { return -1 ; }
// if (!CreateToolBar(this,&m_wndToolEye5,IDR_TOOL_EYE5,_T("目標点移動"), 0, &m_wndToolEye2)) { return -1 ; }
if (!CreateToolBar(this,&m_wndToolExp1,IDR_TOOL_EXP1,_T("出力1"), 0, &m_wndToolBar)) { return -1 ; }
if (!CreateToolBar(this,&m_wndToolExp2,IDR_TOOL_EXP2,_T("出力2"), 0, &m_wndToolExp1)) { return -1 ; }
if (!CreateToolBar(this,&m_wndToolExp3,IDR_TOOL_EXP3,_T("出力3"), 0, &m_wndToolExp2)) { return -1 ; }
/////////////////////////////////////////////////////////////
// ...
return 0;
}