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 看看有什么好的设计模式,

知道的朋友,麻烦说说.

 

 

转载于:https://www.cnblogs.com/pengxinglove/archive/2010/10/29/1864722.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值