我对原生 Symbian 组件的实现程度感到惊讶。其中之一是 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 ) 之间的比较。请注意,我创建的那个没有百分比值指示符以及最小和最大文本标签,即使我在资源中指定了它们。外观和感觉也很可悲。