代码:
void AddShortcuts::OnEnSetfocusEdittitle()
{
// TODO: Add your control notification handler code here
m_Edittitle.SetSel(0,-1);}
AddShortcuts为我派生的对话框类,OnEnSetfocusEdittitle()是我的编辑框的EN_SETFOCUS消息响应函数,m_Edittitle为关联编辑框的CEdit变量。为什么程序运行我点击编辑框文本没有被选中呢?

解决方案 »

  1.   

    用Tab键使编辑框获得焦点,会处于选中状态吧?
      

  2.   

    会啊 
    响应EN_CHANGE消息也不行啊 
      

  3.   

    m_Edittitle.SetFocus();
    m_Edittitle.SetSel(0,-1); 
      

  4.   

    BOOL CtestDlg::PreTranslateMessage(MSG* pMsg)
    {
    // TODO: Add your specialized code here and/or call the base class if(pMsg->message == WM_LBUTTONUP&& pMsg->hwnd == GetDlgItem(IDC_EDIT1)->m_hWnd)
    {
    ((CEdit *)GetDlgItem(IDC_EDIT1))->SetSel(0,-1);
    }
    return CDialogEx::PreTranslateMessage(pMsg);
    }
      

  5.   

     你点击编辑框文本时估计OnEnSetfocusEdittitle() 并没有执行,你设个端点调试看看啊。。
      

  6.   

    5楼正解,但需在setsel前面加上setfocus才能删除选中内容。查了很多资料才发现当鼠标点击编辑框时先响应EN_SETFOCUS 消息,紧接着就响应WM_LBUTTONDOWN消息,所以即使在EN_SETFOCUS消息中全选了文本但立即就被WM_LBUTTONDOWN消息覆盖了,所以看不到作用。除了5楼的方法外,还可以派生一个基于CEdit的新类,并重载类的WM_LBUTTONDOWN消息函数。还是在国外的网站上发现的。令我感到郁闷的是为什么国内很多网上都说响应EN_SETFOCUS 消息调用setsel函数就可以了,不知道这些人到底有没有试过呢,还是我哪里没有弄好啊?
      

  7.   

    5楼正解,但需在setsel前面加上setfocus才能删除选中内容。查了很多资料才发现当鼠标点击编辑框时先响应EN_SETFOCUS 消息,紧接着就响应WM_LBUTTONDOWN消息,所以即使在EN_SETFOCUS消息中全选了文本但立即就被WM_LBUTTONDOWN消息覆盖了,所以看不到作用。除了5楼的方法外,还可以派生一个基于CEdit的新类,并重载类的WM_LBUTTONDOWN消息函数。还是在国外的网站上发现的。令我感到郁闷的是为什么国内很多网上都说响应EN_SETFOCUS 消息调用setsel函数就可以了,不知道这些人到底有没有试过呢,还是我哪里没有弄好啊?
      

  8.   

    没有刷新吧!
    在后面加上
    UpdateData(FALSE);