JiaYu_Guo
2018-08-30 08:43
采纳率: 33.3%
浏览 934
已采纳

MFC 两个listbox滚动条同步

同上,如何使MFC 两个listbox滚动条同步?
同上,如何使MFC 两个listbox滚动条同步?
同上,如何使MFC 两个listbox滚动条同步?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • threenewbee 2018-08-30 15:52
    已采纳

    如果两个listbox的长度相同,最简单的办法是subclass第一个滚动条的wm_scroll消息,然后再SendMessage发到第二个。(两个滚动条的长度不同,那么这个办法不行,就需要判断滚动位置,然后按比例滚动另一个了)

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • threenewbee 2018-08-30 16:38
    
    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();
    }
    
    

    图片说明

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题