zoukankan      html  css  js  c++  java
  • 支持输入法变更事件的InputPanel

     

    在Windows Mobile编程中,经常会使用到输入法,微软的.net compact framework中提供了InputPanel控件,该控件是系统全局性的,提供了EnabledChanged事件,在输入法弹出和关闭时触发该事件。

    然而,在Windows Mobile软件很小的屏幕下,当输入法弹出后,很多接收输入的控件便会被遮挡住,用户只能在不知道自己输入是否正确的情况下进行输入,简直使用户成为了盲人,用户体验极其之差。

    一般情况下,可以通过注册EnabledChanged事件,在其中通过获取Inputpanel的Bounds.Height的到输入法控件遮挡住的范围,然后将该范围内所有的接受输入的控件移到输入法没有遮盖住的区域。

    这样做确实能够解决一部分问题,但当用户进行输入发切换的时候,问题又出现了,因为每种输入法面板的大小不不同的,也许上种输入法没有将接受输入的控件遮挡住,而你刚切换的输入法便将其遮盖住了,用户体验问题再次出现。

    而在.net compact framework中的InputPanel控件中,并没有提供输入法切换能够触发的事件,怎么办?只好自己写一个输入法控件了,当然,该控件是继承Inputpanel的,否则,我还没那么强大。

    控件代码

    using System;
    using Microsoft.WindowsCE.Forms;

    /// <summary>
    /// 支持输入法切换的输入面板
    /// </summary>
    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 Methods
        /// <summary>
        /// 支持输入法切换事件的输入面板
        /// </summary>
        public InputPanelEx()
        {
            Msg = new MsgHook(this);
        }

        #endregion
    }

  • 相关阅读:
    为什么我的tomcat启动不起来?
    图解leetcode —— 128. 最长连续序列
    java实现单链表增删改查
    搞定java String校招面试题
    java反射快速入门
    java中线程安全,线程死锁,线程通信快速入门
    理清Java中try-catch-finally带return的执行顺序
    Java可变参数与Collections工具类使用了解
    HashMap常见面试题整理
    ArrayList去除重复元素(多种方法实现)
  • 原文地址:https://www.cnblogs.com/xyzlmn/p/3168463.html
Copyright © 2011-2022 走看看