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回答。
| |
|
|
| |
|
|