• 菜单范式


    • 所有页面均看作菜单
    • 菜单变量定义如下:
    //-菜单结构体(注意!这里的菜单含义比较广,标定零点页面也可能看作是菜单)-
    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是按键复用时用,例如加减键有时也作为上移下移键

  • 相关阅读:
    Construct Binary Tree from Preorder and Inorder Traversal
    Construct Binary Tree from Inorder and Postorder Traversal
    Maximum Depth of Binary Tree
    Sharepoint 2013 创建TimeJob 自动发送邮件
    IE8 不能够在Sharepoint平台上在线打开Office文档解决方案
    TFS安装与管理
    局域网通过IP查看对方计算机名,通过计算机名查看对方IP以及查看在线所有电脑IP
    JS 隐藏Sharepoint中List Item View页面的某一个字段
    SharePoint Calculated Column Formulas & Functions
    JS 两个一组数组转二维数组
  • 原文地址:https://www.cnblogs.com/smileintheday/p/6425363.html
Copyright © 2020-2023  润新知