EMWIN窗口創(chuàng)建通用布局及頁面創(chuàng)建

@TOC

索引頁面

索引頁面主要功能:

  • 創(chuàng)建26個(gè)字母按鈕作為首字母索引進(jìn)入交互口
  • 創(chuàng)建頁面后通過按鍵移動聚焦源哩,查找對應(yīng)的字符串添加到虛擬頁面層2顯示出來
/**
 *  @file GW_ItemIndex.c
 *
 *  @date 2020/5/19
 *
 *  @author aron566
 *
 *  @copyright None
 *
 *  @brief 參數(shù)列表索引展示
 *
 *  @details 文件編碼使用UTF-8 無BOM
 *
 *  @version V1.0
 */
#ifdef __cplusplus ///<use C compiler
extern "C" {
#endif
/** Includes -----------------------------------------------------------------*/
/* Private includes ----------------------------------------------------------*/
#include "GW_ItemIndex.h"
#include "DRV_LcdPar.h"

/** Private typedef ----------------------------------------------------------*/

/** Private macros -----------------------------------------------------------*/
#define ITEMINDEX_ID_WINDOW_0               (GUI_ID_USER + 0x00)
#define ITEMINDEX_ID_TITLE_L                (GUI_ID_USER + 1)
#define ITEMINDEX_ID_TITLE_M                (GUI_ID_USER + 2)
#define ITEMINDEX_ID_TITLE_R                (GUI_ID_USER + 3)
/*常用字段9個(gè)*/
#define ITEMINDEX_ID_ORIGIN_VA1_FIELD       (GUI_ID_USER + 4)/**< 起始控件ID*/
#define ITEMINDEX_VAL_FIELD_NUM_MAX         (9)/**< 最大控件數(shù)量*/                                        
#define ITEMINDEX_ID_VAL_MAX                (ITEMINDEX_ID_ORIGIN_VA1_FIELD+ITEMINDEX_VAL_FIELD_NUM_MAX-1)/**< 尾部控件ID*/
/*26個(gè)字母索引控件起始資源ID*/
#define ITEMINDEX_ID_ORIGIN_KEY_FIELD       (ITEMINDEX_ID_VAL_NUM_MAX + 1)/**< 起始控件ID*/
#define ITEMINDEX_KEY_FIELD_NUM_MAX         (26)/**< 最大控件數(shù)量*/
#define ITEMINDEX_ID_KEY_NUM_MAX            (ITEMINDEX_ID_ORIGIN_KEY_FIELD+ITEMINDEX_KEY_FIELD_NUM_MAX-1)/**< 尾部控件ID*/

/*層級信息*/
#define ITEMINDEX_KEY_LAYER                 (0U)/**< 字段層*/
#define ITEMINDEX_VALUE_LAYER               (ITEMINDEX_KEY_LAYER+1U)/**< 結(jié)果層*/
#define ITEMINDEX_PAGE_LAYER_MAX            (2U)/**< 頁面最大層級*/
/** Private constants --------------------------------------------------------*/
/** Public variables ---------------------------------------------------------*/

/** Private variables --------------------------------------------------------*/
static WM_HWIN MAINWin = 0;

/*多層級頁面信息*/
static ItemIndexPage_Typedef ItemIndexPage[ITEMINDEX_PAGE_LAYER_MAX];

/** Private function prototypes ----------------------------------------------*/
static void ItemIndexPage_Init(void);
static WM_HWIN CreateitemsChSearchWindow(void);
static void Mainwidow_Init(WM_MESSAGE *pMsg);           /**< 初始化主窗口*/
static void CreateTittle(WM_MESSAGE *pMsg);             /**< 建立標(biāo)題控件*/
static void CreateTimer(WM_MESSAGE *pMsg);              /**< 建立時(shí)間控件*/
static void CreateButton(WM_MESSAGE *pMsg);             /**< 建立按鈕控件*/
static void cbDialog(WM_MESSAGE *pMsg);                 /**< 初始化索引頁面*/
static void WidgetFocusUpdate(void);                    /**< 更新控件聚焦*/
static uint32_t Get_FocusWidgetOffset(void);            /**< 獲取已聚焦控件偏移*/
static char Get_Search_Char(void);                      /**< 獲取需索引的字段*/
static const char *Get_IndexStr(uint32_t index);
static const char *Get_WidgetStr(char ch ,uint32_t index);
static uint32_t Get_CurrentPage_Button_Num(void);
static void ItemIndexPage_ResLayerUpdate(void);
static uint32_t Calc_CurrentPage_WidgetNum(void);
static uint32_t Calc_CurrentWidgetOffsetInLayer(void);
static void ItemIndexPage_Forward(void);                /**< 頁面右翻頁*/
static void ItemIndexPage_Back(void);                   /**< 頁面左翻頁*/
static void ItemIndexPage_Reload(void);                 /**< 主窗口重繪*/
static void ItemIndexPage_Down(void);                   /**< 下移*/
static void ItemIndexPage_Up(void);                     /**< 上移*/
/** Private user code --------------------------------------------------------*/
/** Private application code -------------------------------------------------*/

/*******************************************************************************
*
*       Static code
*
********************************************************************************
*/
/*********************************************************************
*
*       _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { WINDOW_CreateIndirect, "WINDOW", ITEMINDEX_ID_WINDOW_0, 0, 0, UI_MAINWINDOW_WIDTH, UI_MAINWINDOW_HEIGHT, 0, 0x0, 0 }
};

/**
  ******************************************************************
  * @brief   建立主窗口
  * @param   [in]None
  * @retval  窗口句柄
  * @author  aron566
  * @version V1.0
  * @date    2020-5-18
  ******************************************************************
  */
static WM_HWIN CreateitemsChSearchWindow(void)
{
    return GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), cbDialog, WM_HBKWIN, 0, 0);
}

/**
  ******************************************************************
  * @brief   初始化索引頁面
  * @param   [in]WM_MESSAGE 窗口管理消息指針
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-18
  ******************************************************************
  */
static void cbDialog(WM_MESSAGE * pMsg)
{
    WM_EnableMemdev(pMsg->hWin);
    switch (pMsg->MsgId) 
    {
        case WM_INIT_DIALOG:
            /*初始化主窗口*/
            Mainwidow_Init(pMsg);
            /*創(chuàng)建標(biāo)題*/
            CreateTittle(pMsg);
            /*創(chuàng)建按鈕*/
            CreateButton(pMsg);
            /*創(chuàng)建定時(shí)器*/
            WM_CreateTimer(pMsg->hWin, 0, PAGE_TIMER_PERIOD, 0);    
            break;
        case WM_NOTIFY_PARENT:
            break;
        case GW_WM_KEY:
        case WM_KEY:
            break;
        case WM_TIMER:
            CreateTimer(pMsg);
            break;
        default:
            WM_DefaultProc(pMsg);
            break;
    }
}

/**
  ******************************************************************
  * @brief   初始化索引頁面定時(shí)器
  * @param   [in]WM_MESSAGE 窗口管理消息指針
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-18
  ******************************************************************
  */
static void CreateTimer(WM_MESSAGE * pMsg)
{
    WM_EnableMemdev(pMsg->hWin);
    /*重啟定時(shí)器*/
    WM_RestartTimer(pMsg->Data.v, PAGE_TIMER_PERIOD);

    /*顯示時(shí)間*/
    WM_HWIN hItem = WM_GetDialogItem(pMsg->hWin, ITEMINDEX_ID_TITLE_R);
    WM_EnableMemdev(hItem);
    char timeStr[10];
    TEXT_SetFont(hItem,GUI_FONT_16_1);
    GDT_get_current_time(timeStr);
    TEXT_SetText(hItem, timeStr);
}

/**
  ******************************************************************
  * @brief   頁面信息初始化
  * @param   [in]None
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static void ItemIndexPage_Init(void)
{
    memset(ItemIndexPage ,0 ,ITEMINDEX_PAGE_LAYER_MAX*sizeof(ItemIndexPage_Typedef));

    /*層1作為9個(gè)常用字段+26個(gè)字母索引層*/
    ItemIndexPage[ITEMINDEX_KEY_LAYER].PageType = ITEMINDEX_KEY_LAYER;
    ItemIndexPage[ITEMINDEX_KEY_LAYER].Widget_Num = (ARRAYNUM(Key_Search_Map))+ITEMINDEX_VAL_FIELD_NUM_MAX;
    ItemIndexPage[ITEMINDEX_KEY_LAYER].Widget_Offset = 0;
    ItemIndexPage[ITEMINDEX_KEY_LAYER].PageNum = (ARRAYNUM(Key_Search_Map)+ITEMINDEX_VAL_FIELD_NUM_MAX-1)/ITEM_INDEX_PAGE_BUTTON_NUM_MAX;/**<減1防止控件數(shù)量正好1頁而錯(cuò)誤的計(jì)算為2頁*/
    ItemIndexPage[ITEMINDEX_KEY_LAYER].CurrentPageNum = 0;
    ItemIndexPage[ITEMINDEX_KEY_LAYER].TaskResult = 0;
    ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = 1;/**< 默認(rèn)當(dāng)前層激活*/
    
    /*層2作為索引結(jié)果層*/
    ItemIndexPage[ITEMINDEX_VALUE_LAYER].PageType = ITEMINDEX_VALUE_LAYER;
    ItemIndexPage[ITEMINDEX_VALUE_LAYER].Widget_Num = 0;
    ItemIndexPage[ITEMINDEX_VALUE_LAYER].Widget_Offset = 0;
    ItemIndexPage[ITEMINDEX_VALUE_LAYER].PageNum = 0;
    ItemIndexPage[ITEMINDEX_VALUE_LAYER].CurrentPageNum = 0;
    ItemIndexPage[ITEMINDEX_VALUE_LAYER].TaskResult = 0;
    ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive = 0;
}

/**
  ******************************************************************
  * @brief   初始化主窗口
  * @param   [in]None
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-18
  ******************************************************************
  */
static void Mainwidow_Init(WM_MESSAGE * pMsg)
{
    WM_HWIN hItem = pMsg->hWin;
    WM_EnableMemdev(hItem);
    /*do something ...*/
}

/**
  ******************************************************************
  * @brief   初始化索引頁面標(biāo)題
  * @param   [in]WM_MESSAGE 窗口管理消息指針
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static void CreateTittle(WM_MESSAGE * pMsg)
{
    WM_HWIN hItem;
    WM_EnableMemdev(pMsg->hWin);

    /*左側(cè)標(biāo)題*/
    hItem = TEXT_CreateEx(ITEM_INDEX_PAGE_DEVICE_STATE_START_X, ITEM_INDEX_PAGE_TITLE_START_Y, ITEM_INDEX_PAGE_DEVICE_STATE_END_X, ITEM_INDEX_PAGE_TITLE_END_Y,
                                                    pMsg->hWin, WM_CF_SHOW, GUI_TA_VCENTER|GUI_TA_HCENTER ,ITEMINDEX_ID_TITLE_L ,"");
    WM_EnableMemdev(hItem);
    TEXT_SetBkColor(hItem, GUI_BK_TITLE);
    
    /*中部標(biāo)題*/
    hItem = TEXT_CreateEx(ITEM_INDEX_PAGE_TITLE_START_X, ITEM_INDEX_PAGE_TITLE_START_Y, ITEM_INDEX_PAGE_TITLE_END_X, ITEM_INDEX_PAGE_TITLE_END_Y,
                                                    pMsg->hWin, WM_CF_SHOW, GUI_TA_VCENTER|GUI_TA_HCENTER ,ITEMINDEX_ID_TITLE_M ,"字段表");
    WM_EnableMemdev(hItem);
    TEXT_SetBkColor(hItem, GUI_BK_TITLE);
    
    /*右側(cè)標(biāo)題*/
    hItem = TEXT_CreateEx(ITEM_INDEX_PAGE_CLOCK_START_X, ITEM_INDEX_PAGE_TITLE_START_Y, ITEM_INDEX_PAGE_CLOCK_END_X, ITEM_INDEX_PAGE_TITLE_END_Y,
                                                    pMsg->hWin, WM_CF_SHOW, GUI_TA_VCENTER|GUI_TA_HCENTER ,ITEMINDEX_ID_TITLE_R ,"");
    WM_EnableMemdev(hItem);
    TEXT_SetBkColor(hItem, GUI_BK_TITLE);

}

/**
  ******************************************************************
  * @brief   初始化索引頁面按鈕
  * @param   [in]WM_MESSAGE 窗口管理消息指針
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static void CreateButton(WM_MESSAGE * pMsg)
{
    WM_HWIN hItem;
    WM_EnableMemdev(pMsg->hWin);
    
    /*判斷當(dāng)前頁面可創(chuàng)建按鈕數(shù)目*/
    int ButtonNum = Get_CurrentPage_Button_Num();

    /*循環(huán)創(chuàng)建字母索引字段按鈕*/
    for(int i = 0; i < ButtonNum;i++)
    {
        /*建立按鈕*/
        hItem = BUTTON_CreateEx(ITEM_INDEX_PAGE_BUTTON_MULTI_RECT_H_X(i),ITEM_INDEX_PAGE_BUTTON_MULTI_RECT_Y_X(i), ITEM_INDEX_PAGE_BUTTON_WIDTH, ITEM_INDEX_PAGE_BUTTON_END_Y,
                                                        pMsg->hWin, WM_CF_SHOW, 0,ITEMINDEX_ID_ORIGIN_VA1_FIELD+i);
        WM_EnableMemdev(hItem);
        /*取消3D色*/
        BUTTON_SetSkinClassic(hItem);
        /*設(shè)定背景色*/
        BUTTON_SetBkColor(hItem ,BUTTON_CI_UNPRESSED ,Key_Search_Map[i%ITEMINDEX_KEY_FIELD_NUM_MAX].Color);
        /*設(shè)定前景色*/
        BUTTON_SetTextColor(hItem ,BUTTON_CI_UNPRESSED  ,GUI_WHITE);
        /*設(shè)置聚焦虛線色*/
        if(Key_Search_Map[i%ITEMINDEX_KEY_FIELD_NUM_MAX].Color == GUI_RED)
        {
            BUTTON_SetFocusColor(hItem ,GUI_BLACK);
        }
        else
        {
            BUTTON_SetFocusColor(hItem ,GUI_RED);
        }
        /*設(shè)置顯示內(nèi)容*/
        BUTTON_SetText(hItem, Get_IndexStr(i));
    }
    /*設(shè)定初始聚焦*/
    WidgetFocusUpdate();
}

/**
  ******************************************************************
  * @brief   更新頁面控件聚焦
  * @param   [in]None
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-21
  ******************************************************************
  */
static void WidgetFocusUpdate(void)
{
    /*判斷主窗口已建立*/
    if(MAINWin != 0)
    {
        WM_HWIN hItem = WM_GetDialogItem(MAINWin, ITEMINDEX_ID_ORIGIN_VA1_FIELD + Get_FocusWidgetOffset());
        WM_EnableMemdev(hItem);
        WM_SetFocus(hItem);
    }
}

/**
  ******************************************************************
  * @brief   獲取上次聚焦的索引字段踪蹬,轉(zhuǎn)換為首字符
  * @param   [in]None
  * @retval  首字符
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static char Get_Search_Char(void)
{
    char ch = 'A';
    uint32_t CurrentPage = ItemIndexPage[ITEMINDEX_KEY_LAYER].CurrentPageNum;
    uint32_t CurrentPageWidgetOffset = ItemIndexPage[ITEMINDEX_KEY_LAYER].Widget_Offset;
    /*打開字段索引層激活狀態(tài)*/
    uint32_t temp = ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive;
    ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = 1;
    uint32_t Widget_OffsetInLayer = Calc_CurrentWidgetOffsetInLayer();
    /*恢復(fù)狀態(tài)*/
    ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = temp;
    uint32_t Offset = 0;
    if(Widget_OffsetInLayer >= ITEMINDEX_VAL_FIELD_NUM_MAX)
    {
        Offset = CurrentPageWidgetOffset+((CurrentPage-1)*ITEM_INDEX_PAGE_BUTTON_NUM_MAX)+ITEM_INDEX_PAGE_BUTTON_NUM_MAX-ITEMINDEX_VAL_FIELD_NUM_MAX;
        ch += Offset;
        return ch;
    }
    return ch;
}

/**
  ******************************************************************
  * @brief   獲取當(dāng)前頁面,指定偏移控件所在字符串
  * @param   [in]ch 索引首部字段
  * @param   [in]index 當(dāng)前頁面所在偏移
  * @retval  字符串所在地址
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static const char *Get_WidgetStr(char ch ,uint32_t index)
{
    /*計(jì)算當(dāng)前控件在全部頁面的索引值*/
    uint32_t IN_ALLPAGE_WidgetIndex = ItemIndexPage[ITEMINDEX_VALUE_LAYER].CurrentPageNum==0?index:ItemIndexPage[ITEMINDEX_VALUE_LAYER].CurrentPageNum*ITEM_INDEX_PAGE_BUTTON_NUM_MAX+index;
    /*獲取指定字段拳喻,指定索引號的 字符串地址*/
    return Get_Special_Ch_Str(ch ,IN_ALLPAGE_WidgetIndex);
}

/**
  ******************************************************************
  * @brief   獲取當(dāng)前頁面,指定控件的字符串
  * @param   [in]在當(dāng)前頁面的控件號
  * @retval  字符串地址
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static const char *Get_IndexStr(uint32_t index)
{
    uint32_t CurrentPage = 0;
    /*字段層激活*/
    if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
    {
        if(ItemIndexPage[ITEMINDEX_KEY_LAYER].CurrentPageNum == 0)
        {
            if(index < ITEMINDEX_VAL_FIELD_NUM_MAX)
            {
                return Get_Special_Index_Str(index+1);
            }
            else
            {
                return Key_Search_Map[index-ITEMINDEX_VAL_FIELD_NUM_MAX].Str;
            }
        }
        else
        {
            CurrentPage = ItemIndexPage[ITEMINDEX_KEY_LAYER].CurrentPageNum;
            return Key_Search_Map[index+((CurrentPage-1)*ITEM_INDEX_PAGE_BUTTON_NUM_MAX)+ITEM_INDEX_PAGE_BUTTON_NUM_MAX-ITEMINDEX_VAL_FIELD_NUM_MAX].Str;
        }   
    }
    
    /*索引結(jié)果層激活*/
    if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
    {
        /*獲取索引的字段*/
        char ch = Get_Search_Char();
        return Get_WidgetStr(ch ,index);
    }
    return "";
}

/**
  ******************************************************************
  * @brief   獲取當(dāng)前層,當(dāng)前頁面秕豫,需繪制的按鈕總數(shù)
  * @param   [in]None
  * @retval  當(dāng)頁按鈕總數(shù)
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static uint32_t Get_CurrentPage_Button_Num(void)
{
    /*判斷當(dāng)前激活層*/

    /*字段層激活*/
    if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
    {
        return Calc_CurrentPage_WidgetNum();
    }
    
    /*索引結(jié)果層激活*/
    if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
    {
        /*更新索引層*/
        ItemIndexPage_ResLayerUpdate();
        return Calc_CurrentPage_WidgetNum();
    }
    return 0;
}

/**
  ******************************************************************
  * @brief   更新索引結(jié)果層,可創(chuàng)建控件數(shù)目抗愁,總頁數(shù)
  * @param   [in]None
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static void ItemIndexPage_ResLayerUpdate(void)
{
    static char Last_SerachCh = 0;
    /*獲取索引的字段*/
    char ch = Get_Search_Char();
    /*上次查詢不一致則重置當(dāng)前頁面號*/
    if(ch != Last_SerachCh)
    {
        Last_SerachCh = ch;
        ItemIndexPage[ITEMINDEX_VALUE_LAYER].CurrentPageNum = 0;
    }
    /*更新該字段在當(dāng)前層中數(shù)目*/
    ItemIndexPage[ITEMINDEX_VALUE_LAYER].Widget_Num = Get_Special_Ch_Num(ch);
    /*更新該字段總頁數(shù)*/
    ItemIndexPage[ITEMINDEX_VALUE_LAYER].PageNum = (Get_Special_Ch_Num(ch)-1)/ITEM_INDEX_PAGE_BUTTON_NUM_MAX;
}

/**
  ******************************************************************
  * @brief   計(jì)算當(dāng)前頁可建立控件數(shù)目
  * @param   [in]None
  * @retval  可創(chuàng)建數(shù)目
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static uint32_t Calc_CurrentPage_WidgetNum(void)
{
    uint32_t WidgetNum = 0;
    uint8_t CurrentLayer = 0;
    /*獲取當(dāng)前激活層*/
    if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
    {
        CurrentLayer = ITEMINDEX_KEY_LAYER;
    }
    else if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
    {
        CurrentLayer = ITEMINDEX_VALUE_LAYER;
    }   
    
    if(ItemIndexPage[CurrentLayer].IsActive)
    {
        /*判斷當(dāng)前頁面是否是最首頁*/
        if(0 == ItemIndexPage[CurrentLayer].CurrentPageNum)
        {
            WidgetNum = ItemIndexPage[CurrentLayer].Widget_Num>ITEM_INDEX_PAGE_BUTTON_NUM_MAX?ITEM_INDEX_PAGE_BUTTON_NUM_MAX:ItemIndexPage[CurrentLayer].Widget_Num;
        }
        else
        {
            /*不是首頁則判斷馁蒂,剩余頁呵晚,剩余數(shù)目*/
            /*獲取剩余控件數(shù)蜘腌,包含當(dāng)前頁*/
            WidgetNum = ItemIndexPage[CurrentLayer].Widget_Num-ItemIndexPage[CurrentLayer].CurrentPageNum*ITEM_INDEX_PAGE_BUTTON_NUM_MAX;
            /*限制繪制控件數(shù)目*/
            WidgetNum = WidgetNum>ITEM_INDEX_PAGE_BUTTON_NUM_MAX?ITEM_INDEX_PAGE_BUTTON_NUM_MAX:WidgetNum;
        }
        return WidgetNum;
    }
    return 0;
}

/**
  ******************************************************************
  * @brief   計(jì)算控件在當(dāng)前層中的偏移索引號
  * @param   [in]None
  * @retval  索引號
  * @author  aron566
  * @version V1.0
  * @date    2020-5-22
  ******************************************************************
  */
static uint32_t Calc_CurrentWidgetOffsetInLayer(void)
{
    uint32_t ret = 0;
    uint8_t CurrentLayer = 0;
    if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
    {
        CurrentLayer = ITEMINDEX_KEY_LAYER;
    }
    else if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
    {
        CurrentLayer = ITEMINDEX_VALUE_LAYER;
    }       
    else
    {
        return ret;
    }
    return (ItemIndexPage[CurrentLayer].CurrentPageNum*ITEM_INDEX_PAGE_BUTTON_NUM_MAX)+ItemIndexPage[CurrentLayer].Widget_Offset;
}


/**
  ******************************************************************
  * @brief   獲取當(dāng)前已激活層,當(dāng)前頁面聚焦控件所在偏移
  * @param   [in]None
  * @retval  聚焦控件在當(dāng)前頁面偏移
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static uint32_t Get_FocusWidgetOffset(void)
{
    /*字段層激活*/
    if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
    {
        return ItemIndexPage[ITEMINDEX_KEY_LAYER].Widget_Offset;
    }
    
    /*索引結(jié)果層*/
    if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
    {
        return ItemIndexPage[ITEMINDEX_VALUE_LAYER].Widget_Offset;
    }
    return 0;
}

/**
  ******************************************************************
  * @brief   左翻頁處理,或左移處理
  * @param   [in]None
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static void ItemIndexPage_Back(void)
{
    uint8_t CurrentLayer = 0;
    if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
    {
        CurrentLayer = ITEMINDEX_KEY_LAYER;
    }
    if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
    {
        CurrentLayer = ITEMINDEX_VALUE_LAYER;
    }
#if USE_NEXT_PAGE
    /*判斷是否是索引結(jié)果層*/
    if(ItemIndexPage[CurrentLayer].IsActive)
    {
        /*判斷是否是首頁,則不可翻頁*/
        if(ItemIndexPage[CurrentLayer].CurrentPageNum == 0)
        {
            return;
        }
        else
        {
            ItemIndexPage[CurrentLayer].CurrentPageNum -= 1;
            /*主窗口重繪*/
            ItemIndexPage_Reload();
        }
    }
#else
    /*字段層或索引層激活*/
    if(ItemIndexPage[CurrentLayer].IsActive)
    {
        /*判斷是否可以繼續(xù)左移*/
        if(ItemIndexPage[CurrentLayer].Widget_Offset >= ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX)
        {
            ItemIndexPage[CurrentLayer].Widget_Offset -= ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX;
            /*更新聚焦*/
            WidgetFocusUpdate();
            return;
        }
        else
        {
            /*判斷是否是一頁,則不可翻頁*/
            if(ItemIndexPage[CurrentLayer].CurrentPageNum == 0)
            {
                /*改為上移動*/
                ItemIndexPage_Up();
                /*更新聚焦*/
                WidgetFocusUpdate();
                return;
            }
            else
            {
                if(ItemIndexPage[CurrentLayer].CurrentPageNum > 0)
                {
                    /*向左翻頁*/
                    ItemIndexPage[CurrentLayer].CurrentPageNum -= 1;
                    /*控件聚焦到最右側(cè)*/
                    ItemIndexPage[CurrentLayer].Widget_Offset +=  ((ITEM_INDEX_PAGE_BUTTON_H_NUM_MAX-1)*ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX);
                    /*限制超出可聚焦控件數(shù)*/
                    uint32_t temp = Get_CurrentPage_Button_Num();
                    ItemIndexPage[CurrentLayer].Widget_Offset = temp>ItemIndexPage[CurrentLayer].Widget_Offset?ItemIndexPage[CurrentLayer].Widget_Offset:temp;
                }
            }
        }   
        /*主窗口重繪*/
        ItemIndexPage_Reload();     
    }   
#endif
}

/**
  ******************************************************************
  * @brief   右翻頁處理饵隙,或右移處理
  * @param   [in]None
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static void ItemIndexPage_Forward(void)
{
    uint8_t CurrentLayer = 0;
    if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
    {
        CurrentLayer = ITEMINDEX_KEY_LAYER;
    }
    if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
    {
        CurrentLayer = ITEMINDEX_VALUE_LAYER;
    }
#if USE_NEXT_PAGE
    /*判斷是否是索引結(jié)果層*/
    if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
    {
        /*判斷是否是尾頁,則不可翻頁*/
        if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].CurrentPageNum == ItemIndexPage[ITEMINDEX_VALUE_LAYER].PageNum)
        {
            return;
        }
        else
        {
            ItemIndexPage[ITEMINDEX_VALUE_LAYER].CurrentPageNum += 1;
            /*主窗口重繪*/
            ItemIndexPage_Reload();
        }
    }
#else
    /*字段層或索引層激活*/
    if(ItemIndexPage[CurrentLayer].IsActive)
    {
        /*判斷是否可以繼續(xù)右移*/
        if((ItemIndexPage[CurrentLayer].Widget_Offset+ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX) <= (Get_CurrentPage_Button_Num()-1))
        {
            ItemIndexPage[CurrentLayer].Widget_Offset += ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX;
            /*更新聚焦*/
            WidgetFocusUpdate();
            return;
        }
        else
        {
            /*判斷是否是最后頁,則不可翻頁*/
            if(ItemIndexPage[CurrentLayer].CurrentPageNum == ItemIndexPage[CurrentLayer].PageNum)
            {
                /*改為下移動*/
                ItemIndexPage_Down();
                /*更新聚焦*/
                WidgetFocusUpdate();
                return;
            }
            else
            {
                if(ItemIndexPage[CurrentLayer].CurrentPageNum < ItemIndexPage[CurrentLayer].PageNum)
                {
                    /*向右翻頁*/
                    ItemIndexPage[CurrentLayer].CurrentPageNum += 1;
                    /*控件聚焦到最左側(cè)*/
                    ItemIndexPage[CurrentLayer].Widget_Offset -=  ((ITEM_INDEX_PAGE_BUTTON_H_NUM_MAX-1)*ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX);
                    /*限制超出可聚焦控件數(shù)*/
                    uint32_t temp = Get_CurrentPage_Button_Num();
                    ItemIndexPage[CurrentLayer].Widget_Offset = temp>ItemIndexPage[CurrentLayer].Widget_Offset?ItemIndexPage[CurrentLayer].Widget_Offset:temp;
                }
            }
        }   
        /*主窗口重繪*/
        ItemIndexPage_Reload();
    }   
#endif
}

/**
  ******************************************************************
  * @brief   上鍵處理撮珠,單頁循環(huán)聚焦
  * @param   [in]None
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static void ItemIndexPage_Up(void)
{
    uint8_t CurrentLayer = 0;
    if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
    {
        CurrentLayer = ITEMINDEX_KEY_LAYER;
    }
    if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
    {
        CurrentLayer = ITEMINDEX_VALUE_LAYER;
    }
    /*字段層或索引層激活*/
    if(ItemIndexPage[CurrentLayer].IsActive)
    {
        /*判斷是否是當(dāng)前頁面首個(gè)控件,則不可移動*/
        if(ItemIndexPage[CurrentLayer].Widget_Offset == 0)
        {
            if(ItemIndexPage[CurrentLayer].Widget_Num >= ITEM_INDEX_PAGE_BUTTON_NUM_MAX)
            {
                ItemIndexPage[CurrentLayer].Widget_Offset = Get_CurrentPage_Button_Num()-1;
            }
            else
            {
                ItemIndexPage[CurrentLayer].Widget_Offset = ItemIndexPage[CurrentLayer].Widget_Num-1;
            }
        }
        else
        {
            ItemIndexPage[CurrentLayer].Widget_Offset--;
        }
    }
    /*更新聚焦*/
    WidgetFocusUpdate();
}

/**
  ******************************************************************
  * @brief   下鍵處理金矛,單頁循環(huán)聚焦
  * @param   [in]None
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static void ItemIndexPage_Down(void)
{
    uint8_t CurrentLayer = 0;
    if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
    {
        CurrentLayer = ITEMINDEX_KEY_LAYER;
    }
    if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
    {
        CurrentLayer = ITEMINDEX_VALUE_LAYER;
    }
    /*字段層或索引層激活*/
    if(ItemIndexPage[CurrentLayer].IsActive)
    {
        /*判斷是否是當(dāng)前頁面最后一個(gè)控件芯急,則不可移動*/
        if(ItemIndexPage[CurrentLayer].Widget_Offset == (ItemIndexPage[CurrentLayer].Widget_Num-1) ||
           ItemIndexPage[CurrentLayer].Widget_Offset == (Get_CurrentPage_Button_Num()-1))
        {
            ItemIndexPage[CurrentLayer].Widget_Offset = 0;
        }
        else
        {
            ItemIndexPage[CurrentLayer].Widget_Offset++;
        }
    }
    /*更新聚焦*/
    WidgetFocusUpdate();
}

/**
  ******************************************************************
  * @brief   OK鍵處理
  * @param   [in]None
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static void ItemIndexPage_Ok(void)
{
    /*字段層激活-->進(jìn)入當(dāng)前字段索引結(jié)果層或選中常用字符時(shí)完成索引退出*/
    if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
    {
        if(Calc_CurrentWidgetOffsetInLayer() < ITEMINDEX_VAL_FIELD_NUM_MAX)
        {
            /*已選中常用字段*/
            /*判斷索引結(jié)果*/
            ItemIndexPage[ITEMINDEX_KEY_LAYER].TaskResult = 1;
            if(ItemIndexWindowGetResult() != NULL)
            {
                ItemIndexPage[ITEMINDEX_KEY_LAYER].TaskResult = 1;
            }
            else
            {
                ItemIndexPage[ITEMINDEX_KEY_LAYER].TaskResult = 0;
            }

            ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive = 0;
            ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = 0;
            /*隱藏刪除窗口*/
            ItemIndexWindowHide();
        }
        else
        {
            ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = 0;
            ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive = 1;
        }
        ItemIndexPage_Reload();
        return;
    }
    
    /*索引結(jié)果層-->確認(rèn)選擇*/
    if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
    {
        /*判斷索引結(jié)果*/
        ItemIndexPage[ITEMINDEX_VALUE_LAYER].TaskResult = 1;
        if(ItemIndexWindowGetResult() != NULL)
        {
            ItemIndexPage[ITEMINDEX_VALUE_LAYER].TaskResult = 1;
        }
        else
        {
            ItemIndexPage[ITEMINDEX_VALUE_LAYER].TaskResult = 0;
        }
        /*已完成索引-->窗口全部失效*/
        ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive = 0;
        ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = 0;
        /*隱藏刪除窗口*/
        ItemIndexWindowHide();
        return;
    }
}

/**
  ******************************************************************
  * @brief   返回鍵處理
  * @param   [in]None
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static void ItemIndexPage_Return(void)
{
    /*字段層激活*/
    if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
    {
        ItemIndexWindowHide();
        ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = 0;
        ItemIndexPage_Reload();
        return;
    }
    
    /*索引結(jié)果層*/
    if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
    {
        ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive = 0;
        ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = 1;
        ItemIndexPage_Reload();
        return;
    }
}

/**
  ******************************************************************
  * @brief   主窗口重新繪制
  * @param   [in]None
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
static void ItemIndexPage_Reload(void)
{
    /*窗口失效-->重新繪制*/
    if(MAINWin != 0)
    {
        WM_InvalidateWindow(MAINWin);
        WM_DeleteWindow(MAINWin);
        MAINWin = CreateitemsChSearchWindow();
    }       
}

/** Public application code --------------------------------------------------*/
/*******************************************************************************
*
*       Public code
*
********************************************************************************
*/

/**
  ******************************************************************
  * @brief   獲取運(yùn)行結(jié)果狀態(tài)
  * @param   [in]None
  * @retval  1  成功
  * @retval  0  失敗
  * @author  aron566
  * @version V1.0
  * @date    2020-5-21
  ******************************************************************
  */
uint32_t ItemIndexWindowGetTaskResult(void)
{
    if(ItemIndexPage[ITEMINDEX_KEY_LAYER].TaskResult || ItemIndexPage[ITEMINDEX_VALUE_LAYER].TaskResult)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}


/**
  ******************************************************************
  * @brief   字段索引窗口,已索引到數(shù)據(jù)獲取
  * @param   [in]None
  * @retval  索引結(jié)果字符串地址
  * @author  aron566
  * @version V1.0
  * @date    2020-5-21
  ******************************************************************
  */
const char *ItemIndexWindowGetResult(void)
{
    uint32_t temp;
    uint8_t CurrentLayer = 0;
    if(ItemIndexPage[ITEMINDEX_KEY_LAYER].TaskResult)
    {
        CurrentLayer = ITEMINDEX_KEY_LAYER;
    }
    if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].TaskResult)
    {
        CurrentLayer = ITEMINDEX_VALUE_LAYER;
    }   
    if(ItemIndexPage[CurrentLayer].TaskResult)
    {
        temp = ItemIndexPage[CurrentLayer].IsActive;
        /*激活當(dāng)前需獲取數(shù)據(jù)的層*/
        ItemIndexPage[CurrentLayer].IsActive = 1;
        const char *ret = Get_IndexStr(ItemIndexPage[CurrentLayer].Widget_Offset);
        ItemIndexPage[CurrentLayer].IsActive = temp;
        return ret;
    }
    return NULL;
}


/**
  ******************************************************************
  * @brief   字段索引窗口驶俊,狀態(tài)獲取
  * @param   [in]None
  * @retval  1  窗口顯示中
  * @retval  0  窗口已失效
  * @author  aron566
  * @version V1.0
  * @date    2020-5-18
  ******************************************************************
  */
uint8_t ItemIndexWindowGetState(void)
{
    if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive || ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

/**
  ******************************************************************
  * @brief   字段索引窗口按鍵處理
  * @param   [in]Key
  * @retval  當(dāng)前窗口狀態(tài):1顯示 0關(guān)閉
  * @author  aron566
  * @version V1.0
  * @date    2020-5-20
  ******************************************************************
  */
uint8_t ItemIndexWindowSendKey(int key)
{
    /*判斷窗口是否處于激活狀態(tài)則下發(fā)按鍵*/
    if(ItemIndexWindowGetState())
    {
        switch(key)
        {
          case GUI_KEY_UP:
              ItemIndexPage_Up();
              break;
          case GUI_KEY_DOWN:
              ItemIndexPage_Down();
              break;
          case GUI_KEY_LEFT:
              ItemIndexPage_Back();
              break;
          case GUI_KEY_RIGHT:
              ItemIndexPage_Forward();
              break;
          case GUI_KEY_ENTER:
              ItemIndexPage_Ok();
              break;
          case GUI_KEY_ESCAPE:
              ItemIndexPage_Return();
              break;
          default:
              break;
        }
    }
    /*返回當(dāng)前窗口狀態(tài)*/
    return ItemIndexWindowGetState();
}

/**
  ******************************************************************
  * @brief   字段索引窗口顯示
  * @param   [in]None
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-18
  ******************************************************************
  */
void ItemIndexWindowShow(void)
{
    if(MAINWin == 0)
    {
        /*重置窗口資源*/
        ItemIndexPage_Init();
        MAINWin = CreateitemsChSearchWindow();
    }
}

/**
  ******************************************************************
  * @brief   字段索引窗口隱藏
  * @param   [in]None
  * @retval  None
  * @author  aron566
  * @version V1.0
  * @date    2020-5-18
  ******************************************************************
  */
void ItemIndexWindowHide(void)
{
    if(MAINWin)
    {
        WM_DeleteWindow(MAINWin);
        MAINWin = 0;
    }
}
#ifdef __cplusplus ///<end extern c
}
#endif

索引頁面頭文件

/**
 *  @file GW_ItemIndex.h
 *
 *  @date 2020/5/19
 *
 *  @author aron566
 *
 *  @brief 參數(shù)列表索引展示 文件編碼使用UTF-8 無BOM
 *  
 *  @version V1.0
 */
#ifndef GW_ITEMINDEX_H
#define GW_ITEMINDEX_H
#ifdef __cplusplus ///<use C compiler
extern "C" {
#endif
/** Includes -----------------------------------------------------------------*/
#include <stdint.h> /**< nedd definition of uint8_t */
#include <stddef.h> /**< need definition of NULL    */
//#include <stdbool.h>/**< need definition of BOOL    */
#include <stdio.h>  /**< if need printf             */
#include <stdlib.h>
#include <string.h>
/** Private includes ---------------------------------------------------------*/
/** Private defines ----------------------------------------------------------*//** Exported typedefines -----------------------------------------------------*/
/*索引表建立*/
typedef enum
{
    GL_SEARCH_CHAR_A = 0,/**< 參數(shù)字段首字母索引*/
    GL_SEARCH_CHAR_B,
    GL_SEARCH_CHAR_C,
    GL_SEARCH_CHAR_D,
    GL_SEARCH_CHAR_E,
    GL_SEARCH_CHAR_F,
    GL_SEARCH_CHAR_G,
    GL_SEARCH_CHAR_H,
    GL_SEARCH_CHAR_I,
    GL_SEARCH_CHAR_J,
    GL_SEARCH_CHAR_K,
    GL_SEARCH_CHAR_L,
    GL_SEARCH_CHAR_M,
    GL_SEARCH_CHAR_N,
    GL_SEARCH_CHAR_O,
    GL_SEARCH_CHAR_P,
    GL_SEARCH_CHAR_Q,
    GL_SEARCH_CHAR_R,
    GL_SEARCH_CHAR_S,
    GL_SEARCH_CHAR_T,
    GL_SEARCH_CHAR_U,
    GL_SEARCH_CHAR_V,
    GL_SEARCH_CHAR_W,
    GL_SEARCH_CHAR_X,
    GL_SEARCH_CHAR_Y,
    GL_SEARCH_CHAR_Z,}IndexKey_Typedef;
/** 索引頁面控件屬性*/
typedef struct 
{
    IndexKey_Typedef WidgetIndex;    /**< 控件屬性所在索引號*/
    char Str[32];                    /**< 控件對應(yīng)的字符串描述*/
    uint32_t Color;                  /**< 背景色*/
}ItemIndexWidget_Typedef;
/** 索引頁面結(jié)構(gòu)體*/
typedef struct
{
    uint32_t PageType;              /**< 該頁面類型娶耍。eg:根據(jù)頁面類型查找填入該寫入的參數(shù)*/
    uint32_t Widget_Num;            /**< 該頁面類型全部控件總數(shù)*/
    uint32_t Widget_Offset;         /**< 該頁面已聚焦控件偏移數(shù)*/
    uint32_t PageNum;               /**< 該類型頁面總數(shù)。eg:根據(jù)預(yù)設(shè)單頁顯示控件數(shù)宏饼酿,與頁面控件總數(shù)榕酒,轉(zhuǎn)換為頁數(shù)*/
    uint32_t CurrentPageNum;        /**< 當(dāng)前顯示頁面號*/
    uint32_t IsActive;              /**< 該頁面是否激活狀態(tài)*/
    uint32_t TaskResult;            /**< 該頁面功能運(yùn)行結(jié)果*/
}ItemIndexPage_Typedef;

/** Exported constants -------------------------------------------------------*/
                                        
ItemIndexWidget_Typedef Key_Search_Map[] = 
{
    {GL_SEARCH_CHAR_A,    "A字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(254,  67, 101))},
    {GL_SEARCH_CHAR_B,    "B字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(252, 157, 154))},
    {GL_SEARCH_CHAR_C,    "C字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(249, 205, 173))},
    {GL_SEARCH_CHAR_D,    "D字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(200, 200, 169))},
    {GL_SEARCH_CHAR_E,    "E字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(131, 175, 155))},
    {GL_SEARCH_CHAR_F,    "F字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(178, 200, 187))},
    {GL_SEARCH_CHAR_G,    "G字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888( 69, 137, 148))},
    {GL_SEARCH_CHAR_H,    "H字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(117, 121,  74))},
    {GL_SEARCH_CHAR_I,    "I字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(114,  83,  52))},
    {GL_SEARCH_CHAR_J,    "J字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(130,  57,  53))},
    {GL_SEARCH_CHAR_K,    "K字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(137, 190, 178))},
    {GL_SEARCH_CHAR_L,    "L字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(201, 186, 131))},
    {GL_SEARCH_CHAR_M,    "M字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(222, 211, 140))},
    {GL_SEARCH_CHAR_N,    "N字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(222, 156,  83))},
    {GL_SEARCH_CHAR_O,    "O字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888( 36,  33,  28))},
    {GL_SEARCH_CHAR_P,    "P字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(172,  81,  24))},
    {GL_SEARCH_CHAR_Q,    "Q字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(159, 125,  80))},
    {GL_SEARCH_CHAR_R,    "R字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(160, 191, 124))},
    {GL_SEARCH_CHAR_S,    "S字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(  3,  35,  14))},
    {GL_SEARCH_CHAR_T,    "T字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(224, 160, 158))},
    {GL_SEARCH_CHAR_U,    "U字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(  0,   0,   0))},
    {GL_SEARCH_CHAR_V,    "V字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(117,  36,  35))},
    {GL_SEARCH_CHAR_W,    "W字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(161,  47,  47))},
    {GL_SEARCH_CHAR_X,    "X字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888( 30,  41,  61))},
    {GL_SEARCH_CHAR_Y,    "Y字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888(173, 137, 118))},
    {GL_SEARCH_CHAR_Z,    "Z字段"  ,TL_CV_RGB888_SWAP(TL_GET_RGB888( 38, 188, 213))},
};

/** Exported macros-----------------------------------------------------------*//** Exported variables -------------------------------------------------------*/
/** Exported functions prototypes --------------------------------------------*/
void ItemIndexWindowHide(void);
void ItemIndexWindowShow(void);
void ItemIndexWindowSendKey(int key);
uint8_t ItemIndexWindowGetState(void);
const char *ItemIndexWindowGetResult(void);
uint32_t ItemIndexWindowGetTaskResult(void);
#ifdef __cplusplus ///<end extern c
}
#endif
#endif
/******************************** End of file *********************************/

通用頁面布局

通用頁面布局主要功能:

  • 實(shí)現(xiàn)通過設(shè)置頁面的像素自動整定各個(gè)控件的相對位置區(qū)域
  • 具備通用label位置/edit位置/button位置/標(biāo)題位置
  • 通過設(shè)置控件行數(shù)列數(shù),排列方式故俐,垂直間隙想鹰,水平間隙自動計(jì)算控件大小,及每個(gè)控件的相對位置
/*
 *  FILE: DRV_LcdPar.c
 *
 *  Created on: 2020/4/24
 *
 *      Author: aron566
 *
 *  DESCRIPTION:--
 */
#ifdef __cplusplus //use C compiler
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "DRV_LcdPar.h"
/* Private macros-------------------------------------------------------------*/
/* Private constants ---------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/*運(yùn)行時(shí)間*/
static volatile uint32_t userOS_TimeMS  = 0;
static volatile uint32_t OS_TimeSec = 0;
/* Private function prototypes -----------------------------------------------*/
/* Private user code ---------------------------------------------------------*/
/* Public variables ----------------------------------------------------------*/
/*******************************************************************************
*
*       Static code
*
********************************************************************************
*/
/*******************************************************************************
*
*       Public code
*
********************************************************************************
*/
/* 放入1ms中斷 */
void millsec_IRQ_handler(void)
{
    static uint16_t cnt_ms = 0;
    
    userOS_TimeMS++;
    if (++cnt_ms >= 1000)
    {
        OS_TimeSec++;
        cnt_ms = 0;
    }
}/**
  ******************************************************************
  * @brief   獲取ms計(jì)數(shù)
  * @param   None
  * @retval  userOS_TimeMS
  * @author  aron566
  * @version v1.0
  * @date    2020/5/6
  ******************************************************************
  */
uint32_t get_time_ms(void)
{
    return userOS_TimeMS;
}/**
  ******************************************************************
  * @brief   獲取秒計(jì)數(shù)
  * @param   None
  * @retval  OS_TimeSec
  * @author  aron566
  * @version v1.0
  * @date    2020/5/6
  ******************************************************************
  */
uint32_t get_time_sec(void)
{
    return OS_TimeSec;
}
#ifdef __cplusplus //end extern c
}
#endif
/******************************** End of file *********************************/

/*
 *  FILE: DRV_LcdPar.h
 *
 *  Created on: 2020/4/24
 *
 *      Author: aron566
 *
 *  DESCRIPTION:--
 */
#ifndef DRV_LCDPAR_H
#define DRV_LCDPAR_H
#ifdef __cplusplus //use C compiler
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include <stdint.h> /*nedd definition of uint8_t*/
#include <stddef.h> /*need definition of NULL*/
#include <stdbool.h>/*need definition of BOOL*/
#include <stdio.h>  /*if need printf*/
#include <stdlib.h>
#include <string.h>
/* Private includes ----------------------------------------------------------*/
#include "ipa.h"
/* Private defines -----------------------------------------------------------*/
#define GUI_GRAY_C8     TL_CV_RGB888_SWAP(TL_GET_RGB888(157, 255, 255))                          /**< 菜單按鈕界面標(biāo)題欄色彩設(shè)置 */
#define GUI_GRAY_E7     GUI_WHITE
#define GUI_GRAY_9A     GUI_WHITE
#define EDIT_EnableInversion(item,value)    do{}while(0)
#define EDIT_CI_CURSOR  EDIT_CI_ENABLED
#define GUI_MAKE_COLOR(ARGB)    (ARGB)
/*圖形最大顯示區(qū)域設(shè)定药版,單位:像素*/
#define UI_MAINWINDOW_WIDTH         (480U)
#define UI_MAINWINDOW_HEIGHT        (320U)  
/*狀態(tài)欄高度設(shè)定*/
#define TITLE_START_Y               (0U)                                        /*標(biāo)題欄起始Y*/
#define TITLE_END_Y                 (UI_MAINWINDOW_HEIGHT/10)                   /*標(biāo)題欄高度Y*/
#define BOTTOM_START_Y              (UI_MAINWINDOW_HEIGHT*9/10)                 /*底部狀態(tài)欄起始Y*/
#define BOTTOM_END_Y                (UI_MAINWINDOW_HEIGHT-BOTTOM_START_Y)       /*底部狀態(tài)欄高度Y*/
#define TITLE2_START_Y              TITLE_END_Y                                                                    /*第二個(gè)標(biāo)題起始Y*/
#define TITLE2_END_Y                (25U)                                                                                /*第二個(gè)標(biāo)題欄高度Y*/    
/*狀態(tài)欄寬度辑舷,位置設(shè)定*/
/*upper*/
#define PAGE_DEVICE_STATE_START_X   (0U)                                        /*設(shè)備狀態(tài)起始X*/
#define PAGE_DEVICE_STATE_END_X     (UI_MAINWINDOW_WIDTH*2/10U)                 /*設(shè)備狀態(tài)長度X*/
  
#define PAGE_TITLE_START_X          PAGE_DEVICE_STATE_END_X                     /*頁面標(biāo)題起始X*/
#define PAGE_TITLE_END_X            (UI_MAINWINDOW_WIDTH*6/10U)                 /*頁面標(biāo)題長度X*/
  
#define PAGE_CLOCK_START_X          (UI_MAINWINDOW_WIDTH*8/10U)                 /*頁面時(shí)鐘起始X*/
#define PAGE_CLOCK_END_X            (UI_MAINWINDOW_WIDTH-PAGE_CLOCK_START_X)    /*頁面時(shí)鐘長度X*/    
/*bottom*/  
#define PAGE_TIPS_OPT_START_X       (0U)                                        /*頁面操作提示起始X*/
#define PAGE_TIPS_OPT_END_X         (UI_MAINWINDOW_WIDTH*9/10U)                 /*頁面操作提示長度X*/
  
#define PAGE_TIPS_PAGENUM_START_X   PAGE_TIPS_OPT_END_X                         /*頁面數(shù)目提示起始X*/
#define PAGE_TIPS_PAGENUM_END_X     (UI_MAINWINDOW_WIDTH-PAGE_TIPS_OPT_END_X)   /*頁面數(shù)目提示長度X*/
  
/*設(shè)定下拉框?qū)傩?/ 
#define PAGE_COMBO_BOX_START_X      (UI_MAINWINDOW_WIDTH*6/10U)                 /*下拉框起始X*/
#define PAGE_COMBO_BOX_END_X        (UI_MAINWINDOW_WIDTH*37/100U)               /*下拉框長度X*/
#define PAGE_COMBO_BOX_NUM_MAX      (8U)                                        /*下拉框列表最大數(shù)量*/
#define PAGE_MULTI_COMBO_BOX_V_GAP  (10U)                                       /*下拉框垂直間隙*/
#define PAGE_COMBO_BOX_ORIGIN_Y     TITLE_END_Y                                 /*下拉框起始Y*/  
/*通過計(jì)算下拉框允許高度Y*/
#define PAGE_COMBO_BOX_HEIGHT       \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(PAGE_MULTI_COMBO_BOX_V_GAP*(PAGE_COMBO_BOX_NUM_MAX+1)))/PAGE_COMBO_BOX_NUM_MAX)
/*計(jì)算多個(gè)下拉框Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1,高度x不變*/  
#define PAGE_MULTI_COMBO_BOX_V_Y(X)   (PAGE_COMBO_BOX_ORIGIN_Y+PAGE_MULTI_COMBO_BOX_V_GAP*(X+1)+PAGE_COMBO_BOX_HEIGHT*X)  
/*設(shè)定通用多按鈕 垂直分布 屬性*/
#define PAGE_BUTTON_START_X         (UI_MAINWINDOW_WIDTH*1/10U)                 /*按鈕起始X*/
#define PAGE_BUTTON_END_X           (UI_MAINWINDOW_WIDTH*8/10U)                 /*按鈕長度X*/
#define PAGE_MULTI_BUTTON_V_GAP     (5U)                                        /*按鈕垂直間隙*/
#define PAGE_BUTTON_V_NUM_MAX       (8U)                                        /*最大允許按鈕數(shù)目*/
#define PAGE_BUTTON_ORIGIN_Y        TITLE_END_Y                                 /*按鈕起始Y*//*通過計(jì)算按鈕允許高度Y*/
#define PAGE_BUTTON_HEIGHT       \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(PAGE_MULTI_BUTTON_V_GAP*(PAGE_BUTTON_V_NUM_MAX+1)))/PAGE_BUTTON_V_NUM_MAX)
/*計(jì)算多個(gè)按鈕Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1槽片,高度x不變*/  
#define PAGE_MULTI_BUTTON_V_Y(X)   (PAGE_BUTTON_ORIGIN_Y+PAGE_MULTI_BUTTON_V_GAP*(X+1)+PAGE_BUTTON_HEIGHT*X) 
/*設(shè)定通用多按鈕 水平分布 屬性*/
#define PAGE_BUTTON_START_Y         (UI_MAINWINDOW_WIDTH*1/10U)                 /*按鈕起始Y*/
#define PAGE_BUTTON_END_Y           (UI_MAINWINDOW_WIDTH*1/10U)                 /*按鈕高度Y*/
#define PAGE_MULTI_BUTTON_X_GAP     (10U)                                       /*按鈕水平間隙*/
#define PAGE_BUTTON_H_NUM_MAX       (4U)                                        /*最大允許按鈕數(shù)目*/
#define PAGE_BUTTON_LEFT_INVALID_LEN     (0U)                                   /*左邊不可用長度*/
#define PAGE_BUTTON_RIGHT_INVALID_LEN    (0U)                                   /*右邊不可用長度*/
#define PAGE_BUTTON_ORIGIN_X        PAGE_BUTTON_LEFT_INVALID_LEN                /*按鈕起始X*/
/*通過計(jì)算按鈕允許寬度X*/
#define PAGE_BUTTON_WIDTH       \
((UI_MAINWINDOW_WIDTH-PAGE_BUTTON_LEFT_INVALID_LEN-PAGE_BUTTON_RIGHT_INVALID_LEN-(PAGE_MULTI_BUTTON_X_GAP*(PAGE_BUTTON_H_NUM_MAX+1)))/PAGE_BUTTON_H_NUM_MAX)
/*計(jì)算多個(gè)按鈕X坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1何缓,高度x不變*/  
#define PAGE_MULTI_BUTTON_H_X(X)   (PAGE_BUTTON_ORIGIN_X+PAGE_MULTI_BUTTON_X_GAP*(X+1)+PAGE_BUTTON_WIDTH*X) 
/*設(shè)定顯示框?qū)傩?/
#define PAGE_DISPLAY_BOX_START_X      (UI_MAINWINDOW_WIDTH*6/10U)               /*顯示框起始X*/
#define PAGE_DISPLAY_BOX_END_X        (UI_MAINWINDOW_WIDTH*37/100U)             /*顯示框長度X*/
#define PAGE_MULTI_DISPLAY_BOX_V_GAP  (10U)                                     /*顯示框垂直間隙*/
#define PAGE_DISPLAY_BOX_V_NUM_MAX    (8U)                                      /*最大允許顯示框數(shù)目*/
#define PAGE_DISPLAY_BOX_ORIGIN_Y     TITLE_END_Y                               /*顯示框起始Y*/
/*通過計(jì)算顯示框允許高度Y*/
#define PAGE_DISPLAY_BOX_HEIGHT       \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(PAGE_MULTI_DISPLAY_BOX_V_GAP*(PAGE_DISPLAY_BOX_V_NUM_MAX+1)))/PAGE_DISPLAY_BOX_V_NUM_MAX)
/*計(jì)算多個(gè)顯示框Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1肢础,高度x不變*/  
#define PAGE_MULTI_DISPLAY_BOX_V_Y(X)   (PAGE_DISPLAY_BOX_ORIGIN_Y+PAGE_MULTI_DISPLAY_BOX_V_GAP*(X+1)+PAGE_DISPLAY_BOX_HEIGHT*X)  
/*設(shè)定編輯框?qū)傩?/
#define PAGE_EDIT_BOX_START_X         (UI_MAINWINDOW_WIDTH*6/10U)               /*編輯框起始X*/
#define PAGE_EDIT_BOX_END_X           (UI_MAINWINDOW_WIDTH*37/100U)             /*編輯框長度X*/
#define PAGE_MULTI_EDIT_BOX_V_GAP     (10U)                                     /*編輯框垂直間隙*/
#define PAGE_EDIT_BOX_NUM_MAX         (8U)                                      /*最大允許編輯框數(shù)目*/
#define PAGE_EDIT_BOX_ORIGIN_Y        TITLE_END_Y                               /*編輯框起始Y*/
/*通過計(jì)算編輯框允許高度Y*/
#define PAGE_EDIT_BOX_HEIGHT       \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(PAGE_MULTI_EDIT_BOX_V_GAP*(PAGE_EDIT_BOX_NUM_MAX+1)))/PAGE_EDIT_BOX_NUM_MAX)
/*計(jì)算多個(gè)編輯框Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1,高度x不變*/  
#define PAGE_MULTI_EDIT_BOX_V_Y(X)   (PAGE_EDIT_BOX_ORIGIN_Y+PAGE_MULTI_EDIT_BOX_V_GAP*(X+1)+PAGE_EDIT_BOX_HEIGHT*X)  
/*設(shè)定通用標(biāo)簽屬性*/
#define PAGE_LABEL_START_X            (UI_MAINWINDOW_WIDTH*4/100U)              /*標(biāo)簽起始X*/
#define PAGE_LABEL_END_X              (UI_MAINWINDOW_WIDTH*55/100U)             /*標(biāo)簽長度X*/
#define PAGE_MULTI_LABEL_V_GAP        (10U)                                     /*標(biāo)簽垂直間隙*/
#define PAGE_LABEL_NUM_MAX            (8U)                                      /*最大允許標(biāo)簽數(shù)目*/
#define PAGE_LABEL_ORIGIN_Y           TITLE_END_Y                               /*標(biāo)簽起始Y*/
/*通過計(jì)算標(biāo)簽允許高度Y*/
#define PAGE_LABEL_HEIGHT       \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(PAGE_MULTI_LABEL_V_GAP*(PAGE_LABEL_NUM_MAX+1)))/PAGE_LABEL_NUM_MAX)
/*計(jì)算多個(gè)標(biāo)簽Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1碌廓,高度x不變*/  
#define PAGE_MULTI_LABEL_V_Y(X)   (PAGE_LABEL_ORIGIN_Y+PAGE_MULTI_LABEL_V_GAP*(X+1)+PAGE_LABEL_HEIGHT*X) /*設(shè)定對話框顯示區(qū)域*/
#define PAGE_DIGLOG_BOX_START_X         (UI_MAINWINDOW_WIDTH*2/10U)             /*對話框起始X*/
#define PAGE_DIGLOG_BOX_END_X           (UI_MAINWINDOW_WIDTH*6/10U)             /*對話框長度X*/
#define PAGE_DIGLOG_BOX_START_Y         (UI_MAINWINDOW_HEIGHT*3/10U)            /*對話框起始Y*/
#define PAGE_DIGLOG_BOX_END_Y           (UI_MAINWINDOW_HEIGHT*4/10U)            /*對話框高度Y*/
#define PAGE_DIGLOG_BOX_TEXT_START_X    (5U)                                    /*對話框文本相對起始X*/
#define PAGE_DIGLOG_BOX_TEXT_END_X      (PAGE_DIGLOG_BOX_END_X-5U)              /*對話框文本長度X*/
#define PAGE_DIGLOG_BOX_TEXT_START_Y    (10U)                                   /*對話框文本相對起始Y*/
#define PAGE_DIGLOG_BOX_TEXT_END_Y      (20U)                                   /*對話框文本高度Y*/
#define PAGE_DIGLOG_BOX_BUTTON1_START_X (PASSWD_DIGLOG_BOX_END_X*2/10)          /*對話框按鈕相對起始X*/
#define PAGE_DIGLOG_BOX_BUTTON1_END_X   (PASSWD_DIGLOG_BOX_END_X*3/10)          /*對話框按鈕長度X*/
#define PAGE_DIGLOG_BOX_BUTTON1_START_Y (PASSWD_DIGLOG_BOX_END_Y*4/10)          /*對話框按鈕相對起始Y*/
#define PAGE_DIGLOG_BOX_BUTTON1_END_Y   (25U)                                   /*對話框按鈕高度Y*/
#define PAGE_DIGLOG_BOX_BUTTON2_START_X (PASSWD_DIGLOG_BOX_END_X*5/10)          /*對話框按鈕相對起始X*/
#define PAGE_DIGLOG_BOX_BUTTON2_END_X   (PASSWD_DIGLOG_BOX_END_X*3/10)          /*對話框按鈕長度X*/
#define PAGE_DIGLOG_BOX_BUTTON2_START_Y (PASSWD_DIGLOG_BOX_END_Y*4/10)          /*對話框按鈕相對起始Y*/
#define PAGE_DIGLOG_BOX_BUTTON2_END_Y   (25U)                                   /*對話框按鈕高度Y*/
/*===============================特殊指定坐標(biāo)=================================*/
/*===尋參界面參數(shù)坐標(biāo)===*/
/*設(shè)定標(biāo)簽屬性*/
#define PARA_LABEL_START_X            (UI_MAINWINDOW_WIDTH*4/100U)              /*標(biāo)簽起始X*/
#define PARA_LABEL_END_X              (UI_MAINWINDOW_WIDTH*55/100U)             /*標(biāo)簽長度X*/
#define PARA_MULTI_LABEL_V_GAP        (10U)                                     /*標(biāo)簽垂直間隙*/
#define PARA_LABEL_NUM_MAX            (8U)                                      /*最大允許標(biāo)簽數(shù)目*/
#define PARA_LABEL_ORIGIN_Y           (TITLE_END_Y+TITLE2_END_Y)                /*標(biāo)簽起始Y*/
/*通過計(jì)算標(biāo)簽允許高度Y*/
#define PARA_LABEL_HEIGHT       \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-TITLE2_END_Y-BOTTOM_END_Y-(PARA_MULTI_LABEL_V_GAP*(PARA_LABEL_NUM_MAX+1)))/PARA_LABEL_NUM_MAX)
/*計(jì)算多個(gè)標(biāo)簽Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1乔妈,高度x不變*/  
#define PARA_MULTI_LABEL_V_Y(X)   (PARA_LABEL_ORIGIN_Y+PARA_MULTI_LABEL_V_GAP*(X+1)+PARA_LABEL_HEIGHT*X) /*設(shè)定顯示框?qū)傩?/
#define PARA_DISPLAY_BOX_START_X      (UI_MAINWINDOW_WIDTH*6/10U)               /*顯示框起始X*/
#define PARA_DISPLAY_BOX_END_X        (UI_MAINWINDOW_WIDTH*37/100U)             /*顯示框長度X*/
#define PARA_MULTI_DISPLAY_BOX_V_GAP  (10U)                                     /*顯示框垂直間隙*/
#define PARA_DISPLAY_BOX_V_NUM_MAX    (8U)                                      /*最大允許顯示框數(shù)目*/
#define PARA_DISPLAY_BOX_ORIGIN_Y     (TITLE_END_Y+TITLE2_END_Y)                /*顯示框起始Y*/
/*通過計(jì)算顯示框允許高度Y*/
#define PARA_DISPLAY_BOX_HEIGHT       \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-TITLE2_END_Y-BOTTOM_END_Y-(PARA_MULTI_DISPLAY_BOX_V_GAP*(PARA_DISPLAY_BOX_V_NUM_MAX+1)))/PARA_DISPLAY_BOX_V_NUM_MAX)
/*計(jì)算多個(gè)顯示框Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1,高度x不變*/  
#define PARA_MULTI_DISPLAY_BOX_V_Y(X)   (PARA_DISPLAY_BOX_ORIGIN_Y+PARA_MULTI_DISPLAY_BOX_V_GAP*(X+1)+PARA_DISPLAY_BOX_HEIGHT*X)  
/*進(jìn)度條屬性設(shè)置*/
#define PROGBAR_START_X               (0U)
#define PROGBAR_END_X                 UI_MAINWINDOW_WIDTH
#define PROGBAR_START_Y               BOTTOM_START_Y
#define PROGBAR_END_Y                 BOTTOM_END_Y
/*===重置參數(shù)坐標(biāo)===*/
#define PAGE_RESET_LABEL_START_X      (0U)                                      /*重置提示起始X*/
#define PAGE_RESET_LABEL_END_X        UI_MAINWINDOW_WIDTH                       /*重置提示長度X*/
#define PAGE_RESET_LABEL_START_Y      (TITLE_START_Y+TITLE_END_Y)               /*重置提示起始Y*/
#define PAGE_RESET_LABEL_END_Y        (UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y)  
#define PAGE_RESET_BUTTON_START_X     (UI_MAINWINDOW_WIDTH*2/10U)               /*重置按鈕起始X*/
#define PAGE_RESET_BUTTON_END_X       (UI_MAINWINDOW_WIDTH*6/10U)               /*重置按鈕長度X*/
#define PAGE_RESET_BUTTON_START_Y     BOTTOM_START_Y                            /*重置按鈕起始Y*/
#define PAGE_RESET_BUTTON_END_Y       BOTTOM_END_Y                              /*重置按鈕高度Y*/
/*===設(shè)定實(shí)時(shí)界面坐標(biāo)===*/
/*設(shè)定通道數(shù)量顯示區(qū)域?qū)傩?/
#define REALTIME_CHANNEL_NUMBER_START_X  (UI_MAINWINDOW_WIDTH/2U)               /*實(shí)時(shí)頁面通道數(shù)量起始X*/
#define REALTIME_CHANNEL_NUMBER_START_Y  (UI_MAINWINDOW_WIDTH*1/100U)           /*實(shí)時(shí)頁面通道數(shù)量起始Y*/
/*設(shè)定時(shí)間顯示區(qū)域?qū)傩?/
#define REALTIME_CLOCK_START_X        (UI_MAINWINDOW_WIDTH*75/100U)             /*實(shí)時(shí)頁面時(shí)間起始X*/
#define REALTIME_CLOCK_END_X          UI_MAINWINDOW_WIDTH                       /*實(shí)時(shí)頁面時(shí)間終點(diǎn)X*/
#define REALTIME_CLOCK_START_Y        (0U)                                      /*實(shí)時(shí)頁面時(shí)間起始Y*/
#define REALtime_CLOCK_END_Y          TITLE_END_Y                        
/*設(shè)定鎖屏狀態(tài)區(qū)域*/
#define REALTIME_LOCK_START_X         (UI_MAINWINDOW_WIDTH*7/10U)               /*實(shí)時(shí)頁面鎖屏起始X*/
#define REALTIME_LOCK_END_X           (REALTIME_LOCK_START_X+10U)               /*實(shí)時(shí)頁面鎖屏終點(diǎn)X*/
#define REALTIME_LOCK_START_Y         (0U)                                      /*實(shí)時(shí)頁面鎖屏起始Y*/
#define REALTIME_LOCK_END_Y           TITLE_END_Y                               /*實(shí)時(shí)頁面鎖屏終點(diǎn)Y*/
/*設(shè)定報(bào)警狀態(tài)顯示區(qū)域*/
#define REALTIME_ALARM_STATE_START_X        (UI_MAINWINDOW_WIDTH*12/100U)       /*實(shí)時(shí)頁面報(bào)警狀態(tài)起始X*/
#define REALTIME_ALARM_STATE_START_Y        (4U)                                /*實(shí)時(shí)頁面報(bào)警狀態(tài)起始Y*/
/*報(bào)警通道號*/       
#define REALTIME_ALARM_CHANNEL_NUM_START_X  (UI_MAINWINDOW_WIDTH*23/100U)       /*實(shí)時(shí)頁面報(bào)警通道起始X*/
#define REALTIME_ALARM_CHANNEL_NUM_START_Y  (UI_MAINWINDOW_WIDTH*3/100U)        /*實(shí)時(shí)頁面報(bào)警通道起始Y*/
/*設(shè)定鏈接狀態(tài)顯示*/
#define REALTIME_CONNECT_STATE_START_X      (6U)                                /*實(shí)時(shí)頁面鏈接狀態(tài)起始X*/
#define REALTIME_CONNECT_STATE_START_Y      (6U)                                /*實(shí)時(shí)頁面鏈接狀態(tài)起始Y*/
/*設(shè)定電池圖標(biāo)*/
#define REALTIME_BATTERY_START_X      (2U)                                      /*實(shí)時(shí)頁面電池圖標(biāo)顯示起始X*/
#define REALTIME_BATTERY_END_X        (8U)                                      /*實(shí)時(shí)頁面電池圖標(biāo)顯示起始Y*/
/*設(shè)定不支持類型信息區(qū)域*/
#define BOARD_NOSUPPORT_START_X       (UI_MAINWINDOW_WIDTH/2U)                  /*實(shí)時(shí)頁面不支持類型信息起始X*/
#define BOARD_NOSUPPORT_START_Y       (UI_MAINWINDOW_HEIGHT*3/10U)              /*實(shí)時(shí)頁面不支持類型信息起始Y*/
/*設(shè)定支持類型信息區(qū)域*/
#define BOARD_SUPPORT_START_X         (UI_MAINWINDOW_WIDTH/2U)                  /*實(shí)時(shí)頁面支持類型信息起始X*/
#define BOARD_SUPPORT_START_Y         (UI_MAINWINDOW_HEIGHT*45/100U)            /*實(shí)時(shí)頁面支持類型信息起始Y*/
/*----------------------通道塊狀顯示------------------*/
#define REALTIME_BLOCKSTYLE_MULTI_RECT_X_GAP     (2U)                           /*實(shí)時(shí)頁面矩形水平間隙*/
#define REALTIME_BLOCKSTYLE_MULTI_RECT_Y_GAP     (2U)                           /*實(shí)時(shí)頁面矩形垂直間隙*/
#define REALTIME_BLOCKSTYLE_RECT_H_NUM_MAX       (3U)                           /*實(shí)時(shí)頁面最大允許每行矩形數(shù)目*/
#define REALTIME_BLOCKSTYLE_RECT_V_NUM_MAX       (2U)                           /*實(shí)時(shí)頁面最大允許矩形行數(shù)目*/
#define REALTIME_BLOCKSTYLE_RECT_LEFT_INVALID_LEN     (0U)                      /*實(shí)時(shí)頁面左邊不可用長度*/
#define REALTIME_BLOCKSTYLE_RECT_RIGHT_INVALID_LEN    (0U)                      /*實(shí)時(shí)頁面右邊不可用長度*/
#define REALTIME_BLOCKSTYLE_RECT_START_Y         (TITLE_START_Y+TITLE_END_Y)    /*實(shí)時(shí)頁面矩形起始Y*/
#define REALTIME_BLOCKSTYLE_RECT_ORIGIN_X        REALTIME_BLOCKSTYLE_RECT_LEFT_INVALID_LEN /*實(shí)時(shí)頁面矩形起始X*/
/*通過計(jì)算每通道矩形允許寬度X*/
#define REALTIME_BLOCKSTYLE_RECT_WIDTH       \
((UI_MAINWINDOW_WIDTH-REALTIME_BLOCKSTYLE_RECT_LEFT_INVALID_LEN-REALTIME_BLOCKSTYLE_RECT_RIGHT_INVALID_LEN-(REALTIME_BLOCKSTYLE_MULTI_RECT_X_GAP*(REALTIME_BLOCKSTYLE_RECT_H_NUM_MAX+1)))/REALTIME_BLOCKSTYLE_RECT_H_NUM_MAX)
/*通過計(jì)算每通道矩形允許高度Y*/
#define REALTIME_BLOCKSTYLE_RECT_END_Y       \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(REALTIME_BLOCKSTYLE_MULTI_RECT_Y_GAP*(REALTIME_BLOCKSTYLE_RECT_V_NUM_MAX+1)))/REALTIME_BLOCKSTYLE_RECT_V_NUM_MAX) /*實(shí)時(shí)頁面矩形寬度Y*/
/*計(jì)算多個(gè)通道矩形X坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1氓皱,高度x不變*/  
#define REALTIME_BLOCKSTYLE_MULTI_RECT_H_X(X)   (REALTIME_BLOCKSTYLE_RECT_ORIGIN_X+REALTIME_BLOCKSTYLE_MULTI_RECT_X_GAP*((X%REALTIME_BLOCKSTYLE_RECT_H_NUM_MAX)+1)+REALTIME_BLOCKSTYLE_RECT_WIDTH*(X%REALTIME_BLOCKSTYLE_RECT_H_NUM_MAX))
/*計(jì)算多個(gè)通道矩形Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1路召,高度x不變*/
#define REALTIME_BLOCKSTYLE_MULTI_RECT_Y_X(X)   (REALTIME_BLOCKSTYLE_RECT_START_Y+REALTIME_BLOCKSTYLE_MULTI_RECT_Y_GAP*((X/REALTIME_BLOCKSTYLE_RECT_H_NUM_MAX)+1)+REALTIME_BLOCKSTYLE_RECT_END_Y*(X/REALTIME_BLOCKSTYLE_RECT_H_NUM_MAX))
/*設(shè)定塊狀線條*/
#define REALTIME_BLOCKSTYLE_LINE_START_X           (REALTIME_UNIT_START_X+REALTIME_UNIT_END_X+5U)    /*實(shí)時(shí)頁面線條起始X*/
#define REALTIME_BLOCKSTYLE_LINE_END_X             (UI_MAINWINDOW_WIDTH-REALTIME_LINE_START_X-REALTIME_SLIP_START_X) /*實(shí)時(shí)頁面線條長度X*/
#define REALTIME_BLOCKSTYLE_LINE_START_Y(X)        (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_SLIP_HEIGHT/2U)   /*實(shí)時(shí)頁面線條起始Y*/
#define REALTIME_BLOCKSTYLE_LINE_END_Y             (0U) 
/*設(shè)定塊狀通道編號*/
/*設(shè)定塊狀濃度值*/
/*設(shè)定塊狀單位*/
/*設(shè)定塊狀報(bào)警鈴*/
/*設(shè)定塊狀報(bào)警時(shí)間*/
/*氣體類型化學(xué)式*/
/*氣體類型中文*/
/*----設(shè)定1通道塊狀高度----*/
#define REALTIME_BLOCK_1_STYLE_RECT_START_Y        (TITLE_START_Y+TITLE_END_Y)  /*塊狀1通道顯示起始Y*/
#define REALTIME_BLOCKS_1_TYLE_MULTI_RECT_X_GAP    (5U)                         /*塊狀1通道水平間隙*/
#define REALTIME_BLOCK_1_STYLE_MULTI_RECT_Y_GAP    (5U)                         /*塊狀1通道垂直間隙*/
#define REALTIME_BLOCK_1_STYLE_RECT_H_NUM_MAX      (1U)                         /*塊狀1通道水平數(shù)量*/
#define REALTIME_BLOCK_1_STYLE_RECT_V_NUM_MAX      (1U)                         /*塊狀1通道放置行數(shù)以1開始*/
#define REALTIME_BLOCK_1_STYLE_RECT_ORIGIN_X       (0U)                         /*塊狀1通道顯示起始X*/
/*通過計(jì)算每通道矩形允許寬度X*/
#define REALTIME_BLOCK_1_STYLE_RECT_WIDTH       \
((UI_MAINWINDOW_WIDTH-(REALTIME_BLOCKS_1_TYLE_MULTI_RECT_X_GAP*(REALTIME_BLOCK_1_STYLE_RECT_H_NUM_MAX+1)))/REALTIME_BLOCK_1_STYLE_RECT_H_NUM_MAX)
/*通過計(jì)算每通道矩形允許高度Y*/
#define REALTIME_BLOCK_1_STYLE_RECT_END_Y       \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(REALTIME_BLOCK_1_STYLE_MULTI_RECT_Y_GAP*(REALTIME_BLOCK_1_STYLE_RECT_V_NUM_MAX+1)))/REALTIME_BLOCK_1_STYLE_RECT_V_NUM_MAX)                                /*實(shí)時(shí)頁面矩形寬度Y*/
/*計(jì)算2通道矩形X坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1,高度x不變*/  
#define REALTIME_BLOCK_1_STYLE_MULTI_RECT_H_X(X)   (REALTIME_BLOCK_1_STYLE_RECT_ORIGIN_X+REALTIME_BLOCKS_1_TYLE_MULTI_RECT_X_GAP*((X%REALTIME_BLOCK_1_STYLE_RECT_H_NUM_MAX)+1)+REALTIME_BLOCK_1_STYLE_RECT_WIDTH*(X%REALTIME_BLOCK_1_STYLE_RECT_H_NUM_MAX))
/*計(jì)算2通道矩形Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1波材,高度x不變*/
#define REALTIME_BLOCK_1_STYLE_MULTI_RECT_Y_X(X)   (REALTIME_BLOCK_1_STYLE_RECT_START_Y+REALTIME_BLOCK_1_STYLE_MULTI_RECT_Y_GAP*((X/REALTIME_BLOCK_1_STYLE_RECT_H_NUM_MAX)+1)+REALTIME_BLOCK_1_STYLE_RECT_END_Y*(X/REALTIME_BLOCK_1_STYLE_RECT_H_NUM_MAX))
/*----設(shè)定2通道塊狀高度----*/
#define REALTIME_BLOCK_2_STYLE_RECT_START_Y        (TITLE_START_Y+TITLE_END_Y)  /*塊狀2通道顯示起始Y*/
#define REALTIME_BLOCKS_2_TYLE_MULTI_RECT_X_GAP    (5U)                         /*塊狀2通道水平間隙*/
#define REALTIME_BLOCK_2_STYLE_MULTI_RECT_Y_GAP    (5U)                         /*塊狀2通道垂直間隙*/
#define REALTIME_BLOCK_2_STYLE_RECT_H_NUM_MAX      (2U)                         /*塊狀2通道水平數(shù)量*/
#define REALTIME_BLOCK_2_STYLE_RECT_V_NUM_MAX      (1U)                         /*塊狀2通道放置行數(shù)以1開始*/
#define REALTIME_BLOCK_2_STYLE_RECT_ORIGIN_X       (0U)                         /*塊狀2通道顯示起始X*/
/*通過計(jì)算每通道矩形允許寬度X*/
#define REALTIME_BLOCK_2_STYLE_RECT_WIDTH       \
((UI_MAINWINDOW_WIDTH-(REALTIME_BLOCKS_2_TYLE_MULTI_RECT_X_GAP*(REALTIME_BLOCK_2_STYLE_RECT_H_NUM_MAX+1)))/REALTIME_BLOCK_2_STYLE_RECT_H_NUM_MAX)
/*通過計(jì)算每通道矩形允許高度Y*/
#define REALTIME_BLOCK_2_STYLE_RECT_END_Y       \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(REALTIME_BLOCK_2_STYLE_MULTI_RECT_Y_GAP*(REALTIME_BLOCK_2_STYLE_RECT_V_NUM_MAX+1)))/REALTIME_BLOCK_2_STYLE_RECT_V_NUM_MAX)                                /*實(shí)時(shí)頁面矩形寬度Y*/
/*計(jì)算2通道矩形X坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1股淡,高度x不變*/  
#define REALTIME_BLOCK_2_STYLE_MULTI_RECT_H_X(X)   (REALTIME_BLOCK_2_STYLE_RECT_ORIGIN_X+REALTIME_BLOCKS_2_TYLE_MULTI_RECT_X_GAP*((X%REALTIME_BLOCK_2_STYLE_RECT_H_NUM_MAX)+1)+REALTIME_BLOCK_2_STYLE_RECT_WIDTH*(X%REALTIME_BLOCK_2_STYLE_RECT_H_NUM_MAX))
/*計(jì)算2通道矩形Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1,高度x不變*/
#define REALTIME_BLOCK_2_STYLE_MULTI_RECT_Y_X(X)   (REALTIME_BLOCK_2_STYLE_RECT_START_Y+REALTIME_BLOCK_2_STYLE_MULTI_RECT_Y_GAP*((X/REALTIME_BLOCK_2_STYLE_RECT_H_NUM_MAX)+1)+REALTIME_BLOCK_2_STYLE_RECT_END_Y*(X/REALTIME_BLOCK_2_STYLE_RECT_H_NUM_MAX))
/*-------------------------通道條狀顯示-------------------*/
#define REALTIME_SLIP_START_X         (2U)                                            /*實(shí)時(shí)頁面通道條狀起始X*/
#define REALTIME_SLIP_END_X           (UI_MAINWINDOW_WIDTH-REALTIME_SLIP_START_X*2U)  /*實(shí)時(shí)頁面通道條狀長度X*/
#define REALTIME_MULTI_SLIP_V_GAP     (4U)                                            /*實(shí)時(shí)頁面通道條狀垂直間隙*/
#define REALTIME_SLIP_V_NUM_MAX       (4U)                                            /*最大允許實(shí)時(shí)頁面通道條狀數(shù)目*/
#define REALTIME_SLIP_ORIGIN_Y        TITLE_END_Y                                     /*實(shí)時(shí)頁面通道條狀起始Y*/
#define REALTIME_ROUND_VALUE          (6U)                                            /*設(shè)定倒角*/
/*通過計(jì)算條狀顯示允許高度Y*/
#define REALTIME_SLIP_HEIGHT       \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(REALTIME_MULTI_SLIP_V_GAP*(REALTIME_SLIP_V_NUM_MAX+1)))/REALTIME_SLIP_V_NUM_MAX)
/*計(jì)算多個(gè)條狀顯示Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1廷区,高度x不變*/  
#define REALTIME_MULTI_SLIP_V_Y(X)   (REALTIME_SLIP_ORIGIN_Y+REALTIME_MULTI_SLIP_V_GAP*(X+1)+REALTIME_SLIP_HEIGHT*X) 
/*設(shè)定通道編號顯示區(qū)域*/
#define REALTIME_CHANNEL_NUM_START_X    (REALTIME_SLIP_START_X+2U)                   /*實(shí)時(shí)頁面編號顯示起始X*/
#define REALTIME_CHANNEL_NUM_END_X      (32U)                                        /*實(shí)時(shí)頁面編號顯示長度X*/
#define REALTIME_CHANNEL_NUM_GAP_V      (2U)                                         /*實(shí)時(shí)頁面編號顯示垂直間隙*/
#define REALTIME_CHANNEL_NUM_START_Y(X) (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_CHANNEL_NUM_GAP_V) /*實(shí)時(shí)頁面編號起始Y*/
#define REALTIME_CHANNEL_NUM_END_Y      (REALTIME_SLIP_HEIGHT-REALTIME_UNIT_GAP_V*2) /*實(shí)時(shí)頁面編號高度Y*/
/*設(shè)定報(bào)警鈴顯示區(qū)域*/
#define REALTIME_ICO_START_X            (REALTIME_CHANNEL_NUM_START_X+REALTIME_CHANNEL_NUM_END_X+4U) /*實(shí)時(shí)頁面圖標(biāo)顯示起始X*/
#define REALTIME_ICO_END_X              (32U)                                            /*實(shí)時(shí)頁面圖標(biāo)顯示長度X*/
#define REALTIME_ICO_GAP_V              (2U)                                             /*實(shí)時(shí)頁面圖標(biāo)顯示垂直間隙*/
#define REALTIME_ICO_START_Y(X)         (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_ICO_GAP_V)  /*實(shí)時(shí)頁面圖標(biāo)顯示起始Y*/
#define REALTIME_ICO_END_Y              (REALTIME_SLIP_HEIGHT-REALTIME_ICO_GAP_V*2U)     /*實(shí)時(shí)頁面圖標(biāo)顯示高度Y*/
/*設(shè)定濃度顯示區(qū)域*/
#define REALTIME_VALUE_START_X          (REALTIME_ICO_START_X+REALTIME_ICO_END_X+4U)    /*實(shí)時(shí)頁面濃度值起始X*/
#define REALTIME_VALUE_END_X            (160U)                                           /*實(shí)時(shí)頁面濃度值長度X*/
#define REALTIME_VALUE_GAP_V            (2U)                                             /*實(shí)時(shí)頁面濃度顯示垂直間隙*/
#define REALTIME_VALUE_START_Y(X)       (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_VALUE_GAP_V)/*實(shí)時(shí)頁面濃度值起始Y*/
#define REALTIME_VALUE_END_Y            (REALTIME_SLIP_HEIGHT-REALTIME_VALUE_GAP_V*2U)    /*實(shí)時(shí)頁面濃度值高度Y*/
/*設(shè)定單位顯示區(qū)域*/
#define REALTIME_UNIT_START_X           (REALTIME_VALUE_START_X+REALTIME_VALUE_END_X+2U) /*實(shí)時(shí)頁面單位顯示起始X*/
#define REALTIME_UNIT_END_X             (32U)                                            /*實(shí)時(shí)頁面單位顯示長度X*/
#define REALTIME_UNIT_GAP_V             (2U)                                             /*實(shí)時(shí)頁面單位顯示垂直間隙*/
#define REALTIME_UNIT_START_Y(X)        (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_UNIT_GAP_V) /*實(shí)時(shí)頁面單位顯示起始Y*/
#define REALTIME_UNIT_END_Y             (REALTIME_SLIP_HEIGHT-REALTIME_UNIT_GAP_V*2U)    /*實(shí)時(shí)頁面單位顯示高度Y*/
/*設(shè)定線條顯示區(qū)域*/
#define REALTIME_LINE_START_X           (REALTIME_UNIT_START_X+REALTIME_UNIT_END_X+5U)    /*實(shí)時(shí)頁面線條起始X*/
#define REALTIME_LINE_END_X             (UI_MAINWINDOW_WIDTH-REALTIME_LINE_START_X-REALTIME_SLIP_START_X) /*實(shí)時(shí)頁面線條長度X*/
#define REALTIME_LINE_START_Y(X)        (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_SLIP_HEIGHT/2U)   /*實(shí)時(shí)頁面線條起始Y*/
#define REALTIME_LINE_END_Y             (0U)                                                   /*實(shí)時(shí)頁面線條高度Y*/
/*設(shè)定氣體類型顯示區(qū)域*/
#define REALTIME_GASTYPE_START_X        (REALTIME_LINE_START_X+REALTIME_LINE_END_X-36*3U)                      /*實(shí)時(shí)頁面氣體類型起始X*/
#define REALTIME_GASTYPE_END_X          (UI_MAINWINDOW_WIDTH-REALTIME_GASTYPE_START_X-REALTIME_SLIP_START_X)/*實(shí)時(shí)頁面氣體類型長度X*/
#define REALTIME_GASTYPE_GAP_V          (2U)                                                  /*實(shí)時(shí)頁面氣體類型垂直間隙*/
#define REALTIME_GASTYPE_START_Y(X)     (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_GASTYPE_GAP_V)   /*實(shí)時(shí)頁面氣體類型顯示起始Y*/
#define REALTIME_GASTYPE_END_Y          (REALTIME_SLIP_HEIGHT/2U-REALTIME_GASTYPE_GAP_V*2U)   /*實(shí)時(shí)頁面氣體類型高度Y*/
/*設(shè)定氣體名稱顯示區(qū)域----bottom*/
#define REALTIME_GASNAME_START_X        REALTIME_GASTYPE_START_X                          /*實(shí)時(shí)頁面氣體名稱起始X*/
#define REALTIME_GASNAME_END_X          (UI_MAINWINDOW_WIDTH-REALTIME_GASTYPE_START_X-REALTIME_SLIP_START_X)/*實(shí)時(shí)頁面氣體名稱程度X*/
#define REALTIME_GASNAME_GAP_V          (2U)                                              /*實(shí)時(shí)頁面氣體名稱垂直間隙*/
#define REALTIME_GASNAME_START_Y(X)     (REALTIME_LINE_START_Y(X)+REALTIME_GASNAME_GAP_V) /*實(shí)時(shí)頁面氣體名稱顯示起始Y*/
#define REALTIME_GASNAME_END_Y          (REALTIME_SLIP_HEIGHT/2U-REALTIME_GASNAME_GAP_V*2U)    /*時(shí)頁面氣體名稱高度Y*/
/*設(shè)定報(bào)警時(shí)間顯示區(qū)域----upper*/
#define REALTIME_ALARMTIME_START_X      REALTIME_LINE_START_X                                   /*實(shí)時(shí)頁面報(bào)警時(shí)間顯示起始X*/
#define REALTIME_ALARMTIME_END_X        (REALTIME_LINE_END_X/2U)                                /*實(shí)時(shí)頁面報(bào)警時(shí)間顯示長度X*/
#define REALTIME_ALARMTIME_GAP_V        (2U)                                                    /*實(shí)時(shí)頁面報(bào)警時(shí)間顯示垂直間隙*/
#define REALTIME_ALARMTIME_START_Y(X)   (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_ALARMTIME_GAP_V)   /*實(shí)時(shí)頁面報(bào)警時(shí)間顯示起始Y*/
#define REALTIME_ALARMTIME_END_Y        (REALTIME_SLIP_HEIGHT/2U-REALTIME_ALARMTIME_GAP_V*2U)   /*實(shí)時(shí)頁面報(bào)警時(shí)間顯示高度Y*/
/*設(shè)定房間名稱顯示區(qū)域----bottom*/
#define REALTIME_ROOM_START_X           REALTIME_ALARMTIME_START_X                              /*實(shí)時(shí)頁面房間名稱顯示起始X*/
#define REALTIME_ROOM_END_X             (REALTIME_LINE_END_X/2U)                                /*實(shí)時(shí)頁面房間名稱顯示長度X*/
#define REALTIME_ROOM_GAP_V             (2U)                                                    /*實(shí)時(shí)頁面房間名稱顯示垂直間隙*/
#define REALTIME_ROOM_START_Y(X)        (REALTIME_LINE_START_Y(X)+REALTIME_ROOM_GAP_V)          /*實(shí)時(shí)頁面房間名稱顯示起始Y*/
#define REALTIME_ROOM_END_Y             (REALTIME_SLIP_HEIGHT/2U-REALTIME_ALARMTIME_GAP_V*2U)   /*實(shí)時(shí)頁面房間名稱顯示高度Y*/
/*===菜單 按鈕最小間隙設(shè)定===*/
#define MENU_TITLE_START_Y            (0U)                                      /*菜單標(biāo)題欄起始Y*/
#define MENU_TITLE_END_Y              (UI_MAINWINDOW_HEIGHT*12/100)             /*菜單標(biāo)題欄高度Y*/
#define MENU_BOTTOM_START_Y           (UI_MAINWINDOW_HEIGHT*9/10)               /*菜單底部狀態(tài)欄起始Y*/
#define MENU_BOTTOM_END_Y             (UI_MAINWINDOW_HEIGHT-BOTTOM_START_Y)     /*菜單底部狀態(tài)欄高度Y*/
/*upper*/
#define MENU_DEVICE_STATE_START_X     (0U)                                      /*菜單設(shè)備狀態(tài)起始X*/
#define MENU_DEVICE_STATE_END_X       (UI_MAINWINDOW_WIDTH/4)                   /*菜單設(shè)備狀態(tài)長度X*/
  
#define MENU_TITLE_START_X            MENU_DEVICE_STATE_END_X                   /*菜單標(biāo)題起始X*/
#define MENU_TITLE_END_X              (UI_MAINWINDOW_WIDTH/2)                   /*菜單標(biāo)題長度X*/
                                                                                  
#define MENU_CLOCK_START_X            (UI_MAINWINDOW_WIDTH*3/4)                 /*菜單時(shí)鐘起始X*/
#define MENU_CLOCK_END_X              (UI_MAINWINDOW_WIDTH-MENU_CLOCK_START_X)  /*菜單時(shí)鐘長度X*/    
                                                                                  
/*bottom*/                                                                        
#define MENU_TIPS_OPT_START_X         (0U)                                      /*菜單操作提示起始X*/
#define MENU_TIPS_OPT_END_X           (UI_MAINWINDOW_WIDTH*3/10U)               /*菜單操作提示長度X*/
                                                                                  
#define MENU_TIPS_PAGENUM_START_X     MENU_TIPS_OPT_END_X                       /*菜單數(shù)目提示起始X*/
#define MENU_TIPS_PAGENUM_END_X       (UI_MAINWINDOW_WIDTH-MENU_TIPS_OPT_END_X) /*菜單數(shù)目提示長度X*/
/*菜單 按鈕屬性*/
#define MENU_BUTTON_START_X           (UI_MAINWINDOW_WIDTH*3/10)                /*菜單按鈕起始X*/ 
#define MENU_BUTTON_END_X             (UI_MAINWINDOW_WIDTH*4/10)                /*菜單按鈕長度X*/ 
#define MENU_BUTTON_V_NUM_MAX         (5U)                                      /*菜單最大允許按鈕數(shù)目*/
#define MENU_V_GAP_MIN                (5U)                                      /*菜單按鈕垂直間隙*/ 
#define MENU_BUTTON_ORIGIN_Y          MENU_TITLE_END_Y                          /*菜單按鈕起始Y*//*通過計(jì)算菜單按鈕允許高度Y*/
#define MENU_BUTTON_HEIGHT       \
((UI_MAINWINDOW_HEIGHT-MENU_TITLE_END_Y-MENU_BOTTOM_END_Y-(MENU_V_GAP_MIN*(MENU_BUTTON_V_NUM_MAX+1)))/MENU_BUTTON_V_NUM_MAX)
/*計(jì)算多個(gè)菜單按鈕Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1唯灵,高度*x不變*/  
#define MENU_MULTI_BUTTON_V_Y(X)   (MENU_BUTTON_ORIGIN_Y+MENU_V_GAP_MIN*(X+1)+MENU_BUTTON_HEIGHT*X) 
/*===設(shè)定產(chǎn)品名稱區(qū)域===*/
#define LOGO_PRODUCT_MAME_START_X     (UI_MAINWINDOW_WIDTH/2U)                  /*產(chǎn)品名稱起始X*/
#define LOGO_PRODUCT_MAME_START_Y     (UI_MAINWINDOW_HEIGHT*3/10U)              /*產(chǎn)品名稱起始Y*//*設(shè)定版本號區(qū)域*/
#define LOGO_VERSION_NUM_START_X      (UI_MAINWINDOW_WIDTH/2U)                  /*版本號起始X*/
#define LOGO_VERSION_NUM_START_Y      (UI_MAINWINDOW_HEIGHT*45/100U)            /*版本號起始Y*//*產(chǎn)品開發(fā)進(jìn)展區(qū)域*/
#define DEVELOPING_STATE_START_X      (UI_MAINWINDOW_WIDTH/2U)                  /*開發(fā)進(jìn)展起始X*/
#define DEVELOPING_STATE_START_Y      (UI_MAINWINDOW_HEIGHT*3/10U)              /*開發(fā)進(jìn)展起始Y*/
/*===設(shè)定密碼輸入對話框區(qū)域===*/
#define PASSWD_DIGLOG_BOX_START_X     (UI_MAINWINDOW_WIDTH*2/10U)               /*密碼輸入框起始X*/
#define PASSWD_DIGLOG_BOX_END_X       (UI_MAINWINDOW_WIDTH*6/10U)               /*密碼輸入框長度X*/
#define PASSWD_DIGLOG_BOX_START_Y     (UI_MAINWINDOW_HEIGHT*3/10U)              /*密碼輸入框起始Y*/
#define PASSWD_DIGLOG_BOX_END_Y       (UI_MAINWINDOW_HEIGHT*4/10U)              /*密碼輸入框高度Y*/
#define PASSWD_DIGLOG_BOX_TEXT_START_X  (5U)                                    /*密碼輸入框文本相對起始X*/
#define PASSWD_DIGLOG_BOX_TEXT_END_X    (150U)                                  /*密碼輸入框文本長度X*/
#define PASSWD_DIGLOG_BOX_TEXT_START_Y  (10U)                                   /*密碼輸入框文本相對起始Y*/
#define PASSWD_DIGLOG_BOX_TEXT_END_Y    (20U)                                   /*密碼輸入框文本高度Y*/
#define PASSWD_DIGLOG_BOX_EDIT_START_X  (PASSWD_DIGLOG_BOX_END_X*3/10)          /*密碼輸入框編輯相對起始X*/
#define PASSWD_DIGLOG_BOX_EDIT_END_X    (PASSWD_DIGLOG_BOX_END_X*4/10)          /*密碼輸入框編輯長度X*/
#define PASSWD_DIGLOG_BOX_EDIT_START_Y  (PASSWD_DIGLOG_BOX_END_Y*5/10)          /*密碼輸入框編輯相對起始Y*/
#define PASSWD_DIGLOG_BOX_EDIT_END_Y    (25U)                                   /*密碼輸入框編輯高度Y*/
/*===設(shè)定電流環(huán)校準(zhǔn)頁面文本及按鈕區(qū)域===*/
#define CURRENTLOOP_BUTTON_START_X    (UI_MAINWINDOW_WIDTH*2/10U)               /*校準(zhǔn)按鈕起始X*/
#define CURRENTLOOP_BUTTON_END_X      (UI_MAINWINDOW_WIDTH*6/10U)               /*校準(zhǔn)按鈕長度X*/
#define CURRENTLOOP_BUTTON_START_Y    (BOTTOM_START_Y-2U)                       /*校準(zhǔn)按鈕起始Y*/
#define CURRENTLOOP_BUTTON_END_Y      BOTTOM_END_Y                              /*校準(zhǔn)按鈕高度Y*/
#define CURRENTLOOP_TEXT_START_X    (UI_MAINWINDOW_WIDTH*4/100U)                /*校準(zhǔn)文本起始X*/
#define CURRENTLOOP_TEXT_END_X      (UI_MAINWINDOW_WIDTH*92/100U)               /*校準(zhǔn)按鈕長度X*/
#define CURRENTLOOP_MULTI_TEXT_V_GAP        (5U)                                /*文本垂直間隙*/
#define CURRENTLOOP_TEXT_NUM_MAX            (4U)                                /*最大允許文本數(shù)目*/
#define CURRENTLOOP_TEXT_ORIGIN_Y           TITLE_END_Y                         /*文本起始Y*//*通過計(jì)算校準(zhǔn)頁面文本允許高度Y*/
#define CURRENTLOOP_TEXT_HEIGHT       \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-CURRENTLOOP_BUTTON_END_Y-(CURRENTLOOP_MULTI_TEXT_V_GAP*(CURRENTLOOP_TEXT_NUM_MAX+1)))/CURRENTLOOP_TEXT_NUM_MAX)
/*計(jì)算多個(gè)文本Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1,高度x不變*/  
#define CURRENTLOOP_MULTI_TEXT_V_Y(X)   (CURRENTLOOP_TEXT_ORIGIN_Y+CURRENTLOOP_MULTI_TEXT_V_GAP*(X+1)+CURRENTLOOP_TEXT_HEIGHT*X) 
/*===設(shè)定歷史數(shù)據(jù)表格及轉(zhuǎn)動圓區(qū)域===*/
#define HISTRORY_CIRCLE_START_X     (UI_MAINWINDOW_WIDTH/2U)                    /*圓心在X的起點(diǎn)*/
#define HISTRORY_CIRCLE_START_Y     (UI_MAINWINDOW_HEIGHT/2U)                   /*圓心在Y的起點(diǎn)*/
#define HISTRORY_CIRCLE_R_SIZE      (UI_MAINWINDOW_HEIGHT/10U)                  /*設(shè)定圓的半徑*/
#define HISTRORY_CIRCLE_ANGLE_START (0)                                         /*設(shè)定圓的起始角度--通過增大實(shí)現(xiàn)轉(zhuǎn)動*/
#define HISTRORY_CIRCLE_ANGLE_END   (330)                                       /*設(shè)定圓的終點(diǎn)角度*/
#define HISTRORY_REDRAW_RECT_START_X    (HISTRORY_CIRCLE_START_X-HISTRORY_CIRCLE_R_SIZE-1)        /*重繪區(qū)域起始X*/
#define HISTRORY_REDRAW_RECT_END_X      (HISTRORY_REDRAW_RECT_START_X+HISTRORY_CIRCLE_R_SIZE*2+1) /*重繪區(qū)域終點(diǎn)X*/    
#define HISTRORY_REDRAW_RECT_START_Y    (HISTRORY_CIRCLE_START_Y-HISTRORY_CIRCLE_R_SIZE-1)        /*重繪區(qū)域起始Y*/  
#define HISTRORY_REDRAW_RECT_END_Y      (HISTRORY_REDRAW_RECT_START_Y+HISTRORY_CIRCLE_R_SIZE*2+1) /*重繪區(qū)域終點(diǎn)Y*/
#define HISTRORY_LISTVIEW_COLUMN_1_SIZE (UI_MAINWINDOW_WIDTH*2/10U)                                                             /*表格寬度*/
#define HISTRORY_LISTVIEW_COLUMN_2_SIZE (UI_MAINWINDOW_WIDTH*4/10U)                                                             /*表格寬度*/
#define HISTRORY_LISTVIEW_COLUMN_3_SIZE (UI_MAINWINDOW_WIDTH-HISTRORY_LISTVIEW_COLUMN_1_SIZE-HISTRORY_LISTVIEW_COLUMN_2_SIZE)   /*表格寬度*/
#define HISTRORY_LISTVIEW_HEAD_HEIGHT   (25U)                                           /*表格標(biāo)題高度*/
#define HISTRORY_LISTVIEW_V_NUM_MAX     (8U)                                            /*表格最大允許行數(shù)目*/
#define HISTRORY_LISTVIEW_ORIGIN_Y      (HISTRORY_LISTVIEW_HEAD_HEIGHT+MENU_TITLE_END_Y)/*表格內(nèi)容起始Y*/
/*通過計(jì)算表格允許高度Y*/
#define HISTRORY_LISTVIEW_ROW_HEIGHT       \
((UI_MAINWINDOW_HEIGHT-HISTRORY_LISTVIEW_ORIGIN_Y)/HISTRORY_LISTVIEW_V_NUM_MAX)
/*===設(shè)定通道搜索頁面文本顯示屬性===*/
#define CHANNELSEARCH_LABEL_START_X (UI_MAINWINDOW_WIDTH*2/100U)                           /*通道搜索標(biāo)簽起始X*/    
#define CHANNELSEARCH_LABEL_END_X   (UI_MAINWINDOW_WIDTH*14/100U)                          /*通道搜索標(biāo)簽長度X*/
#define CHANNELSEARCH_LABEL_START_Y (UI_MAINWINDOW_HEIGHT*38/100U)                         /*通道搜索標(biāo)簽起始Y*/
#define CHANNELSEARCH_LABEL_END_Y   (UI_MAINWINDOW_HEIGHT*6/100U)                          /*通道搜索標(biāo)簽高度Y*/
#define CHANNELSEARCH_TIPS_START_X  (0U)                                                   /*通道搜索提示起始X*/
#define CHANNELSEARCH_TIPS_END_X    (UI_MAINWINDOW_WIDTH-CHANNELSEARCH_TIPS_START_X*2U)    /*通道搜索提示長度X*/
#define CHANNELSEARCH_TIPS_START_Y  (CHANNELSEARCH_LABEL_START_Y+CHANNELSEARCH_LABEL_END_Y)/*通道搜索提示起始Y*/
#define CHANNELSEARCH_TIPS_END_Y    (UI_MAINWINDOW_HEIGHT-CHANNELSEARCH_TIPS_START_Y)      /*通道搜索提示高度Y*/
/*搜索結(jié)果 正方形屬性*/
#define CHANNELSEARCH_RECT_START_Y         (CHANNELSEARCH_LABEL_START_Y+CHANNELSEARCH_LABEL_END_Y+2) /*矩形起始Y*/
#define CHANNELSEARCH_MULTI_RECT_X_GAP     (2U)                                                      /*矩形水平間隙*/
#define CHANNELSEARCH_MULTI_RECT_Y_GAP     (2U)                                                      /*矩形垂直間隙*/
#define CHANNELSEARCH_RECT_H_NUM_MAX       (12U)                                                     /*最大允許矩形數(shù)目*/
#define CHANNELSEARCH_RECT_LEFT_INVALID_LEN     (0U)                                                 /*左邊不可用長度*/
#define CHANNELSEARCH_RECT_RIGHT_INVALID_LEN    (0U)                                                 /*右邊不可用長度*/
#define CHANNELSEARCH_RECT_ORIGIN_X        CHANNELSEARCH_RECT_LEFT_INVALID_LEN                       /*矩形起始X*/
/*通過計(jì)算矩形允許寬度X*/
#define CHANNELSEARCH_RECT_WIDTH       \
((UI_MAINWINDOW_WIDTH-CHANNELSEARCH_RECT_LEFT_INVALID_LEN-CHANNELSEARCH_RECT_RIGHT_INVALID_LEN-(CHANNELSEARCH_MULTI_RECT_X_GAP*(CHANNELSEARCH_RECT_H_NUM_MAX+1)))/CHANNELSEARCH_RECT_H_NUM_MAX)
#define CHANNELSEARCH_RECT_END_Y          (CHANNELSEARCH_RECT_WIDTH)                                 /*矩形寬度Y*/
/*計(jì)算多個(gè)矩形X坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1隙轻,高度x不變*/  
#define CHANNELSEARCH_MULTI_RECT_H_X(X)   (CHANNELSEARCH_RECT_ORIGIN_X+CHANNELSEARCH_MULTI_RECT_X_GAP*((X%CHANNELSEARCH_RECT_H_NUM_MAX)+1)+CHANNELSEARCH_RECT_WIDTH*(X%CHANNELSEARCH_RECT_H_NUM_MAX))
/*計(jì)算多個(gè)矩形Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1埠帕,高度x不變*/
#define CHANNELSEARCH_MULTI_RECT_Y_X(X)   (CHANNELSEARCH_RECT_START_Y+CHANNELSEARCH_MULTI_RECT_Y_GAP*((X/CHANNELSEARCH_RECT_H_NUM_MAX)+1)+CHANNELSEARCH_RECT_END_Y*(X/CHANNELSEARCH_RECT_H_NUM_MAX))
/*通道參數(shù)設(shè)置頁面按鈕文字空格,用于居中文字*/
#define CHANNEL_ADDSPACE_NUM_MAX        17U                                     /*按鈕標(biāo)簽文本添加空格數(shù),應(yīng) < 20 */
/*===設(shè)定氣體類型索引頁面顯示屬性===*/
#define ITEM_INDEX_PAGE_START_X                         (0U)                                                                /*氣體類型參數(shù)索引頁面起始X*/
#define ITEM_INDEX_PAGE_END_X                             UI_MAINWINDOW_WIDTH                                    /*氣體類型參數(shù)索引頁面長度X*/
#define ITEM_INDEX_PAGE_START_Y                         (0U)                                                                /*氣體類型參數(shù)索引頁面起始Y*/
#define ITEM_INDEX_PAGE_END_Y                             UI_MAINWINDOW_HEIGHT                              /*氣體類型參數(shù)索引頁面長度Y*/    
/*頁面標(biāo)題*/
#define ITEM_INDEX_PAGE_DEVICE_STATE_START_X   ITEM_INDEX_PAGE_START_X                                                                                                     /*氣體類型參數(shù)索引頁面設(shè)備狀態(tài)起始X*/
#define ITEM_INDEX_PAGE_DEVICE_STATE_END_X     (ITEM_INDEX_PAGE_END_X*2/10U)                                                                                               /*氣體類型參數(shù)索引頁面設(shè)備狀態(tài)長度X*/
  
#define ITEM_INDEX_PAGE_TITLE_START_X          (ITEM_INDEX_PAGE_DEVICE_STATE_START_X+ITEM_INDEX_PAGE_DEVICE_STATE_END_X)          /*氣體類型參數(shù)索引頁面頁面標(biāo)題起始X*/
#define ITEM_INDEX_PAGE_TITLE_END_X            (ITEM_INDEX_PAGE_END_X*6/10U)                                                                                               /*氣體類型參數(shù)索引頁面頁面標(biāo)題長度X*/
  
#define ITEM_INDEX_PAGE_CLOCK_START_X          (ITEM_INDEX_PAGE_TITLE_START_X+ITEM_INDEX_PAGE_TITLE_END_X)                                 /*氣體類型參數(shù)索引頁面頁面時(shí)鐘起始X*/
#define ITEM_INDEX_PAGE_CLOCK_END_X            (ITEM_INDEX_PAGE_END_X-PAGE_CLOCK_START_X)        /*氣體類型參數(shù)索引頁面時(shí)鐘長度X*/ 
#define ITEM_INDEX_PAGE_TITLE_START_Y          ITEM_INDEX_PAGE_START_Y                        /*氣體類型參數(shù)索引頁面標(biāo)題欄起始Y*/
#define ITEM_INDEX_PAGE_TITLE_END_Y            (ITEM_INDEX_PAGE_END_Y/10)                       /*氣體類型參數(shù)索引頁面標(biāo)題欄高度Y*/
/*索引頁面按鈕,垂直布局*/
#define ITEM_INDEX_PAGE_BUTTON_START_Y        (ITEM_INDEX_PAGE_TITLE_START_Y+ITEM_INDEX_PAGE_TITLE_END_Y)      /*氣體類型參數(shù)索引頁面按鈕顯示起始Y*/
#define ITEM_INDEX_PAGE_BUTTON_X_GAP                (10U)                             /*氣體類型參數(shù)索引頁面按鈕水平間隙*/
#define ITEM_INDEX_PAGE_BUTTON_Y_GAP                (10U)                             /*氣體類型參數(shù)索引頁面按鈕垂直間隙*/
#define ITEM_INDEX_PAGE_BUTTON_H_NUM_MAX      (5U)                                 /*氣體類型參數(shù)索引頁面按鈕水平數(shù)量*/
#define ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX      (6U)                                 /*氣體類型參數(shù)索引頁面按鈕放置行數(shù)以1開始*/
#define ITEM_INDEX_PAGE_BUTTON_ORIGIN_X       (ITEM_INDEX_PAGE_START_X+0U)      /*氣體類型參數(shù)索引頁面按鈕顯示起始X*/
/*通過計(jì)算每個(gè)頁面最多按鈕數(shù)目*/
#define ITEM_INDEX_PAGE_BUTTON_NUM_MAX                (ITEM_INDEX_PAGE_BUTTON_H_NUM_MAX*ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX)
/*通過計(jì)算個(gè)按鈕允許寬度X*/
#define ITEM_INDEX_PAGE_BUTTON_WIDTH       \
((ITEM_INDEX_PAGE_END_X-ITEM_INDEX_PAGE_BUTTON_ORIGIN_X-(ITEM_INDEX_PAGE_BUTTON_X_GAP*(ITEM_INDEX_PAGE_BUTTON_H_NUM_MAX+1)))/ITEM_INDEX_PAGE_BUTTON_H_NUM_MAX)
/*通過計(jì)算個(gè)按鈕允許高度Y*/
#define ITEM_INDEX_PAGE_BUTTON_END_Y       \
((ITEM_INDEX_PAGE_END_Y-ITEM_INDEX_PAGE_TITLE_END_Y-(ITEM_INDEX_PAGE_BUTTON_Y_GAP*(ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX+1)))/ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX)  /*索引頁面按鈕寬度Y*/
/*計(jì)算按鈕X坐標(biāo)起點(diǎn),數(shù)目從0開始,則垂直數(shù)目未到情況下X起點(diǎn)不變玖绿,每列滿則向X增大一個(gè)寬度*/  
#define ITEM_INDEX_PAGE_BUTTON_MULTI_RECT_H_X(X)   (ITEM_INDEX_PAGE_BUTTON_ORIGIN_X+ITEM_INDEX_PAGE_BUTTON_X_GAP*((X/ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX)+1)+ITEM_INDEX_PAGE_BUTTON_WIDTH*(X/ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX))
/*計(jì)算按鈕Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1敛瓷,高度x不變*/
#define ITEM_INDEX_PAGE_BUTTON_MULTI_RECT_Y_X(X)   (ITEM_INDEX_PAGE_BUTTON_START_Y+ITEM_INDEX_PAGE_BUTTON_Y_GAP*((X%ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX)+1)+ITEM_INDEX_PAGE_BUTTON_END_Y*(X%ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX))
/* Exported typedefines ------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macros------------------------------------------------------------*/
#define ARRAYNUM(arr_name)     (uint32_t)(sizeof(arr_name)/sizeof(*(arr_name)))
/* Exported functions prototypes ---------------------------------------------*/
void millsec_IRQ_handler(void);
uint32_t get_time_ms(void);
uint32_t get_time_sec(void);#ifdef __cplusplus //end extern c
}
#endif
#endif
/******************************** End of file *********************************/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市斑匪,隨后出現(xiàn)的幾起案子呐籽,更是在濱河造成了極大的恐慌,老刑警劉巖蚀瘸,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狡蝶,死亡現(xiàn)場離奇詭異,居然都是意外死亡贮勃,警方通過查閱死者的電腦和手機(jī)贪惹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寂嘉,“玉大人奏瞬,你說我怎么就攤上這事〉媸停” “怎么了丝格?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棵譬。 經(jīng)常有香客問我显蝌,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任曼尊,我火速辦了婚禮酬诀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘骆撇。我一直安慰自己瞒御,他們只是感情好想虎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布秉溉。 她就那樣靜靜地躺著,像睡著了一般章蚣。 火紅的嫁衣襯著肌膚如雪涌乳。 梳的紋絲不亂的頭發(fā)上蜻懦,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天,我揣著相機(jī)與錄音夕晓,去河邊找鬼宛乃。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蒸辆,可吹牛的內(nèi)容都是我干的征炼。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼躬贡,長吁一口氣:“原來是場噩夢啊……” “哼谆奥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起逗宜,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤雄右,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后纺讲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡囤屹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年熬甚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肋坚。...
    茶點(diǎn)故事閱讀 38,768評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乡括,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出智厌,到底是詐尸還是另有隱情诲泌,我是刑警寧澤,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布铣鹏,位于F島的核電站敷扫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏诚卸。R本人自食惡果不足惜葵第,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一绘迁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卒密,春花似錦缀台、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鼎俘,卻和暖如春依疼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背而芥。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工律罢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人棍丐。 一個(gè)月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓误辑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親歌逢。 傳聞我的和親對象是個(gè)殘疾皇子巾钉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容