Ich tue dies mit einer Verbindung zwischen zwei Listenansichten durch das Dokument, aber das Endergebnis ist ein Befehl an das Scroll Mitglied der Slave-Liste Kontrolle.
Griff So die ON_WM_VSCROLL() in der Meister, ich habe eigentlich eine benutzerdefinierte benachrichtigen Sie können jedoch nur von Leuten wie im Master wollen abzukürzen:
if(pS->nSBCode == SB_THUMBTRACK)
GetDocument()->SetSplitScrollPos(pS->nPos);
Wie auch immer Sie arbeiten Vergangenheit die Gleichen von 'SetSplitScrollPos' es am Slave mit dieser endet:
void CLCtrl::ScrollToVPosition(long inPos)
{
long scroll= (inPos - curVScrollPos);
Scroll(scroll << 20);
curVScrollPos= inPos;
}
der Aufruf 'Scroll' ist ein CListCtrl Mitglied, so konnte man:
mySlaveCtrl.Scroll(...);
Nun, es tut mir leid, aber ich erinnere mich nicht, warum die Verschiebung von 20 als '< < 16' den Wert auf das hi_word verschieben sollte, aber es musste 16 mal größer sein (20 - 16). Ich habe in den erforderlichen Kommentaren nicht geschrieben.
Nämlich kann es so einfach sein für Sie den Master ON_WM_VSCROLL zu handhaben und:
if(pS->nSBCode == SB_THUMBTRACK)
mySlaveCtrl.Scroll((ps->pos - curVScrollPos) << 20);
zum Synchronisieren Sie verwenden können, 'CListBox :: SetTopIndex' und' CListBox :: SetTopIndex'. Das Ausblenden der Bildlaufleiste in einer Listbox, die mehr Elemente enthält, als angezeigt werden können, ist eine andere Geschichte. Ich bin mir nicht sicher, ob dies möglich ist. Sie können versuchen, den Eigentümer das Listensteuerelement zu zeichnen, dann haben Sie die volle Kontrolle darüber, was in List-Steuerelement 1 angezeigt wird, aber das erfordert einige Arbeit. –
Korrektur: Sie können die vertikale Bildlaufleiste entfernen, indem Sie die Eigenschaft "Vertikale Bildlaufleiste" der Listbox auf False setzen. –
@MichaelWalz danke für deine antwort. Ist es möglich, die erste Spalte der Listensteuerung einzufrieren (fixieren)? Ich meine das gleiche wie Freeze-Spalte in Excel. – Tuvi