在edit控件中只允许输入数字和英文状态下逗号,允许快捷键ctrl+x,ctrl+c,ctrl+v,现在我重载了onchar()方法,放行数字,英文逗号,和退格键,不知道如何添加快捷键ctrl+x,ctrl+c,ctrl+v,希望高手帮忙!先谢过!

解决方案 »

  1.   

    ctrl+x,ctrl+c,ctrl+v是edit控件自动支持的,你试试
      

  2.   

    在OnChar重载函数中放行CTRL_C,CTRL_V,CTRL_X虚拟键void CXX::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
      if ((m_strValidChars.IsEmpty()) || ((-1 != m_strValidChars.Find(static_cast<TCHAR> (nChar))) || 
    (nChar == VK_BACK) || (nChar == CTRL_C) || (nChar == CTRL_V) || (nChar == CTRL_X)))
    CEdit::OnChar(nChar, nRepCnt, nFlags);}
      

  3.   

    4楼的高手,你的方法我试了,不好用啊,没有CTRL_C和其他几个,是不是给宏定义了啊??宏定义的内容是什么?我vk_back是取的值,不知道ctrl+c和其他几个能不能也进行取值运算,要是取值的话是ctrl+c的和值还是什么呢??
      

  4.   

    重载PreTranslateMessage()函数
    BOOL   CMyCtrl::PreTranslateMessage(MSG*   pMsg)   
      {   
            if   (pMsg->message   ==   WM_KEYDOWN)   
            {   
                  switch   (pMsg->wParam)   
                  {   
                      case   VK_CTROL:   
                      {     
                        //   用   GetKeyState   来查看按键是否按下,如果按下,再判断C/V/X是否按下
                            if((GetKeyState(VK_C)<0))   
                            {//处理  
                                } 
                               else if((GetKeyState(VK_V)<0))   
                            {//处理  
                                } 
                            else if((GetKeyState(VK_X)<0))   
                            {//处理  
                                } 
      }                           
                      break;   
      
                      default:   
                }   
            return   CMyCtrl::PreTranslateMessage(pMsg);   
      }LZ看看这样行不行
      

  5.   

    重载WM_CLEAR(delete键), WM_COPY(ctrl+c), WM_CUT(ctrl+x),WM_PASTE(ctrl+v)
     的消息处理
      

  6.   

    我这样处理void CYEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    // TODO: Add your message handler code here and/or call default
    /*8-backspace  3-ctrl+c  22-ctrl+v  24-ctrl+x  26-ctrl+z*/
    if (nChar != 8 && nChar != 3 && nChar != 22 && nChar != 24 && nChar != 26)
    {
    if(nChar < 48|| nChar > 57)
                         return;
    }
    CEdit::OnChar(nChar, nRepCnt, nFlags);
    }