WEB开发网
开发学院软件开发C语言 C#下实现空白窗体上中文输入,可以实现类PS的文字工... 阅读

C#下实现空白窗体上中文输入,可以实现类PS的文字工具

 2010-09-30 20:56:50 来源:WEB开发网   
核心提示:在空白窗体上打开输入法,在C#里的空白窗口是无论如何也是打不开输入法.设置了this.ImeMode=ImeMode.NoControl也是无法打开输入法的录字窗口.去Microsoft开发论坛上问了一些问题.感谢周雪峰版主与Riquel_Dong版主给的指点.用了API函数:ImmAssociateContext(I

在空白窗体上打开输入法,在C#里的空白窗口是无论如何也是打不开输入法.设置了this.ImeMode= ImeMode.NoControl也是无法打开输入法的录字窗口.去Microsoft 开发论坛上问了一些问题.感谢周雪峰版主与Riquel_Dong 版主给的指点.用了API函数: ImmAssociateContext(IntPtr hWnd, IntPtr hIMC);终于把输入法给调了出来,它的功能是把输入与指定的窗口进行关联.

代码如下:

f (m.Msg == WM_IME_SETCONTEXT && m.WParam.ToInt32() == 1)
{
ImmAssociateContext(this.Handle, m_hImc);
}

现在可以调用输入法了.可是又出现了新的问题.怎么样取得输入法录字窗体上的字呢.

当打开输入法输入文字时,会发送WM_IME_CHAR的消息.我们在这个消息下处理下就可以得到汉字了

可以用IMM的函数: ImmGetCompositionString(IntPtr hIMC, int dwIndex, StringBuilder  lpBuf, int dwBufLen);取得录字窗体上输入的汉字或者NUICODE类的字.当然,这里就不研究别的了.只说汉字问题.

取字的代码如下:

case WM_IME_CHAR:

                        int size = ImmGetCompositionString(m_hImc, GCS_COMPSTR, null, 0);
                        size += sizeof(Char);
                        ImmGetCompositionString(m_hImc, GCS_RESULTSTR, str, size);
                        sb.Append(str.ToString());
                        MessageBox.Show(str.ToString());
                        intoText();//打印文字
                        isShowChina = true;
                 
                  
                    break;

1 2  下一页

Tags:实现 空白 窗体

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接