ネイティブの Symbian コンポーネントがいかにうまく実装されているかに驚かされます。それらの 1 つが CAknSlider です。CAknSlider は、ユーザーが垂直方向または水平方向のバーに沿ってスライドするために使用できるスライダーを持つコントロールです。
スライダーをスライドさせると、スライドが非常にスムーズになり、ちらつきがなくなりました。しかし、何らかの理由でカスタム スライダー コントロールを実装することになった場合、CAknSlider ほどきれいにはなりません。
したがって、私の質問は、CAknSlider が内部でどのように実装されているかをどのように理解できるかということです。ラジオ アプリケーションにカスタム スライダーを実装して、オーディオ ストリームの音量を制御したいと考えています。
どうすればいいですか。
[編集: laalto からのコメントに応えて]
CAknSlider コントロールは、設定画面の設定項目として実装されることが多いです。
複合コントロール コンテナー ( CCoeControl や CAknView など) 内のコンポーネント コントロールとして実装されているのを見たことがありません。これは私がこれまでに試したことです:
最初に、以下のようなスライダー コントロールを記述するリソース ファイルを作成しました。
RESOURCE SLIDER r_volume_slider
{
layout=EAknCtSlider;
minvalue=0;
maxvalue=10;
step=1;
valuetype=EAknSliderValuePercentage;
minlabel="mute";
maxlabel="full";
}
次に、ソースのリソース ファイルを使用して、以下のようなスライダーを作成しています。
void CVolumePopupAppView::ConstructL(const TRect& aRect)
{
// Create a window for this application view
CreateWindowL();
InitComponentArrayL( );
iSlider = new ( ELeave ) CAknSlider( );
TResourceReader reader;
iEikonEnv->CreateResourceReaderLC( reader, R_VOLUME_SLIDER );
iSlider->ConstructFromResourceL( reader );
CleanupStack::PopAndDestroy ( );
iSlider->SetContainerWindowL( *this );
iSlider->SetParent( this );
Components().AppendLC( iSlider );
CleanupStack::Pop ( iSlider );
// Set the windows size
SetRect(aRect);
// Activate the window, which makes it ready to be drawn
ActivateL();
}
ここで、設定項目としての CAknSlider ( Screenshot1 ) と、上記の手法で作成された CAknSlider ( Screenshot2 ) の比較を示します。私が作成したものには、リソースで指定したにもかかわらず、パーセント値インジケーターと最小および最大のテキスト ラベルがないことに注意してください。見た目も手触りも残念。