MFC两个编辑框同时滚动
答案:1 悬赏:40
解决时间 2021-02-17 19:53
- 提问者网友:骨子里的高雅
- 2021-02-17 05:00
MFC两个编辑框同时滚动
最佳答案
- 二级知识专家网友:一把行者刀
- 2021-02-17 05:31
实现一个类派生于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事件:
CEditm_e2;
CMyEditm_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);
}
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事件:
CEditm_e2;
CMyEditm_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);
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯