同上,如何使MFC 两个listbox滚动条同步?
同上,如何使MFC 两个listbox滚动条同步?
同上,如何使MFC 两个listbox滚动条同步?
如果两个listbox的长度相同,最简单的办法是subclass第一个滚动条的wm_scroll消息,然后再SendMessage发到第二个。(两个滚动条的长度不同,那么这个办法不行,就需要判断滚动位置,然后按比例滚动另一个了)
WNDPROC g_pOldWndProc;
HWND hlist2;
LRESULT MyOwnWinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (msg == WM_VSCROLL)
SendMessage(hlist2, msg, wParam, lParam);
return g_pOldWndProc(hWnd, msg, wParam, lParam);
}
void CQ698911Dlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
wchar_t num[10];
for (int i = 0; i < 100; i++)
{
memset(num, 0, 10 * sizeof(wchar_t));
_itow(i, num, 10);
m_list1.InsertString(i, (LPCTSTR)num);
m_list2.InsertString(i, (LPCTSTR)num);
}
g_pOldWndProc = (WNDPROC)SetWindowLongPtr(m_list1.m_hWnd, GWLP_WNDPROC, (LONG_PTR)MyOwnWinProc);
hlist2 = m_list2.m_hWnd;
}
void CQ698911Dlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
SetWindowLongPtr(m_list1.m_hWnd, GWLP_WNDPROC, (LONG_PTR)g_pOldWndProc);
CDialogEx::OnClose();
}