2016-03-30 24 views
0

2つのリストコントロールがあり、両方を別々に垂直スクロール可能です。MFCで2つのリストコントロールを垂直に同期させる方法

しかし、スクロールを同期したい場合でも、リストコントロール-1の垂直スクロールバーを非表示にしたいと思います。

一方、垂直方向リストコントロール-2をスクロールすると、リストコントロール-1は、リストボックスの両方のオプションが常に同じものになるように、同じ量のアイテムを自動的にスクロールする必要があります行。

どのようにMFCでこれを達成できますか?

enter image description here

+0

あなたは 'はCListBox :: SetTopIndex'と'はCListBox :: SetTopIndex'を使用することができます同期させるため。表示可能なアイテムよりも多くのアイテムを含むリストボックスにスクロールバーを隠すことは別の話ですが、これが可能かどうかはわかりません。オーナーがリストコントロールを描こうとすると、リストコントロール1に表示されているものを完全にコントロールできますが、それにはいくつかの作業が必要です。 –

+0

修正:リストボックスの "垂直スクロールバー"プロパティをFalseに設定すると、垂直スクロールバーを削除できます。 –

+0

@MichaelWalzご返信ありがとうございます。リストコントロールの最初の列をフリーズ(修正)することは可能ですか? Excelのフリーズカラムと同じ意味です。 – Tuvi

答えて

0

私は、ドキュメントを介して2つのリストビューの間の接続でこれを行うが、最終結果は、スレーブリストコントロールのスクロール部材へのコマンドです。

ので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(...); 

さて、申し訳ありませんが、 '< < 16'のような20のシフトが値を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-needed) – Tuvi

関連する問題