问题1:VC中直接响应WM_CHAR消息就可以了
.net中
protected virtual void OnKeyDown(KeyEventArgs e);
protected virtual void OnKeyPress(KeyPressEventArgs e);
protected virtual void OnKeyUp(KeyEventArgs e);
就是没有OnChar???崩溃.....net中有OnChar类似的东西吗???
问题2用vc创建一个HelloWord的工程,然后可以在上面直接输入中文(虽然不会显示,但其实收到了WM_CHAR消息)
用.net创建一个Form工程,根本就不能把输入法调出来输入(我是指那个Form,不是指TextBox控件),行为和MFC的对话框有点像请问,怎么在Form上能调出输出法,并且可以输入(没有回显没有关系)关键是要有中文输入那个输入法的条出来呀

解决方案 »

  1.   

    我发现.net默认创建出来的Form是有WM_CHAR消息的,我用spy++看到了,但不能输入中文,就算你切换到中文的状态,也不会出来中文,WM_CHAR还是显示的英文字母
      

  2.   

    重写WndProc方法:
    const int WM_SETFOCUS = 7;
    const int WM_INPUTLANGCHANGEREQUEST = 0x50;
    const int WM_INPUTLANGCHANGE = 0x51;
    const int WM_CHAR = 0x102;protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case WM_CHAR:
                MessageBox.Show("WM_CHAR");
                break;
            case WM_SETFOCUS:
            case WM_INPUTLANGCHANGEREQUEST:
            case WM_INPUTLANGCHANGE:
                DefWndProc(ref m);
                break;
            default:
                base.WndProc(ref m);
                break;
        }
    }
      

  3.   

    问题2是核心,,如果是一个Control就可以调出输入法来,输入中文,Form就是不行,好像输入法根本就不知道你要输入一样
      

  4.   


    如果是在windows mobile上呢?该怎么实现?