硬汉嵌入式论坛

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

[emWin] 请教下,输入法如何才能够在不同的控件页面里面都可以使用啊 ??

[复制链接]

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
发表于 2018-8-8 12:27:29 | 显示全部楼层 |阅读模式
请教下,输入法如何才能够在不同的控件页面里面都可以使用啊 ??
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-8-8 13:40:19 | 显示全部楼层
给输入法创建一个独立的窗口就行。

然后给其他窗口通信的话,可以发送聚焦类的按键消息,也可以发送自定义消息。
回复

使用道具 举报

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
 楼主| 发表于 2018-8-8 16:11:17 | 显示全部楼层
eric2013 发表于 2018-8-8 13:40
给输入法创建一个独立的窗口就行。

然后给其他窗口通信的话,可以发送聚焦类的按键消息,也可以发送自定 ...

我现在的输入法是独立的 WM_HBKWIN 这个类型的窗口

我吧我的大概代码贴上来你看看吧,看看具体该如何修改?


void CreateWindowSKBApp(void)  //创建主窗口,初始化只调用一次
{
        WM_HWIN hFrame;
       
        KEY_PAD_Memory( 0 );  //申请内存, 内存一旦申请并不会释放
        memset(keypad_dev, 0, sizeof(KEYPADStructTypeDef));
       
        WM_SetCallback(WM_HBKWIN, _cbBk);                  //是指背景窗口回调函数
       
        //设置keypad所使用的按钮的皮肤
        BUTTON_SetDefaultSkin(_DrawSkinFlex_BUTTON);         //设置BUTTON的皮肤       
       
        //创建 键盘 子窗口
        keypad_dev->hKeypad = WM_CreateWindowAsChild(keypad_dev->xpos,keypad_dev->ypos,keypad_dev->width,keypad_dev->height, WM_HBKWIN, WM_CF_SHOW |                                                                                                                 WM_CF_STAYONTOP, _cbKeyPad, 0);
        WM_MOTION_SetMoveable(keypad_dev->hKeypad, WM_CF_MOTION_X | WM_CF_MOTION_Y, 1);        //移动启动
       
//        WM_HideWindow(keypad_dev.hKeypad);          //隐藏输入法
               
        {
                // 下面是输入法显示测试
                // 输入法显示测试 ,如果不使用,吧相应的 多行文本函数屏蔽即可
                //设置notepad属性
                BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
                FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
                FRAMEWIN_SetDefaultTextAlign(GUI_TA_HCENTER);
               
                //创建FRAME窗口
                hFrame = FRAMEWIN_CreateEx(0, 0, 480, 240, WM_HBKWIN, WM_CF_SHOW, 0, 0, "SWS Notepad", 0);
                FRAMEWIN_SetTextColor(hFrame, GUI_YELLOW);
                FRAMEWIN_SetFont(hFrame, &GUI_Font20_ASCII);
                FRAMEWIN_SetClientColor(hFrame, GUI_WHITE);       
               
                //创建一个multi edit(多行文本小工具)小工具
                hMulti = MULTIEDIT_CreateEx(0, 0, 0, 0, WM_GetClientWindow(hFrame), WM_CF_SHOW, 0, GUI_ID_MULTIEDIT0, 100, NULL);
                MULTIEDIT_EnableBlink(hMulti,500,1);                        //开启光标,周期500ms
                MULTIEDIT_SetInsertMode(hMulti,1);        //开启插入模式
                MULTIEDIT_SetFont(hMulti, &GUI_FontHZ24);
                WM_SetFocus(hMulti);
        }
}



例如我有四个窗口如下:
WM_HWIN  hWin1, hWin2, hWin3, hWin4;   //相应的窗口句柄
uint8_t  WinFlag =0;  //在相应需要显示里面设置值,=0表示没有需要显示的输入窗口

如果是 hWin2 需要输入相关数据
WinFlag  = 2;


                                 // 这个是检测到有需要显示的内容时,就直接在 多行文本里面显示了
                                if(keypad_dev->cur_hz != NULL)
                                {
// 如果要发送什么的信息,应该是在这个里面进行吧,但是如果是有多个 控件窗口需要显示输入的内容,那这个地方还需要做个什么标志来判断是哪个窗口需要发送信息 ?
//然后吧对应的信息发送出去吗 ??

                                       if(WinFlag   == 2)
                                       {
                                              Msg.MsgId    = CHANGE_CHINESE_HWIN2;
                                              Msg.hWinSrc  = hWin2;
                                             WM_SendMessage(hWin2,&Msg);

                                       }

                                       else if(WinFlag   == 3)
                                       {
                                              Msg.MsgId    = CHANGE_CHINESE_HWIN3;
                                              Msg.hWinSrc  = hWin3;
                                             WM_SendMessage(hWin3,&Msg);

                                       }


//                                        USART_OS_Printf("chinese %s\r\n", keypad_dev->cur_hz);                   //串口输出 汉字字符 测试
//                                        MULTIEDIT_AddText(hMulti,(const char*)keypad_dev->cur_hz);   //在多行文本中显示选中的汉字 测试
                                }






















回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-8-8 17:36:51 | 显示全部楼层
hpdell 发表于 2018-8-8 16:11
我现在的输入法是独立的 WM_HBKWIN 这个类型的窗口

我吧我的大概代码贴上来你看看吧,看看具体该如何 ...

你的输入法是自带显示框没有,最好自带一个显示框,优先在自己的显示框里面显示好,然后点击确定按钮,将显示框里面的消息发送给你要显示的窗口就行。
回复

使用道具 举报

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
 楼主| 发表于 2018-8-8 22:27:27 | 显示全部楼层
本帖最后由 hpdell 于 2018-8-8 22:31 编辑
eric2013 发表于 2018-8-8 17:36
你的输入法是自带显示框没有,最好自带一个显示框,优先在自己的显示框里面显示好,然后点击确定按钮,将 ...

做了一个多文本显示测试框,

但是如果需要发到不同的 控件窗口的话,貌似也还是得区分是哪个空间窗口吧 ???

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-8-9 01:20:41 | 显示全部楼层
hpdell 发表于 2018-8-8 22:27
做了一个多文本显示测试框,

但是如果需要发到不同的 控件窗口的话,貌似也还是得区分是哪个空间窗口 ...

这个好解决,你点击的那个控件弹出的窗口,肯定要进入此控件父窗口的回调消息吧,这样就方便记录是那个控件的,然后弹出的这个输入法窗口做成模块的,输入完毕后,发送自定义消息,在自定义消息里面更新控件就行。
回复

使用道具 举报

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
 楼主| 发表于 2018-8-10 09:23:36 | 显示全部楼层
eric2013 发表于 2018-8-9 01:20
这个好解决,你点击的那个控件弹出的窗口,肯定要进入此控件父窗口的回调消息吧,这样就方便记录是那个控 ...

你好,在其他控件页面显示输入法貌似基本实现了,

在需要使用输入法的控件页面里面,貌似不能够设置为模态 ?? 还有就是返回到主界面时 会出现第一个图标不能够显示的问题啊 ?? 第一个图标对应的描述文字可以显示
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-8-10 12:06:32 | 显示全部楼层
hpdell 发表于 2018-8-10 09:23
你好,在其他控件页面显示输入法貌似基本实现了,

在需要使用输入法的控件页面里面,貌似不能够设置为 ...

这个估计是你程序的问题了吧,你查查。
回复

使用道具 举报

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
 楼主| 发表于 2018-8-10 14:21:31 | 显示全部楼层
本帖最后由 hpdell 于 2018-8-10 14:49 编辑
eric2013 发表于 2018-8-10 12:06
这个估计是你程序的问题了吧,你查查。

第一个图标,如果主界面使用隐藏、显示功能就会出现这样的情况,
如果使用 关闭主界面进入到其他界面,返回时重新绘制主界面就不会出现 第一个图标没有显示的情况,

主界面图标多时,貌似使用重新绘制的方法显示有点慢,看看后续我吧 图标数据开机时全部都 读到  sdram 保存,之后再使用关闭主界面,返回时
重新绘制主界面估计会快一点

//*******************************************************************

至于那个 需要使用输入法的界面里面不能够使用模态的情况,是否正常啊 ??

需要输入法的控件窗口界面使用的 WM_HBKWIN 这个类型
而输入法创建的窗口使用的也是这个 WM_HBKWIN  类型的,
是不是他们不能够同时使用啊 ???????????????????????????
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-17 07:01 , Processed in 0.441736 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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