editbox中自带垂直滚动条实现实时拖动显示

花了不少时间去搞清楚窗口滚动条和滚动条控件的区别,对于后者的消息处理我是清楚的,就是给程序加上控件然后再加上对应的控件消息的处理函数。对于前者的处理我还先前真的不清楚。在做一个关于socket网络编程的例子时,我遇到了一个难题。我给一个对话框添加了一个editbox,用来动态显示从目标ip地址发送来的文字(此显示过程位于我创建的一个时钟函数void CWangluoliaotianDlg::OnTimer(UINT nIDEvent)内)。我比较偷懒啦,没有给此edit控件添加垂直滚动条控件,而是使用了editbox控件自带的垂直滚动条(具体做法是在资源视图中对应的edit控件的vertical scroll、auto vscroll属性上选择ture,本人用的是vs2010)。在未作处理时当edit控件中文字超过了edit显示框的范围,如果拉动垂直滚动条到最下方以期望看到edit控件下方的内容,我发现对话框只是短暂的显示了最下方的内容然后又恢复到对话框的最上方了。原因分析:所有对edit内容的动态显示操作是在onTimer中进行的,随着时钟的周期运行,edit控件的操作是一直在更新的,我并没有将垂直滚动条拖动到的位置传送给系统进行实时处理。百度了一下,结果找了很久才找到一片很有用的文章,连接如下:http://blog.csdn.net/chenmeng2192089/article/details/6741891,我在ontimer()函数中加入了如下一段代码,运行后,实现了edit控件实时拖动显示效果,具体如下图。

void CWangluoliaotianDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default

CWnd *edit1,*edit2;
static int po=0;
edit1=GetDlgItem(IDC_EDIT1);
//edit1->SetWindowText(m_edit1);//UpdateData(false);
edit2=GetDlgItem(IDC_EDIT2);
edit2->UpdateData(true);
/设置滚动条自动往下滚
CEdit* p1=(CEdit*)GetDlgItem(IDC_EDIT1);
ASSERT(p1&&p1->GetSafeHwnd());
po=p1->GetScrollPos(SB_VERT);//获取滚动条当前位置
edit1->SetWindowText(m_edit1);//刷新edit1内的数据
p1->LineScroll(po);//将显示位置定在滚动条所在的位置
//
CDialog::OnTimer(nIDEvent);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值