在.net cf(C#)中捕获输入法面板(InputPanel&SIP)高度改变事件
2010-06-18 10:29
435 查看
在进行Windows Mobile编程的时候,经常需要将Form上控件的Location随输入法面板的高度改变而调整,以免被面板遮盖。
但是.Net CF的InputPanel控件只给我们提供了EnabledChanged(即输入法打开/关闭)事件,这就意味着在Enabled属性没有发生变化的情况下进行输入法切换,我们便无法及时获取新的面板高度以做出相应处理。
有过Win32 sdk编程经验的朋友都知道,用户对应用程序产生的动作是首先以消息的形式传递给操作系统,操作系统根据消息中的窗口句柄(hWnd)回调该窗口的的消息响应函数而得到应用程序的反馈的。既然.Net CF没有对此消息进行封装,那么我们只好自己手动处理消息了。
在Windows环境下我们可以通过重写System.Windows.Forms.Form类的WndProc()函数来实现对该窗体消息的控制。但CE环境下,WndProc()函数被挪到了Microsoft.WindowsCE.Forms.MessageWindow类,我们可以继承此类并在WndProc()函数中处理0x001A(WM_WININICHANGE或WM_SETTINGCHANGE)消息来实现输入法改变事件。
下面是我实现的一个InputPanel扩展类,增加了InputMethodChanged事件。
但是.Net CF的InputPanel控件只给我们提供了EnabledChanged(即输入法打开/关闭)事件,这就意味着在Enabled属性没有发生变化的情况下进行输入法切换,我们便无法及时获取新的面板高度以做出相应处理。
有过Win32 sdk编程经验的朋友都知道,用户对应用程序产生的动作是首先以消息的形式传递给操作系统,操作系统根据消息中的窗口句柄(hWnd)回调该窗口的的消息响应函数而得到应用程序的反馈的。既然.Net CF没有对此消息进行封装,那么我们只好自己手动处理消息了。
在Windows环境下我们可以通过重写System.Windows.Forms.Form类的WndProc()函数来实现对该窗体消息的控制。但CE环境下,WndProc()函数被挪到了Microsoft.WindowsCE.Forms.MessageWindow类,我们可以继承此类并在WndProc()函数中处理0x001A(WM_WININICHANGE或WM_SETTINGCHANGE)消息来实现输入法改变事件。
下面是我实现的一个InputPanel扩展类,增加了InputMethodChanged事件。
using System; using Microsoft.WindowsCE.Forms; public class InputPanelEx : InputPanel { #region Fields /// <summary> /// 当输入法切换时发生。 /// </summary> public event EventHandler InputMethodChanged; private MsgHook Msg; internal class MsgHook : MessageWindow { #region Fields private const int WM_SETTINGCHANGE = 0x001A; private InputPanelEx BaseObject; #endregion #region Methods public MsgHook(InputPanelEx baseObj) { BaseObject = baseObj; } protected override void WndProc(ref Message m) { if (m.Msg == WM_SETTINGCHANGE) BaseObject.InputMethodChanged(this, EventArgs.Empty); base.WndProc(ref m); } #endregion } #endregion #region Method public InputPanelEx() { Msg = new MsgHook(this); } #endregion }
相关文章推荐
- 在.net cf(C#)中捕获输入法面板(InputPanel&SIP)高度改变事件
- 在.Net CF(C#)中捕获输入法面板(InputPanel&SIP)高度改变事件
- 在.net cf(C#)中捕获输入法面板(InputPanel&SIP)高度改变事件
- 在C#中捕获输入法面板(InputPanel&SIP)高度改变事件
- 【DOM操作】实时监听input[type='text']和HTML标签中属性改变事件
- 捕获input 文本框内容改变的事件(onchange,onblur,onPropertyChange比较)
- 捕获input 文本框内容改变的事件(onchange,onblur,onPropertyChange比较)
- html input 等值改变添加监听事件
- 捕获input文本框内容改变事件的js代码
- 捕获input 文本框内容改变的事件
- 捕获input文本框内容改变事件的js代码
- 捕获input 文本框内容改变的事件(onchange,onblur,onPropertyChange比较)
- 捕获input文本框内容改变的事件(onchange,onblur,onPropertyChange比较)
- 捕获input 文本框内容改变的事件(onchange,onblur,onPropertyChange比较)
- Windows Mobile 中输入法改变事件的捕获
- 捕获input 文本框内容改变的事件(onchange,onblur,onPropertyChange比较)
- 捕获input 文本框内容改变的事件(onchange,onblur,onPropertyChange比较)
- 捕获input 文本框内容改变的事件
- C#钩子类 几乎捕获键盘鼠标所有事件
- c# 使用Button和Panel 设计伸缩面板控件