Я поражен тем, насколько хорошо реализованы нативные компоненты 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 ). Обратите внимание, что у созданного мной нет индикатора процентного значения, а также минимальных и максимальных текстовых меток, хотя я указал их в ресурсе. Внешний вид также жалок.