业精于勤荒于嬉,形成于思毁于随
只吃馒头不吃菜,省下钱来谈俩恋爱!This is my simply life!
博客园
首页
新随笔
新文章
联系
管理
订阅
随笔- 138 文章- 2 评论- 49
在C#中捕获输入法面板(InputPanel&SIP)高度改变事件
在进行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事件。
using
System;
using
Microsoft.WindowsCE.Forms;
/**/
///
<summary>
///
InputPanel扩展类。
///
LastUpdate:2007-12-26 NSnaiL
///
</summary>
public
class
InputPanelEx : InputPanel
{
Fields
#region
Fields
/**/
///
<summary>
///
当输入法切换时发生。
///
</summary>
public
event
EventHandler InputMethodChanged;
private
MsgHook Msg;
internal
class
MsgHook : MessageWindow
{
Fields
#region
Fields
private
const
int
WM_SETTINGCHANGE
=
0x001A
;
private
InputPanelEx BaseObject;
#endregion
Methods
#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
Methods
#region
Methods
public
InputPanelEx()
{
Msg
=
new
MsgHook(
this
);
}
#endregion
}
本文来自: 中国自学编程网(www.zxbc.cn) 详细出处参考:http:
//
www.zxbc.cn/html/cshorpsl/2613342913002.html
posted on 2008-02-28 14:40
毁于随
阅读(75)
评论(0)
编辑
收藏
所属分类:
WinCE
社区
新闻
新用户注册
刷新评论列表
标题
姓名
主页
Email
(只有博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
另存
打印
所属分类的其他文章:
·
在C#中捕获输入法面板(InputPanel&SIP)高度改变事件
·
我的第一个用EVC写的程序!
·
.Net CF 2.0 SP2已经发布了!
·
VS2005对WinCE5.0设备部署时的问题
最新IT新闻:
·
Mozilla将于本周五发布Firefox 3.1第一个预览版
·
瑞星将向个人用户免费1年
·
中国互联网历史上最伟大的产品TOP10(二)
·
盖茨官方否认天价租楼看奥运 纯属地产商炒作
·
2008年7月24日IT博客精选
博客园新闻频道
博客园首页
社区
<
2008年2月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3
4
5
6
7
8
与我联系
发短消息
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(5)
给我留言
查看留言
我参加的小组
沈阳.NET俱乐部
我参与的团队
北京.NET俱乐部(1/1359)
随笔分类
(131)
C# SDK学习(11)
C# 编程经验(16)
C# 学习笔记(6)
C++ Primer学习(7)
DotNet 2.0 Technology(1)
MFC学习(2)
ORM学习(1)
SmartClient(3)
VB6 编程经验(5)
VB6学习笔记
WCF&WPF(6)
Web Service(3)
Win32编程学习(2)
WinCE(4)
XML Tech(1)
感悟人生(2)
设计模式(3)
生活日记(1)
数据结构导论(27)
数据库相关(5)
杂七杂八(25)
随笔档案
(137)
2008年7月 (2)
2008年5月 (1)
2008年4月 (1)
2008年3月 (5)
2008年2月 (2)
2008年1月 (3)
2007年12月 (4)
2007年8月 (8)
2007年7月 (12)
2007年6月 (12)
2007年5月 (3)
2007年4月 (10)
2007年3月 (7)
2007年2月 (10)
2007年1月 (5)
2006年12月 (1)
2006年10月 (7)
2006年9月 (13)
2006年8月 (31)
文章分类
(2)
C# SDK学习(1)
C# 编程经验
C# 学习笔记(1)
VB6 编程经验
VB6学习笔记
Web Service
感悟人生
设计模式
生活日记
数据库相关
牛人Blogs
Terrylee
刘润
吕震宇
伍迷
张逸
同学的Blog
祁晓锐的Blog
史金兰的Blog
搜索
最新评论
1. re: [转]通用异步线程调用模式--通知线程
晕。。转载请注明出处
--T.t.T!Ck.¢#
阅读排行榜
1. C++字符串完全指南(转)(794)
2. VS2005对WinCE5.0设备部署时的问题(607)
3. Socket异步编程-之客户器端.(531)
4. 3.3.3.3稀疏矩阵转置算法(488)
5. 解决Oracle处理中文乱码的一种方法(390)
评论排行榜
1. 我的第一个用EVC写的程序!(4)
2. 帮北航小妹妹做的一道她的C++的作业题.(4)
3. XMLHTTP小偷程序原理-及一天气预报小偷程序 (转)(2)
4. 我设计VB6的三存架构模式:一、DataAccess层(2)
5. 2006.7.3工作总结!(2)