热情软件屋

 

Edit控件如何判断按键输入


编号:QA000835
建立日期: 1999年4月21日 最后修改日期:1999年4月21日
所属类别:

casey:
    Vc60
    win98
    对于用APPWIZARD生成的一个基于DIALOG的EDIT栏位,如何实现对于其判断只让个别字母输入,即如何抓WM_KEYDOWN MESSAGE?因APPWIZARD EDIT 中无此消息。

回答:

    用EN_CHANGE即可,请看一下代码(该代码检测是否'A',如果输入'A',就发出声音并删除'A'):
    void CTest3Dlg::OnChangeEdit1()
    {
     //EN_CHANGE
     // TODO: Add your control notification handler code here
     TCHAR strText[255];
     CString strTemp;
     int pos;
     CWnd * pWnd=GetDlgItem(IDC_EDIT1);
     ::SendMessage(pWnd->m_hWnd,WM_GETTEXT,(WPARAM)255,(LPARAM)strText);
     strTemp=strText;
     pos=strTemp.Find('A');
     if(pos!=-1){
     // add your code to alert
     ::MessageBeep(0);
     ::SendMessage(pWnd->m_hWnd,EM_SETSEL,pos,pos+1);
     ::SendMessage(pWnd->m_hWnd,WM_CLEAR,0,0L);
     }
    }
    第二种办法:
    FARPROC oldEditProc=GetWindowLong(hEdit, WNDPROC);
    SetWindowLong(hEdit, newEditProc);
    HRESULT CALLBACK newEditProc(hWnd, msg, wParam, lParam)
    {
    if(msg ==WM_KEYDOWN)
    
    SendMessage(GetParent(hWnd), msg, wParam, lParam);
    return CallWndProc(oldEditProc, msg, wParam, lParam);
    }
    第三种方法:
    1.创建一个从CEdit派生的类CMyEdit,在CMyEdit的WM_CHAR处理程序中加入判断,如下面的代码禁止输入'A'。
    2.在CMyDialog中给EDIT控件添加一个变量,其类型是CMyEdit.
    
    void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
    {
     // TODO: Add your message handler code here and/or call default
     if(nChar!='A')
     CEdit::OnChar(nChar, nRepCnt, nFlags);
    }

此问题由Leo Liu回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio