MFC两个编辑框同时滚动

如题,就是滚动一个框,另一个也跟着滚动到相同位置,如何实现。有源码最好,不要乱讲,要实现过的。... 如题,就是滚动一个框,另一个也跟着滚动到相同位置,如何实现。有源码最好,不要乱讲,要实现过的。 展开
 我来答
intehel
推荐于2016-05-03 · TA获得超过1293个赞
知道大有可为答主
回答量:1601
采纳率:100%
帮助的人:1772万
展开全部

实现一个类派生于CEdit,命名为CMyEdit,处理其WM_VSCROLL消息如下:

BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
//{{AFX_MSG_MAP(CMyEdit)
    ON_WM_VSCROLL()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CMyEdit::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
    CEdit::OnVScroll(nSBCode,nPos,pScrollBar);
    if(nSBCode == SB_THUMBPOSITION)
        GetParent()->PostMessage(WM_COMMAND,MAKEWPARAM(GetDlgCtrlID(),EN_VSCROLL),(LPARAM)m_hWnd);
}

假定第一个编辑框为IDC_EDIT1,第二个为IDC_EDIT2,IDC_EDIT1关联到CMyEdit m_e1变量,IDC_EDIT2关联到CEdit m_e2变量,处理IDC_EDIT1的EN_VSCROLL事件:

CEdit	m_e2;
CMyEdit m_e1;
void CRrrDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRrrDlg)
DDX_Control(pDX, IDC_EDIT2, m_e2);
DDX_Control(pDX, IDC_EDIT1, m_e1);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRrrDlg, CDialog)
//{{AFX_MSG_MAP(CRrrDlg)
ON_EN_VSCROLL(IDC_EDIT1, OnVscrollEdit1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CRrrDlg::OnVscrollEdit1() 
{
int lineCount1 = m_e1.GetLineCount();
int lineCount2 = m_e2.GetLineCount();

int index1 = m_e1.GetFirstVisibleLine(); //zero based
if(index1 >= lineCount2)
m_e2.SendMessage(WM_VSCROLL,SB_BOTTOM,NULL);
else
m_e2.SendMessage(WM_VSCROLL,MAKEWPARAM(SB_THUMBPOSITION,index1),NULL);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式