硬汉嵌入式论坛

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

[emWin] 帮忙看下,实在搞不定

[复制链接]

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
发表于 2017-5-8 15:09:04 | 显示全部楼层 |阅读模式
QQ截图20170508150041.png QQ截图20170508150132.png

这个是在上面那个官方例程基础上修改的。
目的是要把屏莫左边的那个图形显示到这个LIGHTRED框内。这个框是一个窗口控件。
还是上源码吧,看看是哪里的问题,搞了半天就是不显示。

怎么上传不为文件呢?
那只能贴这里了:

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
{
    { WINDOW_CreateIndirect, "", 0, 200, 60, 320, 280, 0, 0, 0 },

};

static GUI_RECT Rect = {0, 130, 100, 180};

static void memdev_draw(int Delay)
{
  GUI_SetPenSize(5);
  GUI_SetColor(GUI_RED);
  GUI_DrawLine(Rect.x0 + 3, Rect.y0 + 3, Rect.x1 - 3, Rect.y1 - 3);
  GUI_Delay(Delay);
  GUI_SetColor(GUI_GREEN);
  GUI_DrawLine(Rect.x0 + 3, Rect.y1 - 3, Rect.x1 - 3, Rect.y0 + 3);
  GUI_Delay(Delay);
  GUI_SetColor(GUI_WHITE);
  GUI_SetFont(&GUI_FontComic24B_ASCII);
  GUI_SetTextMode(GUI_TM_TRANS);
  GUI_DispStringInRect("Closed", &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER);
  GUI_Delay(Delay);
}

static void demo_mem_dev(void)
{
  int i;

#if 1
  h_memdev = GUI_MEMDEV_Create(0, 0, 800, 480);
#else
  h_memdev = GUI_MEMDEV_Create(Rect.x0, Rect.y0, Rect.x1 - Rect.x0, Rect.y1 - Rect.y0);
#endif

  GUI_MEMDEV_Select(h_memdev);
  memdev_draw(0);

  GUI_MEMDEV_Select(0);
}

static void _cbDialog(WM_MESSAGE *pMsg)
{
  WM_HWIN          hWin;
  int              NCode;
  int              Id;
   
  switch (pMsg->MsgId)
    {
      case WM_INIT_DIALOG:
    {
             WINDOW_SetBkColor(pMsg->hWin,GUI_LIGHTRED);
            
             memdev_draw(0);
                          
             demo_mem_dev();
       }
    break;
      
      case WM_PAINT:
      {
            GUI_MEMDEV_CopyToLCDAt(h_memdev, 240, 100);

    }
    break;
   
          default:
        WM_DefaultProc(pMsg);
    break;
  }
}

void MainTask(void)
{
    WM_HWIN h_win_mem;
   
  GUI_Init();
   
    WM_SetCreateFlags(WM_CF_MEMDEV);
   
    h_win_mem = GUI_CreateDialogBox(_aDialogCreate,
                                                GUI_COUNTOF(_aDialogCreate),
                                                _cbDialog,
                                              WM_HBKWIN,
                                              0, 0);

    while(1)
    {        
        GUI_Delay(100);
    }
}
回复

使用道具 举报

17

主题

63

回帖

114

积分

初级会员

积分
114
发表于 2017-5-8 15:36:22 | 显示全部楼层
将WM_SetCreateFlags(WM_CF_MEMDEV); 这句话放在while(1)的上面
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-5-8 17:15:29 | 显示全部楼层

回 ssis909 的帖子

ssis909:
将WM_SetCreateFlags(WM_CF_MEMDEV); 这句话放在while(1)的上面
还真是啊,按你说的改了下就有了
QQ截图20170508171305.png

这是什么道理?是因为放在前面的话影响到了这个窗口的建立?
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-5-8 18:02:52 | 显示全部楼层

回 ssis909 的帖子

ssis909:将WM_SetCreateFlags(WM_CF_MEMDEV); 这句话放在while(1)的上面 (2017-05-08 15:36) 
  GUI_Init();
   
    WM_SetCreateFlags(WM_CF_MEMDEV);    //在此设置不会有显示在框内
   
    h_win_mem = GUI_CreateDialogBox(_aDialogCreate,
                                                GUI_COUNTOF(_aDialogCreate),
                                                _cbDialog,
                                              WM_HBKWIN,
                                              0, 0);
   
    WM_DisableMemdev(h_win_mem);

//    WM_SetCreateFlags(WM_CF_MEMDEV);    //在此设置

    while(1)
    {        
        GUI_Delay(100);
    }

这样也可以显示了。
回复

使用道具 举报

17

主题

63

回帖

114

积分

初级会员

积分
114
发表于 2017-5-8 20:03:14 | 显示全部楼层

回 jplzl10000 的帖子

jplzl10000:  GUI_Init();
    
    WM_SetCreateFlags(WM_CF_MEMDEV);    //在此设置不会有显示在框内
    
....... (2017-05-08 18:02) 
问下,这样的话,窗口重绘时会闪烁啊
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-5-8 21:16:14 | 显示全部楼层

回 ssis909 的帖子

ssis909:问下,这样的话,窗口重绘时会闪烁啊 (2017-05-08 20:03) 
哇,你真神啊,还是你试了会闪烁?
我这模拟器和实际上屏测试都是会有一点点闪烁的。
都不知道是什么原因造成的。

有没有解决办法呀?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-15 07:04 , Processed in 0.235873 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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