读书人

老师,小弟我用VS2005(C#)开发的WINFOR

发布时间: 2012-01-19 00:22:27 作者: rapoo

请教各位老师,我用VS2005(C#)开发的WINFORM程序出现的自动转换成全角的问题
请教各位老师,我用VS2005(C#)开发的WINFORM程序出现的自动转换成全角的问题
==================================================================
具体表现为:
我的程序一运行进入窗体的输入框,就变为全角了.用户手工将输入法转换为半角后,但是一改变我的TABPAGE页,又变为全角了,用户又需要手工改为半角.
现希望的理想状态是:程序在任何输入内容的时候都不要变为全角,如何做呢?

用户一直抱怨,要求我解决,真的很苦恼!

[解决办法]
如下代码是将输入法设置为半角

C# code
using System.Runtime.InteropServices;[DllImport("imm32.dll")]public static extern IntPtr ImmGetContext(IntPtr hWnd);[DllImport("imm32.dll")]public static extern bool ImmGetOpenStatus(IntPtr hIMC);[DllImport("imm32.dll")]public static extern bool ImmGetConversionStatus(IntPtr hIMC,     ref int conversion, ref int sentence);[DllImport("imm32.dll")]public static extern bool ImmReleaseContext(IntPtr hWnd, IntPtr hIMC);[DllImport("imm32.dll")]public static extern bool ImmSetConversionStatus(IntPtr hIMC,     int conversion, int sentence);const int IME_CMODE_FULLSHAPE = 0x0008;public static void SetHalfShape(IntPtr AHandle){    IntPtr vIme = ImmGetContext(AHandle);    if (ImmGetOpenStatus(vIme)) // 输入法是打开的      {        int vMode = 0, vSentence = 0;        if (ImmGetConversionStatus(vIme, ref vMode, ref vSentence)) // 获取输入法状态        {            if ((vMode & IME_CMODE_FULLSHAPE) > 0) // 是全角              {                vMode &= (~IME_CMODE_FULLSHAPE);                ImmSetConversionStatus(vIme, vMode, vSentence);            }        }    }    ImmReleaseContext(AHandle, vIme);}private void textBox1_Enter(object sender, EventArgs e) // 设置焦点的时候{    SetHalfShape(((TextBox)sender).Handle);}
[解决办法]
安装.NET 2.0的一个补丁
[解决办法]
你可以把一楼的方法做成一个控件,在父窗体上添加这个控件,在子窗体上作一下设置就可以了.

读书人网 >C#

热点推荐