在.netcf(C#)中捕获输入法面板(InputPanel&SIP)高度改变事件在.netcf(C#)中捕获输入法面板(InputPanel&SIP)高度改变事件
在进行Windows Mobile编程的时候,经常需要将Form上控件的Location随输入法面板的高度改变而调整,以免被面板遮盖。
但是.Net CF的InputPanel控件只给我们提供了EnabledChanged(即输入法打开/关闭)事件,这就意味着在Enabled属性没有发生变化的情况下进行输入法切换,我们便无法及时获取新的面板高度以做出相应处理。
有过Win32 sdk编程经验的朋友都知道,用户对应用程序产生的动作是首先以消...
在.netcf(C#)中捕获输入法面板(InputPanel&SIP)高度改变事件
在进行Windows Mobile编程的时候,经常需要将Form上控件的Location随输入法面板的高度改变而调整,以免被面板遮盖。
但是.Net CF的InputPanel控件只给我们提供了EnabledChanged(即输入法打开/关闭)事件,这就意味着在Enabled属性没有发生变化的情况下进行输入法切换,我们便无法及时获取新的面板高度以做出相应处理。
有过Win32 sdk编程经验的朋友都知道,用户对应用程序产生的动作是首先以消息的形式传递给操作系统,操作系统根据消息中的窗口句柄(hWnd)回调该窗口的的消息响应函数而得到应用程序的反馈的。既然.Net CF没有对此消息进行封装,那么我们只好自己手动处理消息了。
在Windows环境下我们可以通过重写System.Windows.Forms.Form类的WndProc()函数来实现对该窗体消息的控制。但CE环境下,System.Windows.Forms.Form类没有提供给我们此方法,我们可以利用API函数从消息队列中取出消息经过处理后再将该消息的处理权返还给系统。
OK,有了思路就开始行动啦。首先,我们把.Net CF自带的Application扔掉,建立自己的消息循环,代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Runtime.InteropServices;
usingSystem.Windows.Forms;
usingMicrosoft.WindowsCE.Forms;
///< summary>
///Application扩展类。
///LastUpdate:2007-12-25NSnaiL ///MerryChristmas!:)
///< /summary>
publicclassApplicationEx
{
#regionNative
///////////////////////导出非托管代码///////////////////////
///< summary>
///向系统
明有个线程有终止请求,通常用来响应WM_DESTROY消息。 ///< /summary>
///< paramname="nExitCode">退出代码,此值被用作消息WM_QUIT的wParam参数。< /p
aram>
[DllImport("coredll.dll",SetLastError=true)]
internalstaticexternvoidPostQuitMessage(intnExitCode); ///< summary>
///将虚键消息转换为字符消息;
///字符消息被寄送到调用线程的消息队列里,
///当下一次线程调用函数GetMessage或PeekMessage时被读出。 ///< /summary>
///< paramname="lpMsg">指向含有消息的MSG结构的指针。< /param> ///< returns>
///如果消息被转换(即,字符消息被寄送到调用线程的消息队列里),返回非零值。 ///如果消息是WM_kEYDOWN,WM_KEYUPWM_SYSKEYDOWN或WM_SYSKEYUP,返回非零值,不考虑转换。
///如果消息没被转换(即,字符消息没被寄送到调用线程的消息队列里),返回值是零。 ///< /returns>
[DllImport("coredll.dll",SetLastError=true)]
internalstaticexternboolTranslateMessage(outMessageExternlpMsg); ///< summary>
///调度一个消息给窗口程序;
本文档为【在.netcf(C#)中捕获输入法面板(InputPanel&SIP)高度改变事件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。