ホーム » MFC » 複数のツールバーを横に並べて作成

2010年1月
 12
3456789
10111213141516
17181920212223
24252627282930
31  

カテゴリー

アーカイブ

ブログ統計情報

  • 106,170 アクセス


複数のツールバーを横に並べて作成

//*******************************************************************************
// 関数名 :ツールバーの作成の後処理
// 作成日 :’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


ToolBar.hxx


2025/02/07 内容が古かったのと,不足していたため修正
ToDIB  2025

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;
	}
Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

%d人のブロガーが「いいね」をつけました。