GUI パネルで操作できるようにしてみる

GUI は下記の bmp リソースと editor.cpp/hpp からできています。
vstxsynth_gui.zip に以下を追加してみました。

画面

vstxsynth_gui2.png

bmp リソース

背景つまみスイッチチェックスイッチ
BG_BITMAPSWITCH_BITMAPSWITCH2_BITMAP
back.png
switch.png
switch2.png

bmp リソース番号

editor.hpp
enum
{
	BG_BITMAP = 1,
	SWITCH_BITMAP = 2,
	SWITCH2_BITMAP = 3,
};

背景表示

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;
	}
}

つまみスイッチ

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 ] ) );
	}
	:

チェックスイッチ

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 ] ) );
	}
}

数値表示

数値表示は 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 ] ) );
	}
	:

ダウンロード

ソースファイルのみです。VisualStudio.NET2003 でビルドできます。
vstxsynth_gui フォルダと同じフォルダに vstsdk2.4 を置いて下さい。

前に戻る


添付ファイル: filevstxsynth_gui2.zip 128件 [詳細] fileswitch2.png 152件 [詳細] filevstxsynth_gui2.png 161件 [詳細] fileswitch.png 153件 [詳細] fileback.png 223件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-12-16 (日) 15:25:53 (1987d)