而且只能输入一个特定的字符.

解决方案 »

  1.   

    你是不是想象密码输入框那样,输入时只显示“******”或“######”这样。
    要实现这样的功能,只要在资源编辑器中打开编辑框的属性,在“styles”中将“Password”选项打勾,缺省输入口令时编辑框显示的字符为“*”,但可以使用void SetPasswordChar( TCHAR ch );这个函数修改显示的字符符号。
      

  2.   

    不是要密码输入那样, 我是说只能允许输入特定的一些字符,不是输出,然后输出随着
    输入的不同也输出不一样的 东西.
    比如,按'A'  ---->  '甲'
         按'B'  ---->  '乙'
    等等.
    但是只能输入一个字符.
      

  3.   

    输入大写字母A显示小写字母bBOOL CSize1Dlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if( WM_KEYDOWN == pMsg->message )
    {
    CWnd *pWnd = GetFocus();
    if( IDC_EDIT1 == pWnd->GetDlgCtrlID() )
    {
    HWND h = pWnd->GetSafeHwnd();
    if( 'A' == pMsg->wParam && GetKeyState( VK_SHIFT ) < 0 )//大写的字符A
    {
    ::SendMessage( h, WM_KEYDOWN, 'B', 0x1f0001 );
    ::SendMessage( h, WM_CHAR, 'b', 0x1f0001 );
    ::SendMessage( h, WM_KEYUP, 'B', 0xc01f0001 );
    return TRUE;
    }
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
      

  4.   

    如果WM_KEYDOWM目标窗口是Control消息流向如下:下面所说的“处理了”的意思是返回true.
        CWinThread::PUMPMESSAGE()从消息队列中取得WM_KEYDOWM
                           ↓
         CWinThread::PreTranslateMessage处理--->使用WalkPreTranslateTree让从该控件遍列其父窗口直到主                                            窗口,让他们依次处理,如果其中一个处理了则结束循环。
                                       其实是分别调用他们的PreTranslateMessage
                           ↓未处理
                   ::TranslateMessage-->产生WM_CHAR消息放入消息队列(不考虑其他情况)
                           ↓
                   ::DispathMessage  -->让该控件窗口消息函数WindowProc处理,遍列消息表找到WM_KEYDOWN的消息影射函数OnKeyDown在其中处理
                                                  ↓ 未处理
                                        到该控件的DefWindowProc中作最后的处理,如记录按键的次数以供后                                    面处理。
                           ↓
                    该消息处理结束,再取的下一个消息WM_CHAR
                           ↓
          CWinThread::PreTranslateMessage处理-->和上面处理WM_KEYDOWM一样 
               
       可以在CAppDlg::PreTranslateMessage()、CDebugEdit::PreTranslateMessage()、CDebugEdit::WindowProc()、CDebugEdit::OnChar()、CDebugEdit::DefWindowProc()处理输入字符,但后面的必须保证前面消息流正常运行,正确处理之后保证返回true
      

  5.   

    我不清楚你所说的输出一个汉字是什么意思,是按下A就出现“啊”,还是按下AB才出现“啊”,只按下一个容易。BOOL CSize1Dlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if( WM_KEYDOWN == pMsg->message )
    {
    CWnd *pWnd = GetFocus();
    if( IDC_EDIT1 == pWnd->GetDlgCtrlID() )
    {
    //HWND h = pWnd->GetSafeHwnd();
    if( 'A' == pMsg->wParam && GetKeyState( VK_SHIFT ) < 0 )//大写的字符A
    {
    //::SendMessage( h, WM_KEYDOWN, 'B', 0x1f0001 );
    //::SendMessage( h, WM_CHAR, 'b', 0x1f0001 );
    //::SendMessage( h, WM_KEYUP, 'B', 0xc01f0001 );
    ( ( CEdit * )pWnd )->ReplaceSel( "多少个都行" );
    return TRUE;
    }
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }