m_searchCombo.GetWindowText(strWinText);
// ::SetFocus(m_searchCombo.m_hWnd);
why setfocus method doesn't work?
在该控件上输入时,鼠标好像被隐藏了,如何让鼠标光标显示出来?

解决方案 »

  1.   

    TO cnzdgs :
    在编辑器里(textbox、combobox甚至是word)输入时,鼠标就会隐藏!
    是WINDOWS系统的一个特点!
    在ShowDropDown()之后鼠标就不会见了
    之前没操作过鼠标,请问该问题如何解决?
      

  2.   

    既然是WINDOWS的特点那他就有内部机制隐藏光标
    那要看他内部是在哪个地方隐藏的,重载都不一定好使怎么解决?晃下鼠标光标就出来了
      

  3.   

    插字符caret, 光标cursor, 鼠标mouse
    先弄清楚这几个概念 .
      

  4.   

    to 夏至矽
    响应ON_CBN_SELCHANGE消息的函数里面我是做了这样一些事情1:根据用户输入内容(此内容为模糊内容)查找相关选项
    比如用户输入"b"下拉框里面可能出现"不能","不可以","不够"等词条
    2:输入完成后想调用ShowDropDown()显示上述词条
    3:当用户选择某一词条,比如选中"不够"时,定位到另一个树控件的相关Item上面去
    问题出在2之后
    即输入完成后无法找到鼠标光标,此时也能选中,但无法找到鼠标的光标,造成假死现象
    如果不调用ShowDropDown(),用户手动点下拉框出现的那个箭头则没此问题
    但不够人性化.
    这是我的问题,麻烦解答.
      

  5.   

    http://www.codeproject.com/KB/combobox/akautocomplete.aspx
    http://www.codeproject.com/KB/combobox/combocompletion.aspx
    http://www.codeproject.com/KB/combobox/automultcolcombobox.aspx这都是auto complete combobox的例子
      

  6.   

    TO 满天星
    ShowCursor显示鼠标方法不可用
    不起作用,谢谢解答.
    我再找找
    本想在显示下拉框之前用keybd_event(VK_ESCAPE,0x45,KEYEVENTF_EXTENDEDKEY | 0,0 );发送一个模拟ESC的消息
    再ShowDropDown
    结果发现行不通,在输入后不显示下拉框内容了...
    thank you all the same
      

  7.   

    ShowCursor怎么会不起作用?
    另外,如果你在响应CBN_SELCHANGE时要执行很长时间,应该另创建一个线程来处理,避免阻塞主窗口的消息循环。
      

  8.   

    TO 满天星:
    开线程我不会
    以下是响应CBN_SELCHANGE消息的函数,麻烦您指导一下.OnCbnEditchangeSearchcombo()
    {
    // TODO: 在此添加控件通知处理程序代码
    int nSize = m_searchCombo.GetCount();
    for (int n = nSize;n >0;n--)
    m_searchCombo.DeleteString(n-1);
    CString strWinText;
    m_searchCombo.GetWindowText(strWinText);

    int nCount = strWinText.GetLength();
    if(nCount < 1)
    return;
    vector<CString> strAddVec;
    //判断首字符是否是汉字
    //char chFirst = strWinText.GetAt(0);
    wchar_t * chPtr = strWinText.GetBuffer(0);
    int nRes = isascii(* chPtr); // 0代表汉字,1代表英文字符
    //free(chPtr);
    if(nRes == 0)//如果是汉字
    FintItemByChinese(strWinText,strAddVec);
    else      //如果是英文字符
    FintItemByEnglish(strWinText,strAddVec);
    for (int k = 0;k < strAddVec.size();k++) 
    m_searchCombo.AddString(strAddVec[k]);
    // keybd_event(VK_ESCAPE,0x45,KEYEVENTF_EXTENDEDKEY | 0,0 ); m_searchCombo.ShowDropDown();
            ShowCursor();
    // PostMessage(CB_SETCURSEL,0, 0);
     } 
      

  9.   

    问题已解决
    谢谢各位ShowDropDown();之后SetCursor(LoadCursor(NULL, IDC_ARROW));即可