不管是鼠标操作或者是键盘操作,选中一快地方或一些文字等等,它都能以反色显示,证明这些地方已经进行了重画功能。能准确的对选中部位进行反色重画,说明它必定有一组坐标可以标明它的范围,那么应该如何行到这组坐标信息?

解决方案 »

  1.   


    鼠标操作和键盘操作存在差异,而对文本的操作和对图形的操作也存在差异,下面分别进行说明:
        1、鼠标操作:
            鼠标按下的时候可以得到一个坐标信息,此信息为鼠标操作的起点坐标,通过处理 WM_LBUTTONDOWN 消息得到;
            鼠标释放的时候可以得到一个坐标信息,此信息为鼠标操作的止点坐标,通过处理 WM_LBUTTONUP 消息得到;
            鼠标操作的时候有一点需要注意,在处理 WM_LBUTTONDOWN 的时候需要 SetCapture,处理 WM_LBUTTONUP 的时候需要 ReleaseCapture。
        通过上面步骤可得到需要处理的范围,但其范围还需要判断是否有效:
        1.1 图形操作:
            对于图形操作而言,一般认为前面得到的矩形即实际操作范围,如非必要,则一般不需要修改。
        1.2 文本操作:
            对于文本操作而言,一般需要将前面得到的矩形转换为字符串数组索引值,通过起、止索引,即可得到选取的文本。
        2、键盘操作:
           键盘操作文本的时候要比操作图形容易,操作文本的时,在处理键盘消息的时候更改文本结构的行号和列号即可(行号和列号实际就是字符串数组索引);键盘操作图形的时候相对要麻烦得多,你需要事先指定一个起点坐标,并在处理键盘消息的时候进行修改(加或减去一个步进值),然后你得指定一个止点坐标,并在处理键盘消息的时候进行修改。
      

  2.   

    坐标信息肯定是有的,但是这些信息不同的程序有自己不同的处理,一般来讲都是处理为选中某些对象,比如文本,图象等,因为文本图象是离散的,所以这些选择范围并不一定和鼠标移动覆盖的范围一致,而取哪些作为对象,则不同的程序各有说法,你也可以编一个程序,将三个字符作为一个对象来选择,那就又有不同的选择范围了
    我以为,最通用的方法是将当前的图片抓下来,结合cdeee(亦难)所说的当前的鼠标信息进行分析,一般情况下还是能把选择的位置给搞出来的
      

  3.   

    其实我要做的是根据坐标信息提取窗口上的文字,一般的控件相对主窗口的坐标都是固定的,那就比较容易对付,但是,如果是List表或者是Grid表,用键盘操作的时候,选择的部分的坐标信息就不固定,所以,我的目的就是把这些不固定的坐标取出来,然后再通过这个坐标进行截取坐标所在位置的文字信息等等。
      

  4.   

    楼主,高人也。
    能帮我看看我的问题吗?
    http://community.csdn.net/Expert/topic/4120/4120104.xml?temp=.9552423
    CWnd 如何实现 BN_CLICKED (和CButton完全一样的)?
      

  5.   

    凡是能后响应键盘的输入焦点的,比如编辑框,他的类里面都有一个指针(有点抽象,不是c的指针),记录当前位置,如果你按住shift,他会纪录下这个位置(另一个变量指针了)。类会有一个处理函数来判断当前的元素哪些被这前后两个指针的范围给包括了,然后就可以反色显示。
    类似于cedit的比较简单,如果说像word一样的,就麻烦一点需要判断嵌入的对象以及自动化对象等。但是思想是一样的。