안녕하세요.
C# WinForms에서 두개의 listview를 동시에 가로스크롤하는 기능을 구현하고자 합니다.
이런저런 방법을 다 써봤는데, 잘 안되네요.
Google을 아무리 뒤져도 그런 방법이 보이지 않습니다.
혹시 하실 수 있으신 분께 가르침 부탁드립니다.
안녕하세요.
C# WinForms에서 두개의 listview를 동시에 가로스크롤하는 기능을 구현하고자 합니다.
이런저런 방법을 다 써봤는데, 잘 안되네요.
Google을 아무리 뒤져도 그런 방법이 보이지 않습니다.
혹시 하실 수 있으신 분께 가르침 부탁드립니다.
WinForms인지 WPF인지 알려주셔야 답변이 가능할 것 같네요.
안녕하세요. WinForms입니다. 가르침을 하사하여 주십시오.
GetScrollPos
API로 스크롤의 위치를 가져오고,
SendMessage
API를 통해 스크롤을 위치를 조정하면 됩니다.
public sealed class ScrollMessageFilter : IMessageFilter
{
[DllImport("user32.dll")]
private static extern int GetScrollPos(IntPtr hWnd, int nBar);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
private const int WM_VSCROLL = 0x0115;
private const int SB_THUMBPOSITION = 4;
public ScrollMessageFilter(ListBox source, ListBox dest)
=> (Source, Dest) = (source, dest);
public ListBox Source { get; }
public ListBox Dest { get; }
public bool PreFilterMessage(ref Message m)
{
if (m.HWnd == Source.Handle)
{
SynchronizeListBoxScroll();
}
return false;
}
public void SynchronizeListBoxScroll()
{
int pos = GetScrollPos(Source.Handle, 1);
int wParam = SB_THUMBPOSITION | (pos << 16);
SendMessage(Dest.Handle, WM_VSCROLL, wParam, 0);
}
}
사용법은 알아서…