zoukankan      html  css  js  c++  java
  • silverlight for windows embbed 的键盘处理之一

    时间:8:57 2010-10-29

    环境:


    开发环境:VS2008 +XAML2CPP.EXE + SWE 2 + BLEND 2
    运行环境:WINCE 6.0 R3
    硬件加速: DirectX

    联系:


    网站:        http://www.pvontek.com
    E-MAIL:    pengxinglove@gmail.com

    QQ群:       38076553

    主题:    键盘操作

    任务

         向图1所示的界面添加键盘操作

    2

                                           图1 系统主界面

    操作说明:

            其的操作规则与操作菜单是一样的,具体规则如下:

    ESC 键含义:

    1. 退出子菜单 回支父菜单 2.退出程序(退出只限于子程序,而对于总控制台的程序其是不能够退出

    ENTER 键含义:

    1. 确认选择 包含以下两点:A. 由父菜单到子菜单(子菜单其的第一项要改变背景)
                  B.由菜单子项进入到应用程序(启动应用程序)

        向上(UP):

    其是完成向上选择(包括父子菜单)

      向下(DOWN) :

    完成向下选择(包括父子菜单)

       向左(LEFT):

    在父子菜单中完成由子菜单到父菜单的跳转,在数据处理的环境当中,其是进行添            加

      向右(RIGHT):

    在父子菜单中完成,父菜单向子菜单的跳转,
    PS:在处理的过程当中要注意到其之间效果的改变

    实现

          在MFC当中,此界面是使用BitBlt的方式来进行的实现 ,也就是全部使用图片粘贴上去的.其工作量很大且很烦人的,如: 界面的描点布局,   鼠标事件的处理,键盘事件的处理

         当今SWE年代,我们已经体味了其的好处, 期待着SWE其能给我们惊喜

    MFC年代

    在MFC的BITBLT环境下编程,对于键盘操作是一件很烦人的事情.
        如图1, 为其添加键盘操作

        一个对话框其负责接收WM_KEYDOWN,WM_KEYUP消息,
        其首先判断是哪一种类的键被按下,
    如VK_ESCAPE, VK_RETURN,VK_LEFT,VK_RIGHT,VK_UP,VK_DONW

        然后分类处理: 因为分为菜单与子菜单的两种情况,
    其首先 判断焦点在菜单当中还是子菜单当中,
        然后根据各种情况处理.

    如果发把这个过程命名的话,觉得叫做: 手动事件路由.

        这个过程可以看到是一种能量消耗,我们应该避免这种能量消耗, 让开发人员只要专注于业务逻辑的处理.

    SWE年代

       在SWE当中,那些图片其是一些真正的UI 控件,其可以接收焦点,可以注册鼠标事件,键盘事件.

       我们基本思路是:以控件为中心,: 控件注册键盘事件,然后在事件代码当中直接进行逻辑的实现.

       我以菜单[照片]photo 按键为例说明:

    1. 注册 键盘事件

    3

    2. 进行逻辑处理

    4

    其他的控件也是类似的处理.

    在SWE当中我们是直接的进行业务逻辑的处理,而中间事件的路由则由SWE框架来完成了.

    后续

           此部分,记录了我学习过程当中的想法. 所以段与段之间可以没有逻辑,以段为单位吧

    但中心的都是: 怎么样解决按键处理.  --> 技术散文( 刚想出来的)

    全局思考

    现在我们已经在SWE年代当中.
        MS 的SWE开发人员其是怎么样来思考与处理这个问题的.

        我们的自身首先要明确两个种接口的问题:

    1.用户的接口:( 使用软件的人)
        用户的操作流程是什么呢.


    2.我们APP 开发人员想要的接口是什么呢.
        最好是不要写代码.可视化点点划划就可以了.
        对于各种按键的处理,控件自身与SWE框架之间应该已经建立好了初步   
        用户只要业务逻辑的处理.如是:VK_RETURN ,其就可以进行业务逻辑的处理.
        键盘操作与鼠标操作的支持.其本质就将是对于焦点的处理.

    MS的SWE开发人员的两个接口:

    1. 用户的接口( 使用此SWE库的人)

         用户其只要怎么样做,就可以方便的完成任务

    2. MS的SWE自身的开发人员

        使用什么样的设计模式来实现了,

    对于程序框架的思考:


        觉得MVC模式很适合:
        VIEW 层进行: 键盘消息,鼠标消息的接收
        CONTROL     层进行: 其进行控制,如:VK_LEFT,VK_RIGHT,VK_ESCAPE的处理.
        MODAL 层进行业务逻辑的的处理, 如:VK_RETURN 与鼠标按下,其最终均会调用此

     

    对于注册事件响应机制的思考

    在SWE当中,每一个控件其都是注册AddKeyDownEventHandler, AddKeyUpEventHandler.
        其是怎么样被触发的呢.
        难道只要有键盘按下,被注册了的对象其就可以得到此消息吗.
        我反照鼠标消息,AddMouseLeftButtonDown.
        当鼠标左键被按下,
        被响应的UI 对象必须要满足三个条件:
    1. 注册此事件
    2.事件反应
    3.当UI 对象获得了焦点

        注册了键盘消息的UI 对象,其是否也要满足这三个条件呢.

        SWE其在进行事件处理的过程当中,不管是鼠标消息还是键盘消息,其是通知用户,此类事件已经发生了,而其要进行什么的事件,则由用户进行处理.

     

        在MFC的BITBLT当中,我们之所以要做很多的事情,是因为这里面没有真正的控件,其均是图片,其是不能接收焦点的.而要由我们分配与管理伪焦点.

     

    [ 在键盘消息处理的过程当中,SWE框架其为我们做了什么事情]

         在MFC的BITBLT当中,我们并没有真正的以按键为中心,而接收按键消息,然后经过中间处理过程,之后其就知道要作为于哪一个图片控件,但我们并没有发送到控件当中,而是直接地进行的事件的处理.

        在此过程当中,有一些记录状态的变量. 如记录伪焦点是在子菜单当中还是主菜单当中.

       在SWE当中, 其将在MFC当中的中间过程,自身来完成处理,用户其只要进行业务逻辑处理就可以了. 其是真正以UI 控件为中心的.

     

    感受

    对于键盘操作,没有鼠标操作的方便,所以还要克服太麻烦的心理.

    小结:

        此文只是一个开始,有很多的不足,但还是:先写代码,然后再重构吧.

    感觉:代码没有重用,且不灵活.

    回去看看HEAD FIRST 看看有什么好的设计模式,

    知道的朋友,麻烦说说.

  • 相关阅读:
    (最小生成树) 畅通工程再续 -- HDU --1875
    (最小生成树)Jungle Roads -- HDU --1301
    (最小生成树 )还是畅通工程 -- HDU--1233
    不同版本的 IIS 中使用 ASP.NET MVC(C#)【转】
    我们应当怎样做需求分析【转】
    C# DataTable几个常用的查询表达式【转】
    C# DataTable转实体 通用方法【转】
    C# 如何利用反射来加载程序集,并调用程序集中有关类的方法【转】
    IEnumerable和IEnumerator 详解 【转】
    循环对XML文档添加Attribute以及移除Element 【转】
  • 原文地址:https://www.cnblogs.com/pengxinglove/p/1864722.html
Copyright © 2011-2022 走看看