2016-03-30 65 views
0

我有兩個列表控件,它們都可以分別垂直滾動。如何在MFC中垂直同步兩個列表控件

但是我想同步滾動我也想隱藏列表控件-1中的垂直滾動條。

另一方面,如果垂直滾動列表控件-2,則列表控件1應自動向下滾動相同數量的項目,以使列表框上的選項總是顯示爲相同行。

我該如何在MFC中實現這個功能?

enter image description here

+0

爲了同步您可以用'CListBox的:: SetTopIndex'和'CListBox的:: SetTopIndex'。將滾動條隱藏在具有比可以顯示的項目多的列表框中的是另一個故事,我不確定這是否可能。您可以嘗試所有者繪製列表控件,然後完全控制列表控件1中顯示的內容,但這需要一些工作。 –

+0

更正:您可以通過將列表框的「垂直滾動條」屬性設置爲False來刪除垂直滾動條。 –

+0

@MichaelWalz感謝您的回覆。是否有可能凍結(修復)列表控制的第一列?我的意思是相同的凍結列在Excel中。 – Tuvi

回答

0

我爲此通過文檔兩個列表視圖之間的連接,但最終的結果是,以從列表控制的滾動構件的命令。

所以處理ON_WM_VSCROLL()在主,其實我有一個自定義的通知,但您可能希望只從在主喜歡的快捷方式:

if(pS->nSBCode == SB_THUMBTRACK) 
    GetDocument()->SetSplitScrollPos(pS->nPos); 

如何過你的工作過去到「SetSplitScrollPos」的喜歡它在從結束了這一點:

void CLCtrl::ScrollToVPosition(long inPos) 
{ 
    long scroll= (inPos - curVScrollPos); 
    Scroll(scroll << 20); 
    curVScrollPos= inPos; 
} 

的「滾動」的呼叫是一個CListCtrl的成員,所以你能:

mySlaveCtrl.Scroll(...); 

現在,我很抱歉,但我不記得爲什麼20的移位爲'< 16'應該將值移到hi_word,但它需要16倍,(20 - 16)。我沒有寫出所需的評論。

要機智,它可能是簡單爲您辦理主ON_WM_VSCROLL和:

if(pS->nSBCode == SB_THUMBTRACK) 
    mySlaveCtrl.Scroll((ps->pos - curVScrollPos) << 20); 
+0

非常感謝你的回放。我參考[鏈接](http://stackoverflow.com/questions/35203324/list-control-lvm-settopindex-需要) – Tuvi