目前没有读过ucgui的源代码,通过应用代码测试出在FRAMEWIN的控件焦点顺序是样的:

按资源列表里创建的控件,默认将焦点落在第一个可接收焦点的控件,目前知道不可接收

焦点的控件有TEXT,在FRAMEWIN上安排有以下的控件:

 

static
const
GUI_WIDGET_CREATE_INFO
_aDialogCreate[] = {

    { FRAMEWIN_CreateIndirect, NULL, 0, 0, 0, 128, 64, 0,0},

    { TEXT_CreateIndirect, NULL, GUI_ID_TEXT0, 25, 0, 50, 13, 0,0},

    { MULTIEDIT_CreateIndirect, NULL, GUI_ID_MULTIEDIT0, 65, 0, 42, 13, 0,0},

    { CHECKBOX_CreateIndirect, NULL, GUI_ID_CHECK0, 4, 4, 51, 0, 0, 0 },

    { TEXT_CreateIndirect, NULL, GUI_ID_TEXT1, 25, 15, 50, 13, 0,0},

    { MULTIEDIT_CreateIndirect, NULL, GUI_ID_MULTIEDIT1, 65, 15, 42, 13, 0,0},

    { TEXT_CreateIndirect, NULL, GUI_ID_TEXT2, 0, 30, 64, 13, 0,0},

    { MULTIEDIT_CreateIndirect, NULL, GUI_ID_MULTIEDIT2, 65, 30, 42, 13, 0,0},

};

 

从列表中看出默认的窗口焦点是CHECKBOX控件,如果将CHECKBOX0 删除,那么默认的焦点是MULTIEIDT0

static
const
GUI_WIDGET_CREATE_INFO
_aDialogCreate[] = {

    { FRAMEWIN_CreateIndirect, NULL, 0, 0, 0, 128, 64, 0,0},

    { TEXT_CreateIndirect, NULL, GUI_ID_TEXT0, 25, 0, 50, 13, 0,0},

    { MULTIEDIT_CreateIndirect, NULL, GUI_ID_MULTIEDIT0, 65, 0, 42, 13, 0,0},

 

    { TEXT_CreateIndirect, NULL, GUI_ID_TEXT1, 25, 15, 50, 13, 0,0},

    { MULTIEDIT_CreateIndirect, NULL, GUI_ID_MULTIEDIT1, 65, 15, 42, 13, 0,0},

    { TEXT_CreateIndirect, NULL, GUI_ID_TEXT2, 0, 30, 64, 13, 0,0},

    { MULTIEDIT_CreateIndirect, NULL, GUI_ID_MULTIEDIT2, 65, 30, 42, 13, 0,0},

};

 

那么问题就来了,如果焦点在MULTIEIDT控件上,想以ESC做为本窗口的销毁退出处理,发现在FRAMEWIN的回调里无法收到ESC键抬起的消息,即:

     case
WM_KEY:

         switch (((WM_KEY_INFO *)(pMsg->Data.p))->Key){

     case
GUI_KEY_ESCAPE:

         if(((WM_KEY_INFO *)(pMsg->Data.p))->PressedCnt == 0) //起键判断

             窗口销毁操作;

 

在MultiEdit里当按下ESC键时有按下((WM_KEY_INFO *)(pMsg->Data.p))->PressedCnt == 1,但是没有抬起:((WM_KEY_INFO *)(pMsg->Data.p))->PressedCnt == 0,如果一按键触发退出会导致连级退出,参考文章:

http://www.cnblogs.com/worldsing/p/4165919.html

 

所以代码无法运行到窗口销毁的部分,我尝试将焦点落在其他控件上可以销毁窗口,初步怀疑MULTIEDIT把起键消息过滤了,如果窗口上只有MULTIEDIT控件该如何实现这样的功能?

 

处理办法是收到ESC键按下的消息是,触发定时器在指定的时间内退出并销毁窗口:

 

    case
WM_KEY:

        switch (((WM_KEY_INFO *)(pMsg->Data.p))->Key){

            case
GUI_KEY_ESCAPE:

                WM_CreateTimer(WM_GetClientWindow(hWin), 0, 100, 0);

                break;

        }

        break;

    case
WM_TIMER:

        WIN_Exit(0);

        break;    

 

 

emWin(ucGui) MULTIEDIT控件的按键响应处理 worldsing的更多相关文章

  1. emWin(ucGui) Edit控件数值模式 ——符号编辑 worldsing

    emWin(ucGui) Edit控件数值模式出现负数值编辑时,如果键盘按键全可以设置独立的"-","+"键,这样可以正常编辑正数和负数,但是要没有设置这两个键 ...

  2. emWin(ucGui)的Edit控件退格处理方法 worldsing

    在enWin(ucGui)中EDIT控件在数值模式(十进制/十六进制/二进制/浮点数)下编辑是,无法使用BackSpace键进行退格,主要涉及到的函数有: EDIT_SetBinMode() EDIT ...

  3. vs设计界面出现“建控件时出错 响应在此上下文中不可用”

    使用VS2010设计Asp.net时出现: 只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态.还请确保在应用程序配置的 \\ 节中包括 ...

  4. 【转】用emWin进度条控件做个表盘控件,效果不错

    @2018-08-09 用emWin进度条控件做个表盘控件,效果不错

  5. C# WinForm给Button按钮或其它控件添加快捷键响应

    就在这介绍三种添加快捷键的方式. 第一种Alt + *(按钮快捷键) 在大家给button.label.menuStrip等控件设置Text属性时在名字后边加&键名就可以了,比如button1 ...

  6. WPF触屏Touch事件在嵌套控件中的响应问题

    前几天遇到个touch事件的坑,记录下来以增强理解. 具体是 想把一个listview嵌套到另一个listview,这时候如果list view(子listview)的内容过多超过容器高度,它是不会出 ...

  7. C# WinForm给Button或其它控件添加快捷键响应

    今天做东西遇到要给按钮添加快捷键.就在这介绍三种添加快捷键的方式. 第一种Alt + *(按钮快捷键) 在大家给button.label.menuStrip等控件设置Text属性时在名字后边加& ...

  8. 【VS开发】MFC CListCtrl列表控件的消息响应

    MFC里的CListCtrl选中一行,消息是哪个.实在想不起来了.找了一篇文章,比较有用: http://www.cnblogs.com/hongfei/archive/2012/12/25/2832 ...

  9. emwin之BUTTON控件显示位图和流位图出现卡顿延迟的情况

    @2019-05-16 [问题] 参照Armfly的emwin教程第46章 BUTTON-按钮控件显示位图和流位图,实际使用时导致界面切换卡顿延迟较大的情况 [环境] F429IGT6 + W9825 ...

随机推荐

  1. HDU 1158 Employment Planning

    又一次看题解. 万事开头难,我想DP也是这样的. 呵呵,不过还是有进步的. 比如说我一开始也是打算用dp[i][j]表示第i个月份雇j个员工的最低花费,不过后面的思路就完全错了.. 不过这里还有个问题 ...

  2. 使用MySQL Proxy解决MySQL主从同步延迟

    MySQL的主从同步机制非常方便的解决了高并发读的应用需求,给Web方面开发带来了极大的便利.但这种方式有个比较大的缺陷在于MySQL的同步机制 是依赖Slave主动向Master发请求来获取数据的, ...

  3. 【JavaScript学习笔记】画图

    <!DOCTYPE HTML> <html> <head> <script type="text/javascript"> var ...

  4. Java类的执行顺序

    在Java中一个类包括:构造块.构造方法.静态块.main方法.普通方法. 通过下面的例子将看出一个类中各种方法的执行顺序: /** * @author zhengbinMac */ public c ...

  5. RequireJS入门(二) 转

    上一篇是把整个jQuery库作为一个模块.这篇来写一个自己的模块:选择器. 为演示方便这里仅实现常用的三种选择器id,className,attribute.RequireJS使用define来定义模 ...

  6. ECSide标签属性说明之<ec:column>

    <ec:column>标签 ◆ 属性: columnId描述: 单元格的id,相当于<td>的id属性 ◆ 属性: title描述: 列在列表表头里显示的名称. ◆ 属性: p ...

  7. yii框架AR详解

    虽 然Yii DAO可以处理事实上任何数据库相关的任务,但很可能我们会花费90%的时间用来编写一些通用的SQL语句来执行CRUD操作(创建,读取,更新和删除). 同时我们也很难维护这些PHP和SQL语 ...

  8. [转]linux 下使用dump和restore命令

    转自:http://blog.sina.com.cn/s/blog_63eb479a01011sdu.html dump 支持分卷和增量备份(所谓增量备份是指备份最近一次备份以来修改过的文件,也称差异 ...

  9. 顺序表的基本操作(C)

    在顺序存储结构实现基本操作:初始化.创建.插入.删除.查找.遍历.逆置.合并运算. 运行示例: 请输入线性表La的长度: 请输入线性表La中的元素(共5个) *** 此时线性表La中的元素 *** * ...

  10. sql统计重复数据

    sql代码如下: 统计重复的数据 select MingCheng from tabShouFeiGongShi group by MingCheng having count(MingCheng) ...