Win32プログラミング講座 〜 Step24. ツールバーを使う@ 〜![]() 今回は、Windowsアプリでは非常に需要が高い、ツールバーについて話を進めます。 ステータスバーに続き、今回のツールバーもアプリケーションの雰囲気や使い勝手を大幅に向上させることができるでしょう。 今回作成するプログラムのサンプルファイルを置いておきますので、参考にしたい方はどうぞ☆ Toolbar.zip(プロジェクトに必要なファイルがすべて入っています) ツールバーを生成するにはCreateToolbarEx関数を! このCreateToolbarEx関数、パラメータが多くて面倒ですが、難しい内容はありません。一つ一つ見ていきましょう。CreateToolbarEx ( _
hWnd As DWord, _ '親ウィンドウのハンドル
ws As DWord, _ 'ツールバーのウィンドウスタイル(WM_???)
wID As DWord, _ 'ツールバーのID
nBitmaps As Long, _ 'ボタンイメージの数
hBMInst As DWord, _ 'インスタンスハンドル(GetModuleHandle関数で取得)
wBMID As DWord, _ 'ビットマップのリソースID
lpButtons As VoidPtr, _ 'TBBUTTON構造体配列へのポインタ
iNumButtons As Long, _ 'ボタンの個数
dxButton As Long, _ 'ボタンの幅
dyButton As Long, _ 'ボタンの高さ
dxBitmap As Long, _ '一つのボタンに対するビットマップの幅
dyBitmap As Long, _ '一つのボタンに対するビットマップの高さ
uStructSize As DWord _ 'TBBUTTON構造体のサイズ
) As DWord
これらのパラメータでは、ボタンやビットマップの違いに注意しながら記述していきましょう。ツールバーのウィンドウハンドルが戻り値になります。 ボタンごとの情報を格納するのがTBBUTTON構造体 Type TBBUTTON
iBitmap As Long '左から何番目のビットマップを使うか
idCommand As Long 'コマンドID
fsState As Byte 'ボタンの状態(表示・非表示や有効・無効など)
fsStyle As Byte 'ボタンのスタイル(ボタンスタイル、セパレータスタイルなど)
bReserved[1] As Byte 'このメンバは無視して下さい
dwData As DWord 'アプリケーション定義データ(今回は利用しません)
iString As Long 'ボタン文字列(今回は利用しません)
End Type
fsStateメンバには、TBSTATE_ENABLED(有効)、TBSTATE_HIDDEN(非表示)などの情報を指定します。fsStyleメンバには、通常ボタンなら TBSTYLE_BUTTON を、セパレータ(区切り空白)ならTBSTYLE_SEP を指定します。 ツールバー作成を実践! "Toolbar" などという名前のプロジェクトを新規作成しておいて下さい。ノーマルウィンドウベースで、プロジェクト オプション内の「コモンコントロールを使用する」にチェックを入れておきます。 次に、ボタン用のビットマップを用意します。通常、一つのボタンは 16*15 のサイズであり、横一列にボタンイメージが並べられたビットマップが有効です。 今回は、下のようなボタン画像を使用するので、あらかじめプロジェクト フォルダ内に保存しておきましょう。 例: (このボタン画像をダウンロードする)保存できたら、このビットマップファイルをリソースデータに追加します。ProjectViewのMaterialタブの「Bitmapリソース」フォルダを右クリックし、ファイルを挿入します。ID は IDB_BITMAP1 などとしておきましょう。 メニューを作る 「Menu」フォルダ内に "MainMenu" を作成し、下のような構成になるよう、メニューの追加を行っていきます。メニュー項目を挿入する場合は、挿入したい場所の1つ上の項目を選択し、「挿入」ボタンをクリックしていくことを思い出しましょう。メニューの編集方法は、ステップ6、ステップ7で解説しています。 また、メニューの作成が完了したら忘れないうちに "MainWnd" のRAD画面を開き、ウィンドウ プロパティ内の「Menu」を "MainMenu" にセットしておいて下さい。 ![]()
ここからコーディング "MainWnd.sbp" を開きコーディングを行っていきます。
SetTbButtonData関数は、TBBUTTON構造体のメンバを格納しやすくするための役割を果たします。
ビットマップ・ボタンの個数・サイズは少しややこしいかもしれませんが、間違いのないよう、念入りにチェックしておきましょう。今回は、セパレータを1つ含むため、ビットマップの個数よりもボタンの個数のほうが1つだけ多くなっています。
これですべての作業は完了です。しっかりとツールバーが表示され、イベントメッセージが送られるかどうかをチェックしてみましょう☆ トップへ戻る |