こんにちは。環境はVC++.NET/WinXPです。
ツールバーをCToolBarとCToolBarCtrlを使って作成したいのですがうまくいきません。
(コードは分かりやすいようにエラー処理省略)
//CMainFrame::OnCreateの中で、
m_wndToolBar.Create( this ); //m_wndToolBarは CToolBar
//問題その1、このようにツールバーのスタイルを指定しても見た目の変更なし
DWORD toolstyle = m_wndToolBar.GetToolBarCtrl().GetStyle() | TBSTYLE_LIST;
m_wndToolBar.GetToolBarCtrl().SetStyle( toolstyle );
//ここは正常動作
m_wndToolBar.GetToolBarCtrl().AddBitmap( 1, IDB_BITMAP1 );
char lpszStrings[5] = aaa\0;
m_wndToolBar.GetToolBarCtrl().AddStrings( lpszStrings );
_TBBUTTON tb;
tb.iBitmap = 0;
tb.idCommand = ID_100;
tb.fsState = TBSTATE_ENABLED; //問題その2、ここで指定しても無視される
tb.fsStyle = TBSTYLE_CHECKGROUP | TBSTYLE_AUTOSIZE;//ここで指定しても無視される
tb.iString = 0;
m_wndToolBar.GetToolBarCtrl().AddButtons( 1, (LPTBBUTTON)&tb );
//ここは正常動作している
m_wndToolBar.SetButtonStyle( 0, TBSTYLE_CHECKGROUP | TBSTYLE_AUTOSIZE );
//ここまでで無効な状態のボタンのツールバーができる
//問題その3、こうしてもボタンは有効にならない。
m_wndToolBar.GetToolBarCtrl().EnableButton( ID_100, TRUE );
上のコードの何処が間違っているのかわかりません。
ツールバーに詳しい方、よろしくお願いします。
自分で質問して自分で回答するのもなんなのですが、
色々試してみると、ボタンを押した時のイベントハンドラがないと
上のコードはまともに動作しない事がわかりました。
つまりイベントのIDだけ用意してあっても、そのイベントが起こった時の関数
そのものがないとツールバーのボタンを作ってもまともに表示されないようです。
上のコードにコレといった間違いはありません。
ツールバーを作る時にはイベントハンドラも同時に作らなければならないようです。
(中は空でもいい)