フルカラーのツールバー(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; } |