正文

CEdit重新审视2006-11-29 21:06:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yuqiexing/21053.html

分享到:

一个从没想过的问题今天终于出现了!我自己都感到以外!呵呵,什么问题呢?可能你也没想过哦。即使想过,你解答了没有?

是一个聊天的程序,类似于QQ的界面。简化一点说把。(注意是简化)一个基于对话框的的程序,只有2个编辑框m_edit1,m_edit2, 还有一个是按钮。现在我要做的就是在 m_edit2中输入,然后点击按钮,内容就跑到了m_edit1中。并且每次点击后,上次 m_edit1的内容还会留下来,当然是聊天嘛,每次发送的内容要在m_edit1的最后显示。呵呵,听起来很简单哦

注意我最后一句话。如果你采用连加的话,像这样:

m_edit1.GetWindowText(m_str1);

m_edit2.GetWindowText(m_str2);

m_str1+=m_str2;

m_edit1.SetWindowText(m_str1);

内容是出现了,但是光标还在第一个位置,这样如果m_edit1是一个多行的程序,有垂直滚动条,那么就麻烦了,前面我已经说了,要求是  “每次发送的内容要在m_edit1的最后显示”,也就是要求滚动条要移动到最后,按照上面那种方法,滚动条都在上面。

怎么办哪?没有关于滚动条的函数啊。其实不是滚动条的原因,原因是光标。光标还在第一个位置啊。明白了,我们要把光标移动到最后。

于是上msdn了。找“CEdit”,“class members“,这么多函数,还不知哪个是移动光标的函数呢。一个一个的试。posfromchar,SetCaretPos ,......都不行啊,晕了。。。

正绝望呢,突然想起了久违的setsel和GetSel  我们都知道CEdit是用来选中编辑框中的内容的,它们会不会有用呢?管他呢,先 全部选中再说。

m_edit1.SetFocus();

m_edit1.SetSel(0,-1);

啊!选中了!不,我不是惊喜这个(不然我会被看贴的砍死的)。除了选中之余,光标也移动到了最后!呵呵,成功了!

再想想,还不行,差一点。这样岂不是我每次要全部选中?不好。既然选中是移动光标的话,那我干脆一不做二不休,函数照用,但是我不选,呵呵,这样写:

m_edit.SetFocus();

m_edit1.SetSel(m_str1.GetLength(),m_str1.GetLength());

搞定了!


高兴之余,我又想了一下这个问题。SetSel可以确定光标位置,那么GetSel不就可以知道光标的位置吗?试试:(另外一个程序)

 DWORD   curPos  =   m_edit.GetSel();  
 CString   sCurStr ;
 m_edit.GetWindowText(sCurStr);  
 sCurStr.Insert(LOWORD(curPos),   str);  
 m_edit.SetWindowText(sCurStr);

这样的话,随便定义光标在一个位置,都可以插入东西了,呵呵。

感慨就是函数的功能还真多!看来要慢慢理解!

 

 

阅读(4833) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册