硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2152|回复: 8
收起左侧

[emWin] 新建输入法问题,第一排按键点击无反应,求解决。

[复制链接]

17

主题

42

回帖

17

积分

初级会员

积分
17
发表于 2017-5-18 16:59:03 | 显示全部楼层 |阅读模式
做了一个界面如下:


其中键盘输入窗口是DTC Code框架窗口的子窗口,在点击edit窗口时调出键盘输入窗口,通过点击键盘按键实现对edit窗口的实时输入。


现在出现了一个新问题,就是第一排的按键点击无效,我查了几遍,所有按钮的设置都是一样啊,搞不懂为什么,哪位大神给分析分析!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-5-18 17:20:15 | 显示全部楼层
这个例子适合你现在的需求:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=5480

在另一个帖子里面回复你了,你估计没有看到。
回复

使用道具 举报

17

主题

42

回帖

17

积分

初级会员

积分
17
 楼主| 发表于 2017-5-18 17:26:04 | 显示全部楼层
好的,谢谢。
看了,还是没看出来为什么第一排和后三排的按键会有区别。我把相关的代码贴出来,麻烦各位给分析分析,看看到底问题在哪。代码是在《第9期:全键盘拼音输入法界面设计》的基础上裁剪的。

static void _cbKeyPad(WM_MESSAGE * pMsg)
{
    WM_HWIN    hWin;
    WM_HWIN    hButton;
    int        Id;
    int        NCode;
    int        xSize;
    int        ySize;
    unsigned   i;

    hWin = pMsg->hWin;
    switch (pMsg->MsgId)
    {
        /* 创建所需的按钮 */
        case WM_CREATE:
            for (i = 0; i < GUI_COUNTOF(_aButtonData); i++)
            {
                hButton = BUTTON_CreateEx(_aButtonData.xPos, _aButtonData.yPos, _aButtonData.xSize, _aButtonData.ySize,
                hWin, WM_CF_SHOW, 0, ID_BUTTON + i);

                BUTTON_SetFont(hButton, &GUI_Font16B_ASCII);
                BUTTON_SetText(hButton, _aButtonData.acLabel);
                BUTTON_SetFocussable(hButton, 0);
            }
            break;
        
        /* 绘制背景 */   
        case WM_PAINT:   
            xSize = WM_GetWindowSizeX(hWin);
            ySize = WM_GetWindowSizeY(hWin);
            GUI_SetColor(COLOR_BORDER);
            GUI_DrawRect(0, 0, xSize - 1, ySize - 1);
            GUI_DrawGradientV(1, 1, xSize - 2, ySize - 2, COLOR_KEYPAD0, COLOR_KEYPAD1);
            break;
        /* 用于处理按钮的消息 */
        case WM_NOTIFY_PARENT:
            Id    = WM_GetId(pMsg->hWinSrc);
            NCode = pMsg->Data.v;
            switch (NCode)
            {
                case WM_NOTIFICATION_RELEASED:
                    if (_aButtonData[Id - ID_BUTTON].acLabel)
                    {
                        /* 第一步:实现字母大小写的切换 *******************************************/
                        if(strncmp((const char *)_aButtonData[Id - ID_BUTTON].acLabel, "Caps", sizeof(_aButtonData[Id - ID_BUTTON].acLabel)) == 0)
                        {
                            /* 当前是小写,切换到大写,必须在英文模式下实现大小写切换*/
                            if((s_CapsLock == 0)&&(s_SelectLangue == 1))
                            {
                                for (i = 0; i < GUI_COUNTOF(_aButtonData); i++)
                                {
                                    BUTTON_SetText(WM_GetDialogItem(hWin, ID_BUTTON + i), _aButtonData.acLabel1);
                                }
                                s_CapsLock = 1;
                            }
                            else if((s_CapsLock == 1)&&(s_SelectLangue == 1))
                            {
                                for (i = 0; i < GUI_COUNTOF(_aButtonData); i++)
                                {
                                    BUTTON_SetText(WM_GetDialogItem(hWin, ID_BUTTON + i), _aButtonData.acLabel);
                                }
                                s_CapsLock = 0;
                            }

                            /* 功能键处理完要退出 */
                            break;
                        }

                        /* 第三步:字母大小写的识别 ********************************************/
                        if(s_CapsLock == 0)
                        {
                            s_Key = _aButtonData[Id - ID_BUTTON].acLabel[0];
                        }
                        /* 大写字母 */
                        else
                        {
                            s_Key = _aButtonData[Id - ID_BUTTON].acLabel1[0];
                        }

                    
                    /* 字符显示*******************************************************************/
                    
                    
                        /* 点击回车键 */
                        if(strncmp((const char *)_aButtonData[Id - ID_BUTTON].acLabel, "Enter", sizeof(_aButtonData[Id - ID_BUTTON].acLabel)) == 0)
                        {
                            WM_DeleteWindow(hItem_Keyboard);
                            break;
                        }

                        if(strncmp((const char *)_aButtonData[Id - ID_BUTTON].acLabel, "Back", sizeof(_aButtonData[Id - ID_BUTTON].acLabel)) == 0)
                        {
                            MULTIEDIT_AddKey(hItem_edit,GUI_KEY_BACKSPACE);
                        }
                        
                        /* 其它按键,但不能是功能键 */
                        if(_aButtonData[Id - ID_BUTTON].Control == 0)
                        {
                            s_Textbuf[0] = s_Key;
                            s_Textbuf[1] = '\\0';
                            MULTIEDIT_AddText(hItem_edit,s_Textbuf);

                        }
                    }
               
                break;
            }
    }

   
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-5-18 17:32:38 | 显示全部楼层
直接用官方的那个例子就好了,就是你需要的,省的倒腾了。简单又好用。
回复

使用道具 举报

17

主题

42

回帖

17

积分

初级会员

积分
17
 楼主| 发表于 2017-5-18 17:36:57 | 显示全部楼层
没有数字啊,还是得倒腾。我也确实想搞清楚问题在哪,这也是在《第9期:全键盘拼音输入法界面设计》代码上裁剪的啊,我觉得《第9期:全键盘拼音输入法界面设计》这个做得很不错,还支持中文输入,后期有需要时可以直接扩展了。

大侠,帮忙分析分析到底问题在哪呗,急啊!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-5-18 17:59:09 | 显示全部楼层

回 quickout02 的帖子

quickout02:没有数字啊,还是得倒腾。我也确实想搞清楚问题在哪,这也是在《第9期:全键盘拼音输入法界面设计》代码上裁剪的啊,我觉得《第9期:全键盘拼音输入法界面设计》这个做得很不错,还支持中文输入,后期有需要时可以直接扩展了。

大侠,帮忙分析分析到底问题在哪呗,急啊! (2017-05-18 17:36) 
功能键C/e表示当前是汉字输入,c/E表示英文输入。切换到英文输入看看。
回复

使用道具 举报

17

主题

42

回帖

17

积分

初级会员

积分
17
 楼主| 发表于 2017-5-19 09:03:31 | 显示全部楼层

回 eric2013 的帖子

eric2013:功能键C/e表示当前是汉字输入,c/E表示英文输入。切换到英文输入看看。 (2017-05-18 17:59) 
功能键C/e我这里没有使用,使用的功能键只有Caps、Enter、Back,所以也就不存在切换之说了。
回复

使用道具 举报

17

主题

42

回帖

17

积分

初级会员

积分
17
 楼主| 发表于 2017-5-19 10:39:41 | 显示全部楼层
我附上我的部分代码,可以直接仿真运行,各位大侠帮忙看看。

@eric2013

第一排button不能点击.rar

148 KB, 下载次数: 52

点击edit框,调出键盘后,第一排button不能点击

回复

使用道具 举报

17

主题

42

回帖

17

积分

初级会员

积分
17
 楼主| 发表于 2017-5-19 11:00:58 | 显示全部楼层
/* 创建所需的按钮 */
        case WM_CREATE:
            for (i = 0; i < GUI_COUNTOF(_aButtonData); i++)
            {
                hButton = BUTTON_CreateEx(_aButtonData.xPos, _aButtonData.yPos, _aButtonData.xSize, _aButtonData.ySize,
                hWin, WM_CF_SHOW, 0, ID_BUTTON + i);
                BUTTON_SetFont(hButton, &GUI_Font16B_ASCII);
                BUTTON_SetText(hButton, _aButtonData.acLabel);
                BUTTON_SetFocussable(hButton, 0);                             
            }
            break;



屏蔽掉 BUTTON_SetFocussable(hButton, 0);就可以了,但我还是想不明白是什么原因,所有的botton都是同样的属性啊,为什么就第一排有影响啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-15 10:53 , Processed in 0.330978 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表