Я поражен тем, насколько хорошо реализованы нативные компоненты Symbian. Одним из них является CAknSlider. CAknSlider — это элемент управления с ползунком, который пользователи могут использовать для перемещения по полосе, ориентация которой может быть вертикальной или горизонтальной.
Теперь, когда вы двигаете ползунок, скольжение очень плавное и не мерцает. Но если бы по какой-то причине мне пришлось реализовать собственный элемент управления ползунком, я бы не получил его таким же аккуратным, как CAknSlider.
Итак, мой вопрос в том, как я могу понять, как CAknSlider реализован под капотом. Я хочу реализовать собственный ползунок для своего радиоприложения для управления громкостью аудиопотока.
Любая идея, как мне это сделать.
[EDIT: в ответ на комментарий от 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 ). Обратите внимание, что тот, который я создаю, не имеет индикатора процентного значения и текстовых меток минимума и максимума, хотя я указал их в ресурсе. Внешний вид тоже жалкий.