在一个文本框中输入内容,回车后,在一个clistctrl中列出了相应的内容。
我想此时让clistctrl的第一行处于选中状态,移动键盘上下键选中的行上下移动。
我用这段代码选中后,需要点击两次向下的键选中的行才会移动,这是什么原因?
m_drug_list.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED);
m_drug_list.EnsureVisible(0,false);   
m_drug_list.SetFocus();

解决方案 »

  1.   

    m_drug_list.SetFocus();
    m_drug_list.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED); 
     
      

  2.   

    //重载对话框的 PreTranslateMessage。BOOL CMyDialog::PreTranslateMessage(MSG* pMsg) 

        if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) 
        { 
            switch (::GetDlgCtrlID(pMsg->hwnd)) 
            { 
            case IDC_EDIT1:  //文本框控件 ID 值。
                //在 clistctrl 中列出了相应的内容
                ...            //选中第一行。
                m_drug_list.SetFocus(); 
                m_drug_list.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED); 
                return TRUE; 
             } 
        }     return CDialog::PreTranslateMessage(pMsg); 

      

  3.   

    //设置项目获取焦点。m_drug_list.SetItemState(0,LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); 
      

  4.   

    //如果不行,再试试加上 LVIS_ACTIVATING 风格:m_drug_list.SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED | LVIS_ACTIVATING, LVIS_SELECTED | LVIS_FOCUSED | LVIS_ACTIVATING);