其实很早就想过这个问题,一直没有实现,后来学了C++ Builder,有这样的代码,
意思就是只能输入0-9和'-',',',和backspace,我倒是知道VC里edit可以选
数字,就是只能输入数字,但如果想完成上面说的这种情况,怎么做?
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
    if((Key>'9'||Key<'0')&&(Key!='-'&&Key!=','&&Key!='\b'))
    {
        Key = 0;
    }
}

解决方案 »

  1.   

    BOOL bRet = FALSE;
     switch(nChar)
     {
     case '0':
     case '1':
     case '2':
     case '3':
     case '4':
     case '5':
     case '6':
     case '7':
     case '8':
     case '9':
     case VK_BACK:
      bRet = TRUE;
      break;
      default:
      break;
     }
     if(bRet)
      CEdit::OnChar(nChar, nRepCnt, nFlags); 
      

  2.   

    我觉得捕捉edit的OnChange通知应该可以实现
      

  3.   

    你先新建一个类,当然是从CEidt类继承的,叫CMyEdit;   
      对你的dlg上的一个变量绑定生成CMyEdit   m_Edit   
      与你在程序中用m_Edit.SubClassWindow(IDC_EDIT);
    在CMyEdit的OnChar 中进行过滤。
      

  4.   

    用这样吗?我记得我没用过,是不是新版VS?PS:2楼的很容易理解……
      

  5.   

    可是我放置一个edit控件,ctrl+w它根本没有OnChar这个消息响应呀
      

  6.   

    我用CB中的方法解决了这个问题
    BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
    //{{AFX_MSG_MAP(CMyEdit)
    // NOTE - the ClassWizard will add and remove mapping macros here.
    //}}AFX_MSG_MAP
    ON_WM_CHAR(WM_CHAR, OnChar)END_MESSAGE_MAP()或者通用的BOOL CTestDlg::PreTranslateMessage(MSG* pMsg) 
    {
    if(WM_RBUTTONDOWN == pMsg->message)
    if(pMsg->hwnd == GetDlgItem(IDOK)->GetSafeHwnd())
    AfxMessageBox("右键点击Button1");
    return CDialog::PreTranslateMessage(pMsg);
    } 这种方法感谢jenf