*GUI パネルで操作できるようにしてみる [#t7d53979]
 GUI は下記の bmp リソースと editor.cpp/hpp からできています。
 vstxsynth_gui.zip に以下を追加してみました。

***画面 [#rac57412]
#ref(vstxsynth_gui2.png)

***bmp リソース [#l9143ef3]

|背景|つまみスイッチ|チェックスイッチ|
|BG_BITMAP|SWITCH_BITMAP|SWITCH2_BITMAP|
|#ref(back.png)|#ref(switch.png)|#ref(switch2.png)|

***bmp リソース番号 [#kfec4687]
 editor.hpp
 enum
 {
 	BG_BITMAP = 1,
 	SWITCH_BITMAP = 2,
 	SWITCH2_BITMAP = 3,
 };

***背景表示 [#odca8aca]
 EditorClass クラスのコンストラクタで CBitmap クラスを作成して back.bmp を設定。
 
 editor.cpp
 EditorClass::EditorClass( void* effect ) : AEffGUIEditor( ( AudioEffect* )effect )
 {
 	BackGround = new CBitmap( BG_BITMAP );
 	rect.left = 0;
 	rect.top = 0;
 	rect.right = ( VstInt16 )BackGround->getWidth();
 	rect.bottom = ( VstInt16 )BackGround->getHeight();
 }

 bool EditorClass::open( void *ptr )
 {
 	int i;
 	AEffGUIEditor::open( ptr );
 	// 背景
 	CRect size( rect.left, rect.top, rect.right, rect.bottom );
 	CFrame* frame = new CFrame( size, ptr, this );
 	CPoint point( 0, 0 );
 	frame->setBackground( BackGround );
 	this->frame = frame;
 	frame->removeAll();
 	:

 void EditorClass::close( void )
 {
 	if( frame )
 	{
 		delete frame;
 		frame = 0;
 	}
 }

***つまみスイッチ [#i80d8470]
 vstxsynth サンプルの
 kFreq1
 kVolume1
 kFreq2
 kVolume2
 kVolume
 をつまみスイッチに対応させる。
 つまみスイッチは CAnimKnob を使用。
 以下参照。

 editor.cpp
 bool EditorClass::open( void *ptr )
 {
 	:
 	// つまみスイッチ (CAnimKnob)
 	CBitmap *knob_bitmap = new CBitmap( SWITCH_BITMAP );
 	for( i = 0; i < KNOB_COUNT; i ++ )
 	{
 		size( 0, 0, knob_bitmap->getWidth(), knob_bitmap->getHeight() / 25 );
 		size.offset( KnobPosition[ i ][ 1 ], KnobPosition[ i ][ 2 ] );
 		point( 0, 0 );
 		AnimKnob[ i ] = new CAnimKnob( size, this, KnobPosition[ i ][ 0 ], 25, knob_bitmap->getHeight() / 25, knob_bitmap, point );
 		AnimKnob[ i ]->setValue( effect->getParameter( KnobPosition[ i ][ 0 ] ) );
 		frame->addView( AnimKnob[ i ] );
 	}
 	knob_bitmap->forget();
 	:

 void EditorClass::idle( void )
 {
 	int i;
 	AEffGUIEditor::idle();
 	for( i = 0; i < KNOB_COUNT; i ++ )
 	{
 		AnimKnob[ i ]->setValue( effect->getParameter( KnobPosition[ i ][ 0 ] ) );
 	}
 	:

***チェックスイッチ [#rc16e1b2]
 kWaveform1
 kWaveform2
 をチェックスイッチに対応させる。
 チェックスイッチは CHorizontalSwitch で使用。
 縦に複数並んだ bmp を利用する場合に使う。
 以下参照。

 	:
 	// スイッチ (CHorizontalSwitch)
 	CBitmap *moviebutton_bitmap = new CBitmap( SWITCH2_BITMAP );
 	for( i = 0; i < MOVIEBUTTON_COUNT; i ++ )
 	{
 		size( 0, 0, moviebutton_bitmap->getWidth(), moviebutton_bitmap->getHeight() / 2 );
 		size.offset( MovieButtonPosition[ i ][ 1 ], MovieButtonPosition[ i ][ 2 ] );
 		point( 0, 0 );
 		MovieButton[ i ] = new CMovieButton( size, this, MovieButtonPosition[ i ][ 0 ], moviebutton_bitmap->getHeight() / 2, moviebutton_bitmap, point );
 		frame->addView( MovieButton[ i ] );
 	}
 	moviebutton_bitmap->forget();
 	:

 void EditorClass::idle( void )
 {
 	:
 	for( i = 0; i < MOVIEBUTTON_COUNT; i ++ )
 	{
 		MovieButton[ i ]->setValue( effect->getParameter( MovieButtonPosition[ i ][ 0 ] ) );
 	}
 }

***数値表示 [#p7af459a]
 数値表示は CParamDisplay を使用。
 以下参照。

 bool EditorClass::open( void *ptr )
 {
 	:
 	// つまみのパラメータ
 	for( i = 0; i < KNOB_COUNT; i ++ )
 	{
 		size( 1, 1, 222, 30 );
 		size.offset( 32, KnobPosition[ i ][ 2 ] );
 		ParamDisplay[ i ] = new CParamDisplay( size );
 		ParamDisplay[ i ]->setValue( effect->getParameter( KnobPosition[ i ][ 0 ] ) );
 		frame->addView( ParamDisplay[ i ] );
 	}
 	:
 	// スイッチのパラメータ
 	for( i = 0; i < MOVIEBUTTON_COUNT; i ++ )
 	{
 		size( 1, 1, 222, 30 );
 		size.offset( 32, MovieButtonPosition[ i ][ 2 ] );
 		ParamDisplay2[ i ] = new CParamDisplay( size );
 		ParamDisplay2[ i ]->setValue( effect->getParameter( MovieButtonPosition[ i ][ 0 ] ) );
 		frame->addView( ParamDisplay2[ i ] );
 	}
 	:

 void EditorClass::idle( void )
 {
 	:
 	for( i = 0; i < KNOB_COUNT; i ++ )
 	{
 		ParamDisplay[ i ]->setValue( effect->getParameter( KnobPosition[ i ][ 0 ] ) );
 	}
 	:
 	for( i = 0; i < MOVIEBUTTON_COUNT; i ++ )
 	{
 		ParamDisplay2[ i ]->setValue( effect->getParameter( MovieButtonPosition[ i ][ 0 ] ) );
 	}
 	:

***ダウンロード [#e0186163]
 ソースファイルのみです。VisualStudio.NET2003 でビルドできます。
 vstxsynth_gui フォルダと同じフォルダに vstsdk2.4 を置いて下さい。
#ref(vstxsynth_gui2.zip)~

----
[[前に戻る>VST Plugin]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS