[kaze's test] プログラミングメモ →目次

フルカラーのツールバー(VC++)

VC++の開発環境で、ツールバー用のビットマップをフルカラーで編集できません。別の方法でフルカラーのビットマップを用意して、ツールバーに登録する必要があります。以下は、MFCのメインフレームのツールバーにフルカラーの絵を付ける方法のメモです。

1.SDIプロジェクトを作成します。サブフォルダresにあるToolbar.bmpをToolbartrue.bmpにコピーします。Toolbartrue.bmpをフルカラーで一旦保存して、綺麗に編集します。VC++でフルカラーのビットマップを編集できない場合は、ウィンドウズのツール(例えばペイント)で編集することができます。

2.リソースエディットで、ビットマップ(IDB_BITMAP1)を追加して、プロパティの関連ファイルをToolbartrue.bmpに変更します。CMainFrameクラスにメンバー変数CImageList m_Imglist;を追加します。

 



 

3.int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)関数を追加修正すれば完成です。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	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;      // 作成に失敗
	}

	m_Imglist.Create(24,24,ILC_COLOR24 | ILC_MASK,1,1);
	static CBitmap bitmap;
	bitmap.LoadBitmap(IDB_BITMAP1);
	m_Imglist.Add(&bitmap, RGB(1,1,1));
	m_wndToolBar.GetToolBarCtrl().SetImageList(&m_Imglist);
    ...;
    ...;
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);

	return 0;
}

4.方法の二。上のやり方では、ツールバーボタンは、無効(disabled)の状態になる時に、絵を理想的に作れない場合あります。無効状態のビットマップ(Toolbartrue_d.bmp)も自分で作成すれば解決できます。無効状態用のビットマップ(IDB_BITMAP2)を追加して、IDB_BITMAP2とToolbartrue_d.bmpを関連付けます。CMainFrameクラスにCImageList m_Imglist_d;を追加します。CMainFrame::OnCreate()の追加修正は、下記のようです。正常状態と無効状態を別々で絵を登録するわけです。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	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;      // 作成に失敗
	}

	m_Imglist.Create(IDB_BITMAP1, 24, 1, RGB(1,1,1));
	m_wndToolBar.GetToolBarCtrl().SetImageList(&m_Imglist);
  
	m_Imglist_d.Create(IDB_BITMAP2, 24, 1, RGB(1,1,1));
	m_wndToolBar.GetToolBarCtrl().SetDisabledImageList(&m_Imglistd);
    ...;
    ...;
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);

	return 0;
}