比如编辑框中有文本  abcdefG123 ,当用鼠标单击 G1 之间是,输入焦点就定位在 G1 之间现在的问题是,此时我要得到输入焦点的位置,即相对于整个文本头部的偏移位置
 
谢谢!

解决方案 »

  1.   

    函数功能:该函数将插入标记的位置(按客户区坐标)信息拷贝到指定的POINT结构中。  
    函数原型:BOOL GetCaretPos(LPP0lNT IpPoint); 
      

  2.   

    这也只是得到位置的POINT结构呀
      

  3.   

    CEdit::GetSel()函数你会获得2个位置,开始位置,结束位置。。如果没有选择的文本,那就是开始位置==结束位置==插入位置。
      

  4.   


    这个我已经试过了,测试的时候CEdit编辑框中有内容,在处理CEdit的ON_EN_SETFOCUS消息中调用
    GetSel(int &pos1,int &pos2),结果pos1和pos1始终都是0呀!!
      

  5.   

    那是因为全选了,不要在ON_EN_SETFOCUS中调用。或者,当发生鼠标或者键盘消息时,用一个变量记下当前的位置,懂了吧。。这样就能在ON_EN_SETFOCUS中获得当前的位置了
      

  6.   


    就是这个函数,之所以你得到的结果都是0,是由于你在ON_EN_SETFOCUS消息中处理的。当接受到ON_EN_SETFOCUS消息时,只是说哪个空间获得了焦点,并不 意味着输入光标已经确定在编辑框中的某个位置了。
    你可以尝试在WM_LBUTTONUP消息中处理:
    1、在你的.h文件中添加BOOL PreTranslateMessage(MSG *pMsg);
    2、在.cpp中:BOOL CDlgXXXX::PreTranslateMessage(MSG *pMsg)
    {
    if(pMsg->message == WM_LBUTTONUP)
    {
    if(pMsg->hwnd == Your_EditCtrl.m_hWnd) //编辑框
    {
    int lStartPos=-1,lEndPos=-1;
    Your_EditCtrl.GetSel(lStartPos,lEndPos);
    if(lStartPos == lEndPos) //表示设置鼠标输入焦点
    {
    Your_lCurSorPos = lStartPos;
    }
    }
            }
    }
    试试吧