目前没有读过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. VS2010 需要缺少的web组件才能加载该项目

    到的问题是解决方案中部分项目无法加载, 提示需要缺少的web组件才能加载该项目,是否通过WEB安装组件来网络安装, 点击确定以后就什么也没有了. 到微软网站去下载Microsoft Web Platf ...

  2. 编译安装apache+php(加常见问题解决)

    [编译apache]./configure --prefix=/usr/local/lamp/httpd -with-apr=/usr/local/apr -with-apr-util=/usr/lo ...

  3. 【Java】从域名得到ip

    package sdfg; import java.net.InetAddress; //import java.net.UnknownHostException; import java.io.*; ...

  4. 【英语】Bingo口语笔记(29) - Run系列

  5. 虚拟机下Linux系统安装vmtool工具

    1.启动此虚拟机2.用超级用户root登录3.登录成功后,Ctrl+Alt ,取出鼠标,点选菜单栏,虚拟机 →安装VMware工具 → Install4.待虚拟系统挂载了光盘后,弹出cdrom文件夹或 ...

  6. Excel学习笔记杂荟

    Excel学习 一.工具->选项 可以对整个excel里面的东西进行编辑,里面有隐藏行号,下拉档等选项,有文档作者信息. 隐藏网格等 二.单元格内容比较大可以右击单元格->设置单元格格式- ...

  7. phonegap配置启动动画

    以下有2种方式 1 主Active中 onCreate函数里添加代码 2 config.xml文件进行配置(对通过命令行模式下cordova命令行生成的可行) 确保自己安装了SplashScreen插 ...

  8. ADG打补丁

    1 产品DG备库安装 16494615 补丁 主库停止向备库传输日志 alter system set log_archive_dest_state_2=defer; alter system set ...

  9. linux 下查看系统内存使用情况的方法

    在Windows系统中查看内存的使用情况很简单,想必大家都已经耳熟能详了,那么在linux系统如何查看内存使用情况呢?下面和大家分享在Linux 下查看内存使用情况的free命令: [root@scs ...

  10. hibernate建表一对多 一的一方控制多的方

    级联操作,操作class对象的时候 级联操作 student Classes.java文件 package cn.itcast.hiberate.sh.domain; import java.util ...