BOOL CPeriodCheckDlg::PreTranslateMessage(MSG* pMsg)
{if (pMsg->message == WM_LBUTTONDOWN)     
{                  
          if (pMsg->hwnd == m_editTime.m_hWnd && GetFocus() != (CWnd*)&m_editTime)               
         {                             
                 static int nStart = 0, nEnd = 0;
                 CString time;
                m_editTime.GetWindowText(time);
                CString hour = time.Left(2);
                CString minute = time.Mid(3,2);
                CString second = time.Right(2);
                m_editTime.GetSel(nStart,nEnd);//为什么获取不了开始位置,一直是0!!!!!
                 m_editTime.SetFocus();             
                 m_editTime.SetSel(nStart, nStart+2);                 
                 return TRUE;                 
          }    
}
return CPAIBaseDialog::PreTranslateMessage(pMsg);
}

解决方案 »

  1.   

    从你的代码中看,貌似此时光标指针还没在Edit中生效啊。
      

  2.   

    ‘m_editTime.GetSel(nStart,nEnd);//为什么获取不了开始位置,一直是0!!!!!’
    你有没有select?没有的话都为0
      

  3.   

      m_editTime.SetFocus();m_editTime.GetSel(nStart,nEnd);//为什么获取不了开始位置,一直是0!!!!!
               
    先设置焦点,在获取    
      

  4.   

    你的功能应该是想在鼠标点击Edit的时候,选中光标处的两个字符,我觉得改到Up里面比较好,这样写:case WM_LBUTTONUP:
    if (pMsg->hwnd == m_editTime.m_hWnd /*&& GetFocus() != (CWnd*)&m_editTime*/)               
    {         
    int nStart = 0, nEnd = 0;
    CString time;
    m_editTime.GetWindowText(time);
    CString hour = time.Left(2);
    CString minute = time.Mid(3,2);
    CString second = time.Right(2);
    m_editTime.GetSel(nStart,nEnd);//为什么获取不了开始位置,一直是0!!!!!
    m_editTime.SetFocus();             
    m_editTime.SetSel(nStart, nStart+2); 
    // return TRUE;  
          }
    break;
      

  5.   

    GetSel 这玩样多行EDIT的情况下才有效的。楼主是多行么?
      

  6.   

    加上 'no hide selection'属性,可以看到当前的 selection
      

  7.   

    把'no hide selection设置为true ? 就行了?
      

  8.   

    加上 'no hide selection'属性,可以看到当前的 selection
    初始化时:
    m_editTime.SetWindowText("12:02:08");
    m_editTime.SetSel(0,1);
    可以看到'12'是兰色的
      

  9.   

    别用GetSel ,多行才有效,自己再多建立一个CString变量,直接SetWindowText,最方便。从源头解决楼主问题。
      

  10.   

    加上 'no hide selection'属性,可以看到当前的 selection
    初始化时:
    m_editTime.SetWindowText("12:02:08");
    m_editTime.SetSel(3,5);
    int s;
    int e;
    m_editTime.GetSel(s,e);
    afxDump << s << ";" << e << "\n";
    // 3;5
      

  11.   

    有DateTimeCtrl这么好的控件可用,干啥要用EDIT来模拟时分秒
      

  12.   

    大哥啊 你这么写GetSel的值是不是写死了吗?
    直接用俩常量代替不得了?何必setsel
      

  13.   

    m_editTime.SetWindowText("12:02:08");
    m_editTime.SetSel(3,5);
    int s;
    int e;
    m_editTime.GetSel(s,e);
    afxDump << s << ";" << e << "\n";
    // 3;5
    只是想说明2点。
    1.不必多行
    2.只有先SetSel才能 GetSel多种操作会改变selection,如鼠标点击。从而使GetSel错误
      

  14.   

    需要先SetFouc,否则没有焦点,调用的就是别的窗口