硬汉嵌入式论坛

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

[emWin] 关于emWin使用edit,multedit或者spinbox控件游标不闪烁问题解决办法

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
发表于 2015-6-25 16:57:15 | 显示全部楼层 |阅读模式
游标闪烁是指的如下所示情景:
1.gif

===========================================================
原因:
出现控件edit,multedit或者spinbox控件游标不闪烁的原因是因为底层驱动有个地方写的不完善所致。
解决办法如下:
第一步:打开V5开发板任意的emWin工程,如下图所示的位置:
1.png

第二步:修改这个函数为如下内容:

static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {
    LCD_PIXELINDEX ColorIndex;
    int x;

    if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR)
    {
        for (y = y0; y <= y1; y++)
        {
            for (x = x0; x <= x1; x++)
            {
                _XorPixel(pDevice, x, y);
            }
        }
    }
    else
    {
      /* 选择进行优化 */
    #if emWin_Optimize
        ColorIndex = LCD__GetColorIndex();
        if (g_ChipID == IC_8875)
        {
            RA8875_RTERect( x0,  y0,  x1,  y1,  ColorIndex);
        }
        else
        {
            ILI9488_FillRect(x0, y0, y1-y0+1, x1-x0+1, ColorIndex);
        }
    #else
        for (; y0 <= y1; y0++)
        {
            _DrawHLine(pDevice, x0, y0, x1);
        }
    #endif
    }
}
==============================================================
修改后即可解决游标不闪烁的问题。
另外就是游标闪烁有专门的设置函数,比如edit控件的是:EDIT_EnableBlink
回复

使用道具 举报

4

主题

64

回帖

76

积分

初级会员

积分
76
发表于 2015-6-25 18:03:45 | 显示全部楼层
以前遇到过,怎么翻手册都解决不了,原来是emwin的原因,感谢!!!
回复

使用道具 举报

3

主题

43

回帖

52

积分

初级会员

积分
52
发表于 2018-6-1 17:09:21 | 显示全部楼层
本帖最后由 lhb292 于 2018-6-1 17:11 编辑

    if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR)
    {
        for (y = y0; y <= y1; y++)
        {
            for (x = x0; x <= x1; x++)
            {
                _XorPixel(pDevice, x, y);
            }
        }
    }
QQ截图20180601170809.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
 楼主| 发表于 2018-6-2 01:38:42 | 显示全部楼层
lhb292 发表于 2018-6-1 17:09
if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR)
    {
        for (y = y0; y

已经修正。

之前论坛的从PW转到DZ后出现的。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
 楼主| 发表于 2018-6-2 01:38:44 | 显示全部楼层
lhb292 发表于 2018-6-1 17:09
if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR)
    {
        for (y = y0; y

已经修正。

之前论坛的从PW转到DZ后出现的。
回复

使用道具 举报

98

主题

356

回帖

650

积分

金牌会员

积分
650
发表于 2020-8-3 11:52:28 | 显示全部楼层
用的黑白屏,按照楼主的方式试过之后依然没有闪烁,后来仿真发现在执行函数_XorPixel时,读回的像素点是1,下发的还是1。
于是将_XorPixel函数里的_SetPixelIndex(pDevice, x, y, PixelIndex ^ IndexMask);改成_SetPixelIndex(pDevice, x, y, !PixelIndex);后闪烁正常。
当然这仅适用于黑白屏,彩屏这么操作显示不不可取的。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
 楼主| 发表于 2020-8-4 09:30:50 | 显示全部楼层
云琴箫龙 发表于 2020-8-3 11:52
用的黑白屏,按照楼主的方式试过之后依然没有闪烁,后来仿真发现在执行函数_XorPixel时,读回的像素点是1, ...

谢谢分享。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-15 05:05 , Processed in 0.242971 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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