Ich bin erstaunt, wie gut die nativen Symbian-Komponenten implementiert sind. Eine davon ist CAknSlider. CAknSlider ist ein Steuerelement mit einem Schieberegler, den die Benutzer entlang einer Leiste verschieben können, deren Ausrichtung vertikal oder horizontal sein kann.
Wenn Sie nun den Schieberegler verschieben, ist das Gleiten sehr gleichmäßig und flackert nicht mehr. Aber wenn ich aus irgendeinem Grund ein benutzerdefiniertes Schieberegler-Steuerelement zu implementieren würde ich nicht bekommen es so ordentlich wie CAknSlider.
Also meine Frage ist, wie kann ich herausfinden, wie CAknSlider unter der Haube implementiert ist. Ich möchte einen benutzerdefinierten Schieberegler für meine Radio-Anwendung implementieren, um die Lautstärke des Audio-Streams zu steuern.
Haben Sie eine Idee, wie ich vorgehen soll?
(EDIT: Als Antwort auf den Kommentar von laalto)
Das CAknSlider-Steuerelement wird häufig als Einstellungsposten im Einstellungsbildschirm .
Ich habe noch nie gesehen, dass es als Komponentensteuerelement innerhalb eines zusammengesetzten Steuerelementcontainers (wie CCoeControl oder CAknView) implementiert wurde. Dies ist, was ich bis jetzt versucht habe:
Zuerst habe ich eine Ressourcendatei erstellt, die das Schieberegler-Steuerelement wie unten beschrieben hat:
RESOURCE SLIDER r_volume_slider
{
layout=EAknCtSlider;
minvalue=0;
maxvalue=10;
step=1;
valuetype=EAknSliderValuePercentage;
minlabel="mute";
maxlabel="full";
}
Dann verwende ich die Ressourcendatei in meinem Quellcode, um den Schieberegler wie unten zu erstellen:
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();
}
Hier ist nun der Vergleich zwischen dem CAknSlider als Einstellungselement ( Bildschirmfoto1 ) und der CAknSlider, der durch die oben beschriebene Technik erzeugt wird ( Bildschirmfoto2 ). Beachten Sie, dass die von mir erstellte Datei keine Prozentwertanzeige und keine Mindest- und Höchstwertbeschriftung enthält, obwohl ich sie in der Ressource angegeben habe. Auch das Aussehen und die Handhabung sind erbärmlich.