硬汉嵌入式论坛

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

[emWin] swipelist控件问题

[复制链接]

5

主题

16

回帖

31

积分

新手上路

积分
31
发表于 2022-8-24 16:47:38 | 显示全部楼层 |阅读模式
本帖最后由 Ronin 于 2022-8-24 17:38 编辑

该控件无法显示在12864上么,用vs可以仿真出来,但是烧录至单片机无法进行显示(显示黑屏)。f103vct6+ssd1309 12864.
库是STemWin_CM3_wc16.a,用裸机跑的。
帮忙分析分析是什么原因。
附上代码:
static void _cbDialog_Sys(WM_MESSAGE* pMsg) {
    WM_HWIN hItem, hAttachItem;
    int     NCode;
    int     Id;
    // USER START (Optionally insert additional variables)
    // USER END

    switch (pMsg->MsgId) {
    case WM_INIT_DIALOG:
        //
        // Initialization of 'System'
        //
        hItem = pMsg->hWin;
        WINDOW_SetBkColor(hItem, GUI_MAKE_COLOR(0x00000000));
        //
        // Initialization of 'Swipelist'
        //
        hItem = WM_GetDialogItem(pMsg->hWin, ID_SWIPELIST_0);
        WM_MOTION_SetMoveable(hItem, WM_CF_MOTION_Y, 1);                                                         //给滑动列表打开移动功能
        SWIPELIST_SetFont(hItem, SWIPELIST_FI_ITEM_HEADER, GUI_FONT_10_1);                         //设置字体
        SWIPELIST_SetFont(hItem, SWIPELIST_FI_ITEM_TEXT, GUI_FONT_8_1);       
        SWIPELIST_SetBkColor(hItem, SWIPELIST_CI_BK_ITEM_UNSEL, GUI_BLACK);                    //设置背景颜色
        SWIPELIST_SetBkColor(hItem, SWIPELIST_CI_BK_ITEM_SEL, GUI_WHITE);
        SWIPELIST_SetBkColor(hItem, SWIPELIST_CI_BK_SEP_ITEM, GUI_BLACK);
        SWIPELIST_SetTextColor(hItem, SWIPELIST_CI_ITEM_TEXT_SEL, GUI_BLACK);                //设置文本颜色
        SWIPELIST_SetTextColor(hItem, SWIPELIST_CI_ITEM_TEXT_UNSEL, GUI_WHITE);
        SWIPELIST_SetTextColor(hItem, SWIPELIST_CI_ITEM_HEADER_UNSEL, GUI_WHITE);   //设置表头文本(第一个文本)的颜色
        SWIPELIST_SetTextColor(hItem, SWIPELIST_CI_ITEM_HEADER_SEL, GUI_BLACK);

        /*添加列表项目和项目的选项及文本*/
        /*分隔项目0*/
        SWIPELIST_AddSepItem(hItem,"SYSTEM", 15); //项目,并添加分隔符项目文本
        SWIPELIST_AddItem(hItem,"KEY", 20);
        SWIPELIST_AddItem(hItem,"SENS", 15);
        SWIPELIST_AddItem(hItem,"CPOS", 15);
        SWIPELIST_AddItem(hItem,"VLIM", 15);
        SWIPELIST_AddItem(hItem,"ILIM", 15);
        SWIPELIST_AddItem(hItem,"PLIM", 15);
        SWIPELIST_AddItem(hItem,"FART", 15);
        SWIPELIST_AddItem(hItem,"     ", 15);

        /*往列表添加子控件*/
        /*子控件-KEY*/
        hAttachItem = CHECKBOX_CreateEx(0,0,15,15, 0, WM_CF_SHOW,0, ID_CHECKBOX_0);
        SWIPELIST_ItemAttachWindow(hItem, 1, hAttachItem, 80, 2);
        /*子控件-SENS*/
        hAttachItem = DROPDOWN_CreateEx(0, 30, 60, 0, hItem, WM_CF_SHOW,0, ID_DROPDOWN_0);
        SWIPELIST_ItemAttachWindow(hItem, 2, hAttachItem, 90, 15);
        /*子控件-CPOS*/
        /*子控件-VLIM*/
        /*子控件-ILIM*/
        /*子控件-PLIM*/
        /*子控件-FART*/


        // USER START (Optionally insert additional code for further widget initialization)
        // USER END
        break;
    case WM_NOTIFY_PARENT:
        Id = WM_GetId(pMsg->hWinSrc);
        NCode = pMsg->Data.v;
        switch (Id) {
                }
        break;
        // USER START (Optionally insert additional message handling)
        // USER END
    default:
        WM_DefaultProc(pMsg);
        break;
        }
}

仿真效果:
image.png
实际效果:
c4ab55cb101d9a792a8d5e318e8ff69.jpg
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115863
QQ
发表于 2022-8-25 10:56:02 | 显示全部楼层
难道是颜色识别错了,全部都被识别成了黑色。

另外可以升级到emWin库到最新版看看。
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2022-8-25 13:47:32 | 显示全部楼层
eric2013 发表于 2022-8-25 10:56
难道是颜色识别错了,全部都被识别成了黑色。

另外可以升级到emWin库到最新版看看。

我更换了另一个控件来实现,分配40*1024动态内存,只显示这个界面的时候,切换一次就会卡死,是什么原因呢。
代码如下:
static void _cbDialog_Sys(WM_MESSAGE* pMsg) {
    WM_HWIN hItem;
  int     NCode;
  int     Id;
  // USER START (Optionally insert additional variables)
  // USER END

  switch (pMsg->MsgId) {
  case WM_INIT_DIALOG:
    //
    // Initialization of 'System'
    //
    hItem = pMsg->hWin;
    WINDOW_SetBkColor(hItem, GUI_MAKE_COLOR(0x00000000));
    //
    // Initialization of 'SYSTEM'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_13);
    TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x00FFFFFF));
    TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
    TEXT_SetFont(hItem, GUI_FONT_13B_1);
    //
    // Initialization of 'Listbox'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTBOX_0);
    LISTBOX_AddString(hItem, "KEY          >");
    LISTBOX_AddString(hItem, "SENS        >");
    LISTBOX_AddString(hItem, "CPOS       >");
        LISTBOX_AddString(hItem, "SORT        >");
    LISTBOX_AddString(hItem, "VLIM        >");
    LISTBOX_AddString(hItem, "ILIM         >");
    LISTBOX_AddString(hItem, "PLIM        >");
    LISTBOX_AddString(hItem, "FMAT       >");
    LISTBOX_SetBkColor(hItem, LISTBOX_CI_UNSEL,GUI_BLACK);
    LISTBOX_SetBkColor(hItem, LISTBOX_CI_SELFOCUS, GUI_WHITE);
    LISTBOX_SetBkColor(hItem, LISTBOX_CI_SEL, GUI_BLACK);
    LISTBOX_SetTextColor(hItem, LISTBOX_CI_UNSEL, GUI_WHITE);
    LISTBOX_SetTextColor(hItem, LISTBOX_CI_SELFOCUS, GUI_BLACK);
    LISTBOX_SetTextColor(hItem, LISTBOX_CI_SEL, GUI_WHITE);
    //
    // Initialization of 'KEY'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_0);
    CHECKBOX_SetText(hItem, "ON");
    CHECKBOX_SetTextColor(hItem, GUI_MAKE_COLOR(0x00FFFFFF));
        WM_HideWindow(hItem);
    //
    // Initialization of 'SENS'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_RADIO_0);
    RADIO_SetTextColor(hItem, GUI_MAKE_COLOR(0x00FFFFFF));
    RADIO_SetText(hItem, "ON", 0);
    RADIO_SetText(hItem, "OFF", 1);
    RADIO_SetText(hItem, "AUTO", 2);
        WM_HideWindow(hItem);
    //
    // Initialization of 'SAVE'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
    BUTTON_SetSkinClassic(hItem);
    BUTTON_SetFont(hItem, GUI_FONT_8_1);
    BUTTON_SetFocusColor(hItem, GUI_WHITE);
    BUTTON_SetTextColor(hItem, BUTTON_CI_UNPRESSED, GUI_WHITE);
    BUTTON_SetBkColor(hItem, BUTTON_CI_UNPRESSED, GUI_BLACK);
    //
    // Initialization of 'QUIT'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
    BUTTON_SetSkinClassic(hItem);
    BUTTON_SetFont(hItem, GUI_FONT_8_1);
    BUTTON_SetFocusColor(hItem, GUI_WHITE);
    BUTTON_SetTextColor(hItem, BUTTON_CI_UNPRESSED, GUI_WHITE);
    BUTTON_SetBkColor(hItem, BUTTON_CI_UNPRESSED, GUI_BLACK);
    //
    // Initialization of 'CPOS'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_3);
    EDIT_SetText(hItem, "00");
    EDIT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
    EDIT_SetTextColor(hItem, EDIT_CI_ENABLED, GUI_MAKE_COLOR(0x00000000));
//        WM_HideWindow(hItem);
    //
    // Initialization of 'CPOS_Text'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_14);
    TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
    TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x00FFFFFF));
    TEXT_SetText(hItem, "0-10V");
//        WM_HideWindow(hItem);
    // USER START (Optionally insert additional code for further widget initialization)
    // USER END
    break;
  case WM_NOTIFY_PARENT:
    Id    = WM_GetId(pMsg->hWinSrc);
    NCode = pMsg->Data.v;
    switch(Id) {
    case ID_LISTBOX_0: // Notifications sent by 'Listbox'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_SEL_CHANGED:
        // USER START (Optionally insert code for reacting on notification message)
          switch (LISTBOX_GetSel(pMsg->hWinSrc))
        {
        case 0:
                        WM_ShowWindow(WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_0));
                        WM_HideWindow(WM_GetDialogItem(pMsg->hWin, ID_RADIO_0));
                        WM_HideWindow(WM_GetDialogItem(pMsg->hWin, ID_EDIT_3));
                        WM_HideWindow(WM_GetDialogItem(pMsg->hWin, ID_TEXT_14));
            break;
        case 1:
                        WM_ShowWindow(WM_GetDialogItem(pMsg->hWin, ID_RADIO_0));
                        WM_HideWindow(WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_0));
                        WM_HideWindow(WM_GetDialogItem(pMsg->hWin, ID_EDIT_3));
                        WM_HideWindow(WM_GetDialogItem(pMsg->hWin, ID_TEXT_14));               
            break;
                case 2:
            WM_ShowWindow(WM_GetDialogItem(pMsg->hWin, ID_EDIT_3));
                        WM_ShowWindow(WM_GetDialogItem(pMsg->hWin, ID_TEXT_14));
                        WM_HideWindow(WM_GetDialogItem(pMsg->hWin, ID_RADIO_0));
                        WM_HideWindow(WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_0));
            break;
         }
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    case ID_CHECKBOX_0: // Notifications sent by 'KEY'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_VALUE_CHANGED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    case ID_RADIO_0: // Notifications sent by 'SENS'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_VALUE_CHANGED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    case ID_BUTTON_0: // Notifications sent by 'SAVE'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    case ID_BUTTON_1: // Notifications sent by 'QUIT'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    case ID_EDIT_3: // Notifications sent by 'CPOS'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_VALUE_CHANGED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    // USER START (Optionally insert additional code for further Ids)
    // USER END
    }
    break;
  // USER START (Optionally insert additional message handling)
  // USER END
  default:
    WM_DefaultProc(pMsg);
    break;
        }
}
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2022-8-25 17:58:52 | 显示全部楼层
eric2013 发表于 2022-8-25 10:56
难道是颜色识别错了,全部都被识别成了黑色。

另外可以升级到emWin库到最新版看看。

版主,换了个最新的库,GUI_CM3_L。试了一下,swipelist控件能够正常显示,但是其余原本的界面就全部识别成了白色。emwin真的是越往里学越多坑,还麻烦版主帮我分析一下二楼卡死的原因。切换一次之后中断按键什么都失效,应该直接死机了。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115863
QQ
发表于 2022-8-26 10:46:06 | 显示全部楼层
Ronin 发表于 2022-8-25 17:58
版主,换了个最新的库,GUI_CM3_L。试了一下,swipelist控件能够正常显示,但是其余原本的界面就全部识别 ...

1、不行就将控件的皮肤色都关闭了,这个是在GUI_Init函数后就设置的。然后单独设置每个控件的背景色和前景色,这样应该就不会搞错了。颜色值就两种GUI_WHITE和GUI_BLACK

2、这个问题可以排查解决,先创建个最简单的测试。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-24 03:23 , Processed in 0.230720 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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