有时候需要实现单个滚动条控制两个CEDIT功能,控制中间的滚动条左右能同时翻动,
如下图
实现方法大致如下
创建两个EDIT控件,都带滚动条,但是右侧的要隐藏
void CAlignSentenceView::OnInitialUpdate()
{
CView::OnInitialUpdate();
CRect rect;
GetClientRect(&rect);
// TODO: 在此添加专用代码和/或调用基类
m_etCH.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE |
ES_AUTOVSCROLL, CRect (0, 0, rect.Width()/2, rect.Height()), this, IDC_EDIT_CH);
m_etEG.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE |
ES_AUTOVSCROLL, CRect (rect.Width()/2, 0, rect.Width(), rect.Height()), this, IDC_EDIT_EG);
m_etCH.SetLimitText(UINT_MAX);
m_etEG.SetLimitText(UINT_MAX);
//右侧英文编辑框隐藏滚动条
m_etEG.ShowScrollBar(SB_VERT, FALSE);
}
EDIT控件是自己建立的,从CEDIT派生,在里面添加响应函数
BEGIN_MESSAGE_MAP(CAlignEdit, CEdit)
ON_WM_VSCROLL()
END_MESSAGE_MAP()
void CAlignEdit::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CEdit::OnVScroll(nSBCode, nPos, pScrollBar);
CMainFrame* pFrame=(CMainFrame*)AfxGetMainWnd();
CAlignSentenceView* pView = (CAlignSentenceView*)pFrame->GetActiveView();
//这里判断是否是英文对话框,防止形成调用环
if (this != &(pView->m_etEG))
{
pView->m_etEG.OnVScroll(nSBCode, nPos, pScrollBar);
}
}
时间: 2024-09-30 05:55:54