OpenEdv-开源电子网

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

emWin中EDIT的光标闪烁不成功

[复制链接]

48

主题

135

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2017-8-29
在线时间
89 小时
发表于 2018-1-5 13:27:05 | 显示全部楼层 |阅读模式
1金钱
正在使用emWin,在实现功能的基础上使界面更接近日常使用。想在EDIT输入时,光标周期性闪烁,看了一下官方的例子只是添加了一句  EDIT_EnableBlink(hEdit, 300, 1);  但是我自己仿真时,添加这一句 EDIT_EnableBlink(hEdit, 300, 1);编译器报错:c:\users\administrator\desktop\ui_test\ui_test_08.c(233) : warning C4013: 'EDIT_EnaBleBlink' undefined; assuming extern returning int.  但是我已经将 EDIT.h 头文件加入了呀。

然后在探索者开发板上添加该语句,编译通过。但是没有闪烁!。

求指教!!!

最佳答案

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

测试环境:"探索者开发板" 随意一个emWin测试程序中,将GUIDRV_Template.c文件中static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) 修改如下(参考STemWin源码修改): static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) { LCD_PIXELINDEX PixelIndex; int x; PixelIndex = LCD__GetColorIndex(); if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) { ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

48

主题

135

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2017-8-29
在线时间
89 小时
 楼主| 发表于 2018-1-5 13:27:06 | 显示全部楼层
测试环境:"探索者开发板"
随意一个emWin测试程序中,将GUIDRV_Template.c文件中static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) 修改如下(参考STemWin源码修改):
static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1)
{
        LCD_PIXELINDEX  PixelIndex;
  int x;

  PixelIndex = LCD__GetColorIndex();
  if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR)
        {
    for (; y0 <= y1; y0++)
                {
      for (x = x0; x <= x1; x++)
                        {
        _XorPixel(pDevice, x, y0);
      }
    }
  }
        else
        {
    for (; y0 <= y1; y0++) {
      for (x = x0; x <= x1; x++) {
        _SetPixelIndex(pDevice, x, y0, PixelIndex);
      }
    }
  }
       
//                LCD_Fill(x0, y0, x1, y1, LCD_COLORINDEX);
}
之后光标就可以闪烁,为什么原子使用LCD_Fill(...)函数导致光标不闪烁的问题就不知道了!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-1-6 01:40:49 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
177
金钱
177
注册时间
2018-8-20
在线时间
25 小时
发表于 2019-5-28 16:59:54 | 显示全部楼层
照着楼主的方法,光标可以闪烁了,但是屏幕刷新起来非常慢!我用的板子是mini
回复

使用道具 举报

1

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2017-7-1
在线时间
79 小时
发表于 2019-7-31 12:29:41 | 显示全部楼层
下面改法速度不变  光标也闪烁
修改GUIRV_Template.c中的 _FillRect
/*******************************
*
*       _FillRect
*/
static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {
        int x;

  if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) {
                for (; y0 <= y1; y0++) {
      for (x = x0; x <= x1; x++) {
        _XorPixel(pDevice, x, y0);
      }
    }
  } else {
                LCD_Fill(x0,y0,x1,y1,LCD_COLORINDEX);//在else中添加填充函数即可
  }
}
回复

使用道具 举报

1

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2017-7-1
在线时间
79 小时
发表于 2019-7-31 12:31:14 | 显示全部楼层
gtcg 发表于 2019-5-28 16:59
照着楼主的方法,光标可以闪烁了,但是屏幕刷新起来非常慢!我用的板子是mini

修改GUIRV_Template.c中的 _FillRect
/*******************************
*
*       _FillRect
*/
static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {
        int x;

  if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) {
                for (; y0 <= y1; y0++) {
      for (x = x0; x <= x1; x++) {
        _XorPixel(pDevice, x, y0);
      }
    }
  } else {
                LCD_Fill(x0,y0,x1,y1,LCD_COLORINDEX);//在else中添加填充函数即可
  }
}



试试这样速度有没有快一点
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2019-5-25
在线时间
45 小时
发表于 2020-1-20 10:44:09 | 显示全部楼层
厉害!
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2019-8-20
在线时间
59 小时
发表于 2021-1-2 13:31:32 | 显示全部楼层
5楼实测是最优解,牛逼!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 09:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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