就是ComboBox中的CEdit里(为m_strComboBox),当我输入123456789,然后我选中234567,
然后不是通过键盘进行输入,而是通过一个CButton的OnClickButton1()把234567替换成"你好" 最后在ComboBox中的CEdit框里应该是"1你好89"...
我现在这个就是写不出来呀。。不知道怎么解决。谢谢OnClickButton1()
{  
  UPDATE(TRUE);
  strcat(m_strComboBox,"你好");
  UPDATE(FALSE); 
}
输入:123456789你好
但现在就是如果我在ComboBox中的CEdit的输入框里,如果把选中的蓝色的数字以"你好"
替换,最后显示为"1你好89"..我就做不出来。

解决方案 »

  1.   

    CString str;
    m_strComboBox.GetWindowText(str);
    DWORD dwSel = m_strComboBox.GetEditSel();
    int is = LOWORD(dwSel);
    int ie = HIWORD(dwSel);str = str.Left(is) + _T("你好") + str.Mid(ie);
    m_strComboBox.SetWindowText(str);
    m_strComboBox.SetEditSel(is, ie);
      

  2.   

    ReplaceSel()这个怎么用呢。??能说有详细点吗。?krh2001(边城浪子) 的我试了一下,结果发现,他后来是变成了由原来的123456789 变成了
    "你好123456789“而不是我想要的"1你好89"
    请大家在帮我看看。谢谢
      

  3.   

    OnClickButton1()
    {
    CString str;
    m_strComboBox.GetWindowText(str);
    DWORD dwSel = m_strComboBox.GetEditSel();
    int is = LOWORD(dwSel);
    int ie = HIWORD(dwSel);str = str.Left(is) + _T("你好") + str.Mid(ie);
    m_strComboBox.SetWindowText(str);
    m_strComboBox.SetEditSel(is, ie);
    }
    用了krh2001(边城浪子) 的这个发现结果为     你好123456789 
    我见控看了一下,,发现is = 0    ie  =  0
    原来的ComboBox中的CEdit框为123456789 其中我已经选中了234567  
    然后在按了CButton 想让123456789 变成 1你好89  
    请教应该是怎么做??  谢谢呀.
      

  4.   

    如果选中了的话,不会出现is = 0    ie  =  0的情况
    这个函数不会有问题!
      

  5.   

    好像在EditUpdate消息时,is 和  ie 是不都为0 的,
    但是好象在CButton按下的时候,就会出现0的..你也可以试试看的..
    我现在就是解决不了??
      

  6.   

    可以这样解决,继承一个cbutton类CMyButton,截取LButtonDown消息,然后在里面处理这个替换工作!
    我试过了,在LButtonDown中可以得到选中字符的位置
        
    class CMyButton: public CButton
    {
      //...
      //int m_iLMBtnDown;//init with 0
      //...
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    }//...
    ON_WM_LBUTTONDOWN()
    //...void CMyButton::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    HWND hwnd = GetParent()->GetSafeHwnd();
    m_iLMBtnDown = 1;
    GetParent()->SendMessage(WM_COMMAND, MAKELPARAM(GetDlgCtrlID(),BN_CLICKED),(LPARAM)GetSafeHwnd());
    m_iLMBtnDown= 0;
    CButton::OnLButtonDown(nFlags, point);
    }
    然后绑定按纽对象,IDC_BUTTON1 ------- CMyButton m_btn1;
    单击事件:
    OnClickButton1()
    {
     if(m_btn1.m_iLMBtnDown == 1) {
        CString str;
        m_strComboBox.GetWindowText(str);
        DWORD dwSel = m_strComboBox.GetEditSel();
        int is = LOWORD(dwSel);
        int ie = HIWORD(dwSel);    str = str.Left(is) + _T("你好") + str.Mid(ie);
        m_strComboBox.SetWindowText(str);
        m_strComboBox.SetEditSel(is, ie);
       }
    }
      

  7.   

    谢谢 handwolf(青松崖).你的这种方法已经通过了. 
    但是我现在又有二个问题,就是我本来的那个不是CButton而是CBitMapButton.
    1...
    当我CMyButton去继承CBitMapButton时,就出现了二个错误Error...
    virtual __ThisCall CButton......
    __ThisCall CButton..........
    2.
    并且我如果想让ComboBox的长度进行限制,当超过15个时,不能进行输入.
    ComboBox.LimitText(15).只适合键盘输入,如果是CBitMapButton进行添加时,怎么样对长度进行限定.??
    谢谢......
    以第一个问题为主...
      

  8.   

    m_edit.SetFocus();
    m_edit.ReplaceSel("你好");
      

  9.   

    问题1:
      CBitmapButton在我这里不会有问题,你可以把对应的CButton改成CBitmapButton
      

  10.   

    问题2:
    看到添加的代码了没?-->

    str = str.Left(is) + _T("你好") + str.Mid(ie);
    m_strComboBox.SetWindowText(str);
    "那么你可以在SetWindowText之前判断str 的长度( 方法str.GetLength() <= 15 )
    如果大于15,那么就不进行SetWindowText