1.鼠标单击一个字能够反色显示并且能够知道选了哪个字
2.鼠标左右拖曳某个字能够卷动这行字
我不知道该如何下手,请各位达人帮忙看看,要多少我再开。

解决方案 »

  1.   

    继承ONLBUTTONDOWN,
    ONMOUSEMOVE
      

  2.   

    是不是讲得简单了点啊?
    OnLButtonDown的时候怎么判断点在了哪个字上面?
      

  3.   

    在调用CEdit::OnLButtonDown后,可以用GetSel获得当前光标的所在位置,你就知道哪个字符被选中了。不过问题是你获得的是两个字符中间的位置,比如说第一个字符字后,第n个字符之后等等。所以看你是要处理前一个字符还是后一个字符了。而且你还要处理汉字的问题喔。
    调用SetSel( nStartChar, nEndChar )可以把nStartChar和nEndChar之间的字符反显。
    你所说的”卷动“这个字是什么意思不明白。不过我估计你要实现的功能CEdit类已经给你实现了。
      

  4.   

    第2个就是说文字长过EditBox的时候拖曳一个字可以Scroll这行字,how?
      

  5.   

    创建编辑框的时候用ES_AUTOHSCROLL就行了。
      

  6.   

    我不想要它AUTOSCROOL,我需要按在某个字上面可以拖曳SCROOL,怎么做呢?
      

  7.   

    你试试看SetSel能不能实现——记住要刷新喔。如果不行,就用ScrollWindow吧。肯定行。
    根本就不能选中一个字,你自能鼠标按下之后拖拉一下。这是CEdit的特点,没有办法。
      

  8.   

    我想了想,我的需求觉得用CListBox是不是更合适?但是CListBox怎样才能在一行中显示并且字之间没有间隙就跟CEdit一样?
      

  9.   

    你可以在OnLButtonDown中做处理啊,检查一下point的位置,然后取得当前字符的相对座标,需要给point加点料的就加一点就行了,不过这个工作只能自己做了。
      

  10.   

    第1个搞定了,第2个还有点困难,我不清楚我按方向键scroll文字的时候发生了些什么事,不知道能不能自己控制?
      

  11.   

    第二个功能当你设置了ES_AUTOHSCROLL之后,应该是本来就具有的功能吧,你试试先。
    如果要自己控制就比较麻烦了。不过你可以试试用SetSel来做,void SetSel( int nStartChar, int nEndChar, BOOL bNoScroll = FALSE );
    第三个参数表示是否要滚动,你不需要修改该值( FALSE表示要滚动 ).如果用ScrollWindow的话,可能会比较麻烦,自能自己去研究了。
      

  12.   

    楼上的找抽!用ScrollWindow好象碰到Invalidate()就无效了嘛?CEdit好象要保证光标在Edit Control里面?我想想是不是能用CEdit自己的卷屏那一套方法,SetSel应该是可以(还没试),但是Edit Control好象是10个字一卷,不知道能不能把它改成1字一卷?