我在Tree控件的SelChanged消息中加了如下代码: HTREEITEM hItem = pNMTreeView->itemNew.hItem;

if ( hItem != NULL )
{
CString S = m_tvsRuleList.GetItemText( hItem ); if ( S == _T( "名称" ) )
{
m_edtName.SetReadOnly( FALSE );
m_edtName.SetFocus();
}
}经测试,m_edtName的SetFocus方法返回正常,但m_edtName中却无法显示闪烁的光标,也无法直接在m_edtName中输入文本,这个问题该怎么弄呢?我的目的就是想点击Tree控件中的一个指定节点,然后让Edit控件获取焦点,从而可以直接在Edit控件中输入文本。

解决方案 »

  1.   

    使用SetCaretPos()函数设置键盘光标的位置到Edit控件上
      

  2.   

    CRect rect;
    m_edtName.GetWindowRect( &rect );
    ::SetCaretPos( rect.left + 1, rect.top + 1 );
    m_edtName.ShowCaret();不管用呀
      

  3.   

    使用CreateCaret(m_edtName.m_hWnd,NULL,1,16);
    然后m_edtName.ShowCaret();
      

  4.   

    m_edtName.SetReadOnly( FALSE );
    m_edtName.SetFocus();CreateSolidCaret (1, 16);

    CRect rect;
    m_edtName.GetClientRect( &rect );
    ::SetCaretPos( rect.left, rect.top );m_edtName.ShowCaret();还是不行
      

  5.   

    如果焦点在edit上,应该是会显示光标的,你做了其他的处理了吧
      

  6.   

    GetFocus()看看返回的值是不是和edit相等
      

  7.   

    CreateCaret(m_edtName.m_hWnd,NULL,1,16); 
    m_edtName.ShowCaret();
    m_edtName.SetFocus();
    这样就行啦,不使用SetCaretPos()函数了
    我试了下能显示键盘光标,焦点也在Edit上,但是不能输入值。
    先去上课了,来了再整吧/
      

  8.   


    我是没作其它处理,我到觉得我把代码放在Tree控件的Selchanged消息中有些不妥,在调用了Edit的SetFocus方法后,根本就没有执行Tree控件的KillFocus消息。