2016-03-30 9 views
0

Ich habe zwei Listensteuerelemente und beide können separat vertikal gescrollt werden.So synchronisieren Sie zwei Listensteuerelemente vertikal in MFC

Allerdings möchte ich Scroll auch synchronisieren Ich möchte die vertikale Bildlaufleiste in der Liste Control-1 ausblenden.

Auf der anderen Seite, wenn Sie vertikal scrollen Liste-Control-2, dann sollte die Liste Control-1 automatisch die gleiche Anzahl von Elementen in der Weise nach unten scrollen, dass die Optionen auf den beiden Listenkästen immer in der gleichen erscheinen Reihe.

Wie kann ich dies in MFC erreichen?

enter image description here

+0

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. –

+0

Korrektur: Sie können die vertikale Bildlaufleiste entfernen, indem Sie die Eigenschaft "Vertikale Bildlaufleiste" der Listbox auf False setzen. –

+0

@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

Antwort

0

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); 
+0

vielen Dank für Ihre Wiederholung. Ich verweise [link] (http://stackoverflow.com/questions/35203324/list-control-lvm-settopindex-needed) – Tuvi

Verwandte Themen