硬汉嵌入式论坛

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

[emWin] emwin调用翻转无效。

[复制链接]

45

主题

70

回帖

205

积分

高级会员

积分
205
发表于 2018-12-17 15:46:17 | 显示全部楼层 |阅读模式
  1. static void rt_emwin_demo_entry(void *parameter)
  2. {   
  3.         GUI_Init();
  4.         /*
  5.          关于多缓冲和窗口内存设备的设置说明
  6.            1. 使能多缓冲是调用的如下函数,用户要在LCDConf_Lin_Template.c文件中配置了多缓冲,调用此函数才有效:
  7.                   WM_MULTIBUF_Enable(1);
  8.            2. 窗口使能使用内存设备是调用函数:WM_SetCreateFlags(WM_CF_MEMDEV);
  9.            3. 如果emWin的配置多缓冲和窗口内存设备都支持,二选一即可,且务必优先选择使用多缓冲,实际使用
  10.                   STM32F429BIT6 + 32位SDRAM + RGB565/RGB888平台测试,多缓冲可以有效的降低窗口移动或者滑动时的撕裂
  11.                   感,并有效的提高流畅性,通过使能窗口使用内存设备是做不到的。
  12.            4. 所有emWin例子默认是开启三缓冲。
  13.         */
  14.         WM_MULTIBUF_Enable(1);
  15.         GUI_SetOrientation(GUI_MIRROR_X|GUI_MIRROR_Y);
  16.         /* 设置桌面窗口的回调函数 */
  17.         WM_SetCallback(WM_HBKWIN,_cbBkWindow);
  18.        
  19.         Demo_Win = WM_CreateWindow(0,0,479,271,WM_CF_SHOW,_cbDemoWindow,0);
  20.          

  21.         while(1)
  22.         {
  23.                 //_DemoShowColorBar();
  24.                 GUI_Delay(1000);
  25.         }
  26. }
复制代码
,_cbDemoWindow中的WM_PAINT中进行了显示_DemoShowColorBar();操作,但是并没有翻转过来,是哪里出错了??
谢谢大家!


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2018-12-17 15:48:58 | 显示全部楼层
_DemoShowColorBar里面的内容是什么
回复

使用道具 举报

45

主题

70

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-12-17 15:59:11 | 显示全部楼层
eric2013 发表于 2018-12-17 15:48
_DemoShowColorBar里面的内容是什么
  1. static void _DemoShowColorBar(void)
  2. {
  3.         GUI_RECT Rect;
  4.         int      yStep;
  5.         int      i;
  6.         int      j;
  7.         int      xSize;
  8.         int      ySize;
  9.         int      NumBars;
  10.         int      NumColors;

  11.         xSize = LCD_GetXSize();
  12.         ySize = LCD_GetYSize();
  13.        
  14.         NumColors = GUI_COUNTOF(_aBarData);
  15.         for (i = NumBars = 0, NumBars = 0; i < NumColors; i++)
  16.         {
  17.                 NumBars += _aBarData[i].NumBars;
  18.         }
  19.         yStep = (ySize - Y_START) / NumBars;
  20.        
  21.         Rect.x0 = 0;
  22.         Rect.x1 = X_START - 1;
  23.         Rect.y0 = Y_START;
  24.         GUI_SetFont(&GUI_Font8x16);
  25.         for (i = 0; i < NumColors; i++)
  26.         {
  27.                 Rect.y1 = Rect.y0 + yStep * _aBarData[i].NumBars - 1;
  28.                 GUI_DispStringInRect(_aBarData[i].s, &Rect, GUI_TA_LEFT | GUI_TA_VCENTER);
  29.                 Rect.y0 = Rect.y1 + 1;
  30.         }

  31.         Rect.x0 = X_START;
  32.         Rect.x1 = xSize - 1;
  33.         Rect.y0 = Y_START;
  34.         for (i = 0; i < NumColors; i++)
  35.         {
  36.                 for (j = 0; j < _aBarData[i].NumBars; j++)
  37.                 {
  38.                         Rect.y1 = Rect.y0 + yStep - 1;
  39.                         GUI_DrawGradientH(Rect.x0, Rect.y0, Rect.x1, Rect.y1, _aColorStart[j], _aBarData[i].Color);
  40.                         Rect.y0 = Rect.y1 + 1;
  41.                 }
  42.         }
  43. }
复制代码

例程里的showcolorbar
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2018-12-18 01:43:27 | 显示全部楼层

你发的这部分代码看着没问题,发送稍微完整的程序,仅emWin部分,我在模拟器上测试下看看。
回复

使用道具 举报

45

主题

70

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-12-18 09:03:20 | 显示全部楼层
本帖最后由 chinashaoshu 于 2018-12-18 09:18 编辑
eric2013 发表于 2018-12-18 01:43
你发的这部分代码看着没问题,发送稍微完整的程序,仅emWin部分,我在模拟器上测试下看看。

谢谢了 硬汉老师,是我粗心,把GUIConf.c中的GUI_USE_EXRAM定义为0了,导致没有使用SDRAM,使用SDRAM就好了。!! 另外我是移植到了rt_thread上了,我发现这样弄(就是GUI_Init和窗口创建函数分开写)就黑屏,不调用_cbdemowin了。这是啥问题啊,正常吗!
static void rt_emwin_demo_entry(void *parameter)
{   

        WM_SetCallback(WM_HBKWIN,_cbBkWindow);
        /* 设置桌面窗口的回调函数 */
        SetDesktopColor();
        Demo_Win = WM_CreateWindow(0,0,480,272,WM_CF_SHOW,_cbDemoWindow,0);
        DemoWin_Timer = WM_CreateTimer(Demo_Win, 0, 500, 0);
        
        while(1)
        {
                GUI_Exec();
                GUI_X_Delay(1000);
        }
}

int rt_emwin_demo_init(void)
{

        rt_thread_t tid;
        GUI_Init();
        GUI_SetOrientation(GUI_MIRROR_X|GUI_MIRROR_Y);
        /*
         关于多缓冲和窗口内存设备的设置说明
           1. 使能多缓冲是调用的如下函数,用户要在LCDConf_Lin_Template.c文件中配置了多缓冲,调用此函数才有效:
                  WM_MULTIBUF_Enable(1);
           2. 窗口使能使用内存设备是调用函数:WM_SetCreateFlags(WM_CF_MEMDEV);
           3. 如果emWin的配置多缓冲和窗口内存设备都支持,二选一即可,且务必优先选择使用多缓冲,实际使用
                  STM32F429BIT6 + 32位SDRAM + RGB565/RGB888平台测试,多缓冲可以有效的降低窗口移动或者滑动时的撕裂
                  感,并有效的提高流畅性,通过使能窗口使用内存设备是做不到的。
           4. 所有emWin例子默认是开启三缓冲。
        */
        WM_MULTIBUF_Enable(1);
  tid = rt_thread_create("mygui",
        rt_emwin_demo_entry, RT_NULL,
        2048, 25, 200);

    if (tid != RT_NULL)
        rt_thread_startup(tid);
    return 0;
}
INIT_APP_EXPORT(rt_emwin_demo_init);
回复

使用道具 举报

45

主题

70

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-12-18 16:27:35 | 显示全部楼层
传一个移植好的基于rt_thread3.1.1的移植好的。uart,sdram,lcd引脚和V6板子有些区别。

stm32f429.rar

1.88 MB, 下载次数: 21

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-17 17:12 , Processed in 0.248972 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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