zoukankan      html  css  js  c++  java
  • 菜单范式

    • 所有页面均看作菜单
    • 菜单变量定义如下:
    //-菜单结构体(注意!这里的菜单含义比较广,标定零点页面也可能看作是菜单)-
    typedef struct MenuStructure
    {
        unsigned char         ItemIndex;            //-菜单项索引号-
        unsigned int          ParentMenuID;         //-父菜单的编号(编号请参照枚举定义PagesID)-
        unsigned int          ChildMenuID;          //-子菜单的编号-
        unsigned int          MenuName[2][16];      //-菜单项的内容(GB2312编码)-
    
        void (*SpecialDeal)(const struct MenuStructure *pMenu, MenuPara *pMenuPara, int LineIndex);
        void (*SetKeyDeal) (const struct MenuStructure *pMenu,  MenuPara *pMenuPara);
        void (*UpKeyDeal) (const struct MenuStructure *pMenu,  MenuPara *pMenuPara);
        void (*DownKeyDeal) (const struct MenuStructure *pMenu,  MenuPara *pMenuPara); 
        void (*IncKeyDeal) (const struct MenuStructure *pMenu,  MenuPara *pMenuPara);
        void (*DecKeyDeal) (const struct MenuStructure *pMenu,  MenuPara *pMenuPara); 
    
    }MenuStructure;
    

    其中ItemIndex是菜单项的索引号,不一定跟RowIndex一致,可能存在同一行中有两个选择项的情况(或者是存在宏编译时,占位置,此时如果通过RowIndex来处理则代码不能通用);MenuName[2][16]是针对双语,且LCD宽为64个dot,8个字符;SpecialDeal是针对显示内容的特殊绘制,如果菜单显示的为固定内容,此项为空;xxxKeyDeal则为按键处理,最好物理按键对应,有多少个按键,定义多少个函数。

    //-菜单参数(注意!必须和菜单结构体相匹配)-
    typedef struct MenuPara
    {
        signed         char RowIndex;                //-菜单行焦点索引号-
        signed         char ColumnIndex;             //-菜单列焦点索引号(以英文字符大小为单位)-
        unsigned       char RowReverseSwitch;        //-Enable/Disable-
        unsigned       char ColumnReverseSwitch;     //-Enable/Disable-
        unsigned       char ColumnReverseUnit;       //-列焦点的单位(以英文字符大小为单位)-
        const unsigned char NumOfRows;               //-菜单项的行数-
        const unsigned char IsMultiplex;             //--
        void (*Reset)(struct MenuPara *pMenuPara);
    }MenuPara;
    

    其中RowIndex表示当前光标(焦点)所在的行,下移或者上移后,RowIndex随之改变;

    ColumnIndex是菜单列焦点起始索引号,有时只需要某一行的部分获取焦点;RowReverseSwitch、ColumnReverseSwitch和ColumnRerverseUnit是设置焦点时所用,跟ColumnIndex配合使用,如果需要一整行获得焦点,则RowReverseSwtich=Enable,ColumnIndex+ColumnReverSwitch+ColumnRerverseUnit无效;如果需要一行中的部分获得焦点,则RowReverseSwitch=Disable,ColumnReverseSwitch=Enable,然后以ColumnIndex为起始,ColumnReverseUnit为大小的列获得焦点。其中列焦点和列焦点单位均是以英文字符为单位。

    NumOfRows是所有菜单项所占的行数,不是菜单项总数,存在两个菜单项占1行的情况

    IsMultiplex是按键复用时用,例如加减键有时也作为上移下移键

  • 相关阅读:
    sql 内连接外链接
    深入剖析java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue
    mysql关闭以及重启密码
    学习---书籍
    volatile修饰符
    System.out.println和System.err.println的区别
    懒加载和急加载(lazy/eager)
    load与get在hiberate中的区别
    html
    js
  • 原文地址:https://www.cnblogs.com/smileintheday/p/6425363.html
Copyright © 2011-2022 走看看