在CEDIT中,OnChar()处理字符的显示,但修改nChar是无效的,MFC对OnChar是这样定义的:
_AFXWIN_INLINE void CWnd::OnChar(UINT, UINT, UINT)
{ Default(); }
显然OnChar()根本未使用所传进来的参数。修改nChar绝不能产生任何效果。
可在OnChar()中用keybd_event()重新触发一个所需要的事件,然后在下一条WM_CHAR消息中处理该事件。
void CMyedit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
static BOOL flag=FALSE;
if(!flag)
{
keybd_event( 99,0,KEYEVENTF_EXTENDEDKEY | 0,0 );
flag=TRUE;
}
else
{
flag=FALSE;
CEdit::OnChar(nChar,nRepCnt,nFlags);
}
上面的代码可把所有的输入替换成3。
_AFXWIN_INLINE void CWnd::OnChar(UINT, UINT, UINT)
{ Default(); }
显然OnChar()根本未使用所传进来的参数。修改nChar绝不能产生任何效果。
可在OnChar()中用keybd_event()重新触发一个所需要的事件,然后在下一条WM_CHAR消息中处理该事件。
void CMyedit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
static BOOL flag=FALSE;
if(!flag)
{
keybd_event( 99,0,KEYEVENTF_EXTENDEDKEY | 0,0 );
flag=TRUE;
}
else
{
flag=FALSE;
CEdit::OnChar(nChar,nRepCnt,nFlags);
}
上面的代码可把所有的输入替换成3。
void CEditEx::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
nChar = '1';
DefWindowProc(WM_CHAR,nChar,MAKELPARAM(nRepCnt,nFlags));
}