我的窗口上有个CEdit控件,我想让它获得焦点的时候控件里自动是全部选中状态我在这个控件OnSetfocusg事件中执行SetSel(0, -1)为什么没有反应呢?

解决方案 »

  1.   

    其实本身已经是全部选中状态了,
    你所疑惑的只是选中了为什么不在选中的文本后着上蓝色的背景;你可以messagebox出来看看,是不是显示的是你setsel部分的内容
      

  2.   

    我想做的就是像WINDOWS的查找框那样,鼠标点一下还是全部选中状态跟UpdateData()无关吧?
      

  3.   

    你先将控件SetFocus(),然后在调用SetSel(),试试看
      

  4.   

    你的方法不会有问题,我测试了一下,应该是其他的方面造成的没有效果:BEGIN_MESSAGE_MAP(CCCCDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    ON_EN_SETFOCUS(IDC_EDIT1, OnEnSetfocusEdit1)
    END_MESSAGE_MAP()void CCCCDlg::OnEnSetfocusEdit1()
    {
    m_Edit.SetSel(0, -1); //这样是没有问题的,会选中所有的内容
    }
      

  5.   


    UpdateData()会改变光标状态 所以 要选择的话因在此之后 另外也像上面所说 你的方法是没有问题的 一定是其它地方错误你乎视了.
      

  6.   

    重载窗口类的PreTranslateMessage函数,加上下列代码(m_Edit是控件变量):
    if (pMsg->message == WM_LBUTTONDOWN)
    {
    if (pMsg->hwnd == m_Edit.m_hWnd && GetFocus() != (CWnd*)&m_Edit)
    {
    m_Edit.SetFocus();
    return TRUE;
    }
    }
      

  7.   


    如果我用TAB键把焦点切换到控件. 这个代码还有用? 楼主同志
      

  8.   

    如果用TAB键把焦点切换到EDIT控件上,这段代码确实没用。不过用键盘切换焦点到EDIT控件上时,EDIT控件会自动把文字全部选中,不需要另外处理。LZ实际上要处理的只是鼠标点击切换。