Ver 3.00 以降では SetupToolBar 関数が正常に機能しなかったので、
機能するように修正したバージョンをアップしました
よろしければこちらをダウンロードしてください m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
SetupToolBar を実装した当時の説明文が手元に残っていましたので
こちらに掲載します、不明な点がありましたらご質問下さい
あと、この機能はウインドウモード専用です
↓ここから実装当時の書き込み
// ツールバーの準備( NULL を指定するとツールバーを解除 )
int SetupToolBar( const char *BitmapName, int DivNum ) ;
// ツールバーのボタンの状態
#define TOOLBUTTON_STATE_ENABLE // 入力可能な状態
#define TOOLBUTTON_STATE_PRESSED // 押されている状態
#define TOOLBUTTON_STATE_DISABLE // 入力不可能な状態
#define TOOLBUTTON_STATE_PRESSED_DISABLE // 押されている状態で、入力不可能な状態
// ツールバーのボタンのタイプ
#define TOOLBUTTON_TYPE_NORMAL // 普通のボタン
#define TOOLBUTTON_TYPE_CHECK // 押すごとにON/OFFが切り替わるボタン
// ツールバーにボタンを追加
int AddToolBarButton( int Type, int State, int ImageIndex, int ID ) ;
// ツールバーに隙間を追加
int AddToolBarSep( void ) ;
// ツールバーのボタンの状態を取得( TRUE:押されている or 押された FALSE:押されていない )
int GetToolBarButtonState( int ID ) ;
// ツールバーのボタンの状態を設定
int SetToolBarButtonState( int ID, int State ) ;
// ツールバーのボタンを全て削除
int DeleteAllToolBarButton( void ) ;
まずツールバーのボタン用の画像を SetupToolBar 関数で読み込みます。
ボタン用の画像は、使用するボタンの絵が横一列に並んだ物を使用します。
(感覚としては LoadDivGraph で読み込む画像と同じです)
そして DivNum には、指定した画像を何個に分割して扱うか(何個分のボタン画像が
並んでいるのか)を指定します。
因みにこの画像ですが、何故かパレット画像しか受け付けないようですので
(ツールバーの仕様?)、とりあえずDXライブラリでは256色のBMPパレット画像
のみ扱えるようにしてあります。 ので、間違ってフルカラーの画像を指定したり
しないようにご注意下さい。
次に AddToolBarButton でボタンを追加します。
Type にはボタンのタイプ(TOOLBUTTON_TYPE_??? 系)を指定して、State には
ボタンの初期の状態(TOOLBUTTON_STATE_??? 系)を指定します。
ImageIndex では BitmapName で指定した分割画像の左から何番目のボタン画像
を使用するかを指定します。
ID はボタンの識別子です。ボタンの状態を調べたり変更したりする時に使用
しますので、複数のボタン同士で ID が被らないようにして下さい。
ボタンが押されたかどうかは GetToolBarButtonState で調べるのですが、
ボタンのタイプに TOOLBUTTON_TYPE_NORMAL を指定した場合はちょっと挙動が特殊です。
このタイプは普通のボタンなので、見た目上はボタンを押したあと直ぐ元に戻ってしまいますが、
GetToolBarButtonState では一度ボタンが押されると、押された後に GetToolBarButtonState で
調べられるまでボタンが押されたという情報を保持し続けます。
で、一度でも GetToolBarButtonState で状態を取得すると再び押されていない
状態を返すようになります。
TOOLBUTTON_TYPE_CHECK の場合は見た目通りの押下状態が返ります。
後は、注釈の通りです。
因みにボタンを一つだけ消したりすることは出来ませんので、配置を変更する時は
DeleteAllToolBarButton で一度全てボタンを削除した後、再度配置し直して下さい。
最後に簡単なサンプルを・・・
二つボタンを追加して二つ目のボタンが押されるまでループし続けるプログラムは
次の様になります。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) return -1;
//読み込みは一度だけ
SetupToolBar( "button.bmp", 3 ) ;
//普通のボタンを二つ追加
AddToolBarButton( TOOLBUTTON_TYPE_NORMAL, TOOLBUTTON_STATE_ENABLE, 0, 100 ) ;
AddToolBarButton( TOOLBUTTON_TYPE_NORMAL, TOOLBUTTON_STATE_ENABLE, 2, 101 ) ;
//右のボタンが押されるまでループ
while( ProcessMessage() == 0 && GetToolBarButtonState( 101 ) == FALSE ){}
DxLib_End() ;
return 0 ;
}
というわけで一応実装してみましたが、果たしてこれで良いのかどうか
よく分かっていないので、何かあれば突っ込んで下さい。
Bitmap タイプのリソースのIDを引数として取るようにしました↓
// ツールバーの準備( NULL を指定するとツールバーを解除、ResourceID は BitmapName が NULL の際に使用される )
int SetupToolBar( const char *BitmapName , int DivNum , int ResourceID ) ;
ResourceID に渡す値は
int LoadGraphToResource( int ResourceID ) ;
と同じタイプですので、Bitmap として追加したリソースのみ使用できます