OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9180|回复: 5

使用emwin显示edit编辑框的问题

[复制链接]

9

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2015-7-16
在线时间
51 小时
发表于 2017-7-23 16:23:26 | 显示全部楼层 |阅读模式
10金钱
最近在做触摸edit小工具弹出小键盘的事,但是一直没有做成功。具体的实现流程应该是:1.在界面m触摸edit小工具后直接在界面m的某个指定位置弹出小键盘
2.这个小键盘应该具有“模态”窗口的属性,具体是指只能触摸小键盘区域,窗口m的区域不在支持触摸
3.其他小可爱~
现在的问题就是我在弹出小键盘的时候,能显示小键盘的背景图片跟字符,但就是不能显示小键盘窗口上面的edit框。
然而如果我在创建小键盘窗口的时候如果依次做了删除界面m、创建小键盘窗口、设置背景色、清屏(相当于直接重新创建一个窗口),这时候能显示完全的小键盘,但这是不符合要求的,因为我需要将小键盘显示在界面m上面,不能删除它。具体的现象及部分源代码我会贴在下面,不知道有没有好汉知道这是怎么回事呢?
[mw_shl_code=applescript,true]void CreateKeyboard(WindowElem window)
{
        /*
        **        此函数说明:
                1.此函数不需要保存LastHwin参数,也不需要删除上一个窗口
                2.需要保存的是keyboardID,在退出小键盘编辑状态的时候删除这个窗口,并退回之前的窗口
        */
        WM_HWIN hWin;

        //WM_DeleteWindow(LastHwin);      //1.删除原窗口
        hWin = WM_CreateWindow(window.x, window.y, window.width, window.height, WM_CF_SHOW, NULL, 0);
        //LastHwin = hWin;
        WM_SelectWindow(hWin);
        //GUI_SetBkColor(window.bgkColor);    //2.设置清屏背景色
        //GUI_Clear();                                   //3.清屏
}

void showKeyboard(int WindowID)
{
        WindowList *we = myWindowList->next;
        NewWindowID = WindowID;
        while (we->data.number != WindowID)   we = we->next;
        if (we)
        {
                CreateKeyboard(we->data);
                showKeyboardCell(we->data);
        }
}[/mw_shl_code]
[mw_shl_code=applescript,true]void showKeyboardCell(WindowElem window)
{
        /*
        **        此函数说明:
        1.使用此函数显示小键盘的按钮、字符、edit、背景图片
        */
        NumberList *numberList = window.num->next;
        ButtonList *buttonList = window.button->next;
        ImageList *imageList = window.image->next;
        StringList *stringList = window.str->next;
        int curCellID = 0, haveFind = 0;

        while (numberList || buttonList || imageList || stringList)
        {
                if (numberList && haveFind == 0)
                {
                        if (curCellID == numberList->data.cellID)
                        {
                                showNumber(*numberList);
                                numberList = numberList->next;
                                haveFind = 1;
                                curCellID++;
                        }
                }
                if (buttonList && haveFind == 0)
                {
                        if (curCellID == buttonList->data.cellID)
                        {
                                showButton(*buttonList);
                                buttonList = buttonList->next;
                                haveFind = 1;
                                curCellID++;
                        }
                }
                if (imageList && haveFind == 0)
                {
                        if (curCellID == imageList->data.cellID)
                        {
                                showImage(*imageList);
                                imageList = imageList->next;
                                haveFind = 1;
                                curCellID++;
                        }
                }
                if (stringList && haveFind == 0)
                {
                        if (curCellID == stringList->data.cellID)
                        {
                                showString(*stringList);
                                stringList = stringList->next;
                                haveFind = 1;
                                curCellID++;
                        }
                }
                if (haveFind == 0)  curCellID++;
                else   haveFind = 0;
        }
}[/mw_shl_code]
void showNumber(NumberList numberList)
{
        //显示的字符要跟随寄存器值变化,首先需要获取寄存器值
        DrawEdit(numberList.data.cellID, numberList.data.x, numberList.data.y, numberList.data.width,numberList.data.height,numberList.data.font,numberList.data.fontcolor,numberList.data.fontsize,numberList.data.bgkColor,numberList.data.NumberType,numberList.data.m_numFormat,numberList.data.RegType,numberList.data.RegID,numberList.data.keyboard);
}

void DrawEdit(int cellID, int x, int y, int width, int height, int font, int fontColor, int fontSize, int bgkColor, int numberType, int M_numFormat, int RegType, int RegID, int keyboard)
{
        /*
        **        函数说明:
                1.字体暂时使用等宽字体
                2.显示的格式使用文本,可以使用sprintf函数将数值转换成文本显示出来
                3.句柄的动态创建通过将cellID的类型强制转换成EDIT_Handle
                4.将寄存器的值读出来赋给value
        */
        char buf[50];
        char value = 0;
        EDIT_Handle hEdit;
       
        hEdit = EDIT_CreateEx(x, y, width, height, LastHwin, WM_CF_SHOW, 0, cellID, 15);        //暂时只支持输入、显示15个字符
        sprintf(buf, "%d", value);                //将value转换成字符串的形式,以便使用
        EDIT_SetText(hEdit, buf);                //这里需要获取寄存器数值,在此之前还需要使用sprintf函数将数值转换成文本
        EDIT_SetFont(hEdit, &GUI_Font8x16x2x2);        //暂时使用这个字体,后期做成宏定义
        EDIT_SetTextColor(hEdit, EDIT_CI_DISABLED, (GUI_COLOR)fontColor);
        EDIT_SetBkColor(hEdit, EDIT_CI_DISABLED, (GUI_COLOR)bgkColor);
}



未清屏

未清屏

清屏

清屏

最佳答案

查看完整内容[请看2#楼]

已经自行解决,函数: [mw_shl_code=applescript,true]EDIT_CreateEx(x, y, width, height, LastKeyboard, WM_CF_SHOW, 0, cellID, 15);[/mw_shl_code] 参数LastKeyboard给错了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2015-7-16
在线时间
51 小时
 楼主| 发表于 2017-7-23 16:23:27 | 显示全部楼层
已经自行解决,函数:
[mw_shl_code=applescript,true]EDIT_CreateEx(x, y, width, height, LastKeyboard, WM_CF_SHOW, 0, cellID, 15);[/mw_shl_code]
参数LastKeyboard给错了。
回复

使用道具 举报

9

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2015-7-16
在线时间
51 小时
 楼主| 发表于 2017-7-23 16:25:03 | 显示全部楼层
清屏操作跟不清屏操作的区别是在函数CreateKeyboard()上面,这个函数在第一个代码段内引用。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-7-24 00:32:11 | 显示全部楼层
帮顶
回复

使用道具 举报

25

主题

135

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
404
金钱
404
注册时间
2016-8-23
在线时间
50 小时
发表于 2017-9-17 21:46:55 | 显示全部楼层
请问你那个键盘是怎么弄得?
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2019-4-29
在线时间
18 小时
发表于 2020-6-8 09:59:47 | 显示全部楼层
有没有源码分享下,最近也在学习,谢谢
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 15:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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