关于重写WndProc 代码为0x000F微软输入法无法输入中文
笔者编写了ExRichTextBob扩展重写protected override void WndProc(ref Message m)发现、要求一个窗口重画自己时微软输入法无法输入中文而搜狗输入法却没有问题,其它输入法没有验证特此记录以下为笔者代码片段 下面展示一些 内联代码片。
/******************************************************************************* * 重要事项 * 关于输入法 * 1、在重写WndProc 消息代码WM_PAINT要求一个窗口重画自己事件中微软五笔无法输入中文 * 如果不重写会造成ExRichTextBox无法更新,会造成图片与文字重叠现象的发生。 * 2、如果使用搜狗输入法就没有上述现象 * 3、目前发现微软输入法无法输入中文与《重写WndProc 消息代码WM_PAINT》有关 * * ***/ protected override void WndProc(ref Message m) { switch (m.Msg) { //要求一个窗口重画自己 case WM_PAINT: { foreach (Control _SubControl in base.Controls) { _SubControl.Tag = "1"; } GetRichTextObjRectangle(); for (int i = 0; i != base.Controls.Count; i++) { if (base.Controls[i].Tag.ToString() == "1") { base.Controls.RemoveAt(i); i--; } } break; } //获取焦点 case WM_SETFOCUS: { //this.ImeMode = System.Windows.Forms.ImeMode.KatakanaHalf; break; } default: break; } base.WndProc(ref m); }
为了让微软输入法能够输入中文笔者花费了两天时间各种方法用尽也没有解决,目前知道的是重写,要求一个窗口重画自己是一个死循环,可能是这一循环有关,如果使用获取焦点WM_SETFOCUS 微软输入法可以正常使用,但窗体不能重画,一但重画输入法又不能使用 这是什么原因? 下面展示一些 内联代码片。
//获得焦点后 // private const int WM_SETFOCUS = 0x0007;