我参考vckbase上的一个例子,实现了可编辑的ListCtrl
ListCtrl包括三个属性列 暂用list1、list2、list3
list1、list2上面各加载了combox1、combo2,list3上面加载了一个Edit
而且每一行中的list1和list2中的下拉框内容都不一样现在遇到的问题是,我用的那个例子的EDIT文本框的输入必须通过Enter键才能完成,而我一按Enter键ListCtrl就会把焦点移到了下一行的第一列上,这时就显示了combox1,而其中的下拉框还是第一行的下拉内容,而不是我所需要的第二行的下拉内容。
如果不按Enter键就不会出现这个问题,单击第二行第一列会显示我所要的结果。现在我就希望能够改进这个问题,最重要的还是单击Enter键后不会自动移到下一行,不知道各位仁兄有没有什么好办法,在线等,先谢了!

解决方案 »

  1.   

    在处理文本框的输入时,当按下enter键时,把焦点设到一个没有影响的地方去
      

  2.   

    从CEdit派生一个类, 比如CInPlaceEdit, 然后在这个类中重载PreTranslateMessage(), 在其中如果检测到WM_KEYDOWN消息, 并且是按下的键是VK_RETURN时, 直接返回TRUE, 表示你已经处理它了, 不让它继续被分发下去,对其它消息调用基类的PreTranslateMessage()就可以了.好像是这么弄的
      

  3.   

    BOOL CCalendar::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_ESCAPE|VK_RETURN)
    {
    return TRUE;
    }
    else
    return CDialog::PreTranslateMessage(pMsg);
    }
      

  4.   

    还是不行啊
    如果屏蔽回车消息 文本框的文本无法输入了
    我用的是别人封装的类 不是很清楚如何将文档框的文本输入方式改为不用Enter输入
    还请各位指教!
      

  5.   

    仔细看看他源程序里面的PreTranslateMessage(MSG* pMsg)函数, 或者自己善于应用PreTranslateMessage(MSG* pMsg) 消息,会很好解决你的问题。
      

  6.   

    再看看:
    void CYourProgramme::PreTranslateMessage(MSG* pMsg) 
    {
        if (WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST) 
        {
            if(pMsg->message==WM_KEYDOWN)
            {
                int iID = ::GetDlgCtrlID(hWnd);
                if(iID == IDC_YOURLISTID)
                {
                    if(pMsg->wParam==13)//回车
                    {
                        return;
                    }  
                }
            }
        }
    }
      

  7.   

    对哦,不改封装类估计是行不通的了
    现在只有首先屏蔽回车消息,其次将文本框的文本输入改为即输即入的方式,而不通过回车键响应!
    不过那个封装类不好改的哦!
    我参考的就是http://www.vckbase.com/code/listcode.asp?mclsid=3&sclsid=323中的“另一种实现可编辑的ListCtrl的方法”!