硬汉嵌入式论坛

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

[emWin] 关于emwin不使用回调机制下的重绘操作执行方案的讨论

[复制链接]

11

主题

104

回帖

137

积分

初级会员

积分
137
发表于 2017-7-27 09:16:19 | 显示全部楼层 |阅读模式
在做触摸edit弹出小键盘的实验时,由于没有使用回调机制,只是定期使用函数”GUI_Exec();”进行更新,所以由此出现了一些问题。
主要是在触摸edit弹出小键盘后怎么返回的事情。现在虽然已经实现了重新显示小键盘弹出之前的界面,但我是直接重新绘制整个界面,如果后期加入背景图片的话,这样刷屏是不行的。
所以想问下各位好汉有什么更好的方式吗?至于删除小键盘界面的句柄,我试了下貌似不行,也许是我的“打开方式不对”?先谢过各位啦。部分代码我贴在下面:


  1. void FunctionTouchJudge(FunctionList functionList)
  2. {
  3.     /*
  4.     **    函数说明:
  5.         1.此函数用来判断触摸区域是不是在function范围
  6.         2.function按钮的功能:
  7.             0.切换窗口
  8.             3.小键盘输入
  9.             4.关闭窗口(小键盘是ENT键)
  10.     */
  11.     int xstart, ystart, xend, yend;
  12.     xstart = functionList.data.x;
  13.     ystart = functionList.data.y;
  14.     xend = functionList.data.width + xstart;
  15.     yend = functionList.data.height + ystart;
  16.     if (PID_INFO.y <= yend && PID_INFO.x <= xend &&
  17.         PID_INFO.y >= ystart && PID_INFO.x >= xstart &&
  18.         TouchCondition == 0)
  19.     {
  20.         switch (functionList.data.FunctionType)
  21.         {
  22.         case 0:
  23.             TouchCondition = 1;
  24.             showWindow(functionList.data.NextWindowID);
  25.             break;
  26.         case 1:
  27.             break;
  28.         case 2:
  29.             break;
  30.         case 3:
  31.             /*
  32.             **    此部分问题说明:
  33.                 1.需要写好另一个处理函数,此函数用来处理小键盘按键的输入信息
  34.                 2.在输入后使用函数传递到小键盘中间的edit中
  35.                 3.在使用ENT键(此时2017-7-25版本)时将edit中的数据从小键盘窗口传递到原窗口的edit上
  36.             */
  37.             break;
  38.         case 4:
  39.             /*
  40.             **    此部分问题说明:
  41.                 1.现在暂时做成了直接清屏显示原界面的方式,但是这种方式显示速度很慢,特别是后期加上背景图片后。现在有以下两个方案:
  42.                     1.删除小键盘窗口,这样做的话理论上只刷新被小键盘覆盖的那部分区域,具体怎么实施我并没有头绪,注释掉的那部分就是这个工作
  43.                     2.在小键盘关闭的时候只重绘窗口的一部分区域,这种做法在理论上也是可行的,但是具体怎么实施我也并没有深想
  44.                 2.实际上应该使用元件ID“3”来标记这个按键,因为这个按键同样是小键盘上面的按键,也就是说应该在上面case 3中执行此操作
  45.             */
  46.             TouchCondition = 1;
  47.             //WM_DeleteWindow(LastHwin);        //1.删除小键盘界面的句柄
  48.             //GUI_Exec();
  49.             //WM_InvalidateWindow(LastKeyboardHwin);
  50.             //WM_Exec();
  51.             //WM_Paint(LastHwin);               
  52.             showWindow(LastWindowID);            //2.直接显示原界面
  53.             break;
  54.         default:
  55.             break;
  56.         }
  57.     }
  58.     else
  59.     {
  60.         TouchCondition = 0;
  61.     }
  62. }
复制代码
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-7-27 10:10:23 | 显示全部楼层
一定要让窗口或者对话框自己去管理重绘,你的主程序大小循环里面,有且仅有一个GUI_Delay,GUI_Exec或者WM_Exec才行。

即如下这种形式
while(1)
{
    GUI_Delay(10)
}

要不你现在的程序,自己管理重绘,还是太麻烦了。
回复

使用道具 举报

11

主题

104

回帖

137

积分

初级会员

积分
137
 楼主| 发表于 2017-7-27 10:42:20 | 显示全部楼层

回 eric2013 的帖子

eric2013:一定要让窗口或者对话框自己去管理重绘,你的主程序大小循环里面,有且仅有一个GUI_Delay,GUI_Exec或者WM_Exec才行。

即如下这种形式
while(1)
{
....... (2017-07-27 10:10) 
先谢过硬汉哥。[s:138][s:138][s:138]
所以,我现在这样的方式简直就是无解= =
而且主循环里面使用滴答定时器了,每多少ms、s要处理别的事情,在ms级别上调用GUI_Exec。
对话框窗口重绘只能在使用GUIBuilder的情况下使用吗?
其实我现在考虑着这个问题先放一下..给后面接手的小伙伴处理,我得帮他们把基本功能全搭好才行..
另外,可能选择界面上的部分区域进行重绘的话不知道其可行性是怎么样的。我好像看到过这样的函数,大致应该是可以尝试下的。不过还是打算先放一下...先把其他的功能做出来好点。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-7-27 14:37:24 | 显示全部楼层

回 笔记本的自嘲 的帖子

笔记本的自嘲:先谢过硬汉哥。[s:138][s:138][s:138]
所以,我现在这样的方式简直就是无解= =
而且主循环里面使用滴答定时器了,每多少ms、s要处理别的事情,在ms级别上调用GUI_Exec。
对话框窗口重绘只能在使用GUIBuilder的情况下使用吗?
....... (2017-07-27 10:42) 
重绘就放在窗口或者对话框的WM_PAINT消息里面执行就行。
搞这个GUI的开发,框架还是很重要的,框架弄好了,工程的升级维护都非常方便。
回复

使用道具 举报

11

主题

104

回帖

137

积分

初级会员

积分
137
 楼主| 发表于 2017-7-27 15:54:06 | 显示全部楼层

回 eric2013 的帖子

eric2013:重绘就放在窗口或者对话框的WM_PAINT消息里面执行就行。
搞这个GUI的开发,框架还是很重要的,框架弄好了,工程的升级维护都非常方便。 (2017-07-27 14:37) 
谢谢硬汉哥的经验之谈,受教了!具体方案我跟成员再讨论下。
另外说一下安富莱的氛围是真的好。[s:149][s:149][s:149]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-15 13:54 , Processed in 0.244346 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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