搜索
bottom↓
回复: 29

两种界面按键切换程序架构哪种好一点?

[复制链接]

出0入0汤圆

发表于 2019-8-15 09:49:19 | 显示全部楼层 |阅读模式
第一种:当前界面下判断按键,然后切换界面,或进行界面局部修改显示操作
第二种:根据按键判断当前处于什么界面,然后切换界面,或进行界面局部修改显示操作

大家一般用哪种?或有其他办法?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出140入8汤圆

发表于 2019-8-15 09:53:58 | 显示全部楼层
一般使用第一种

出0入0汤圆

发表于 2019-8-15 09:55:59 | 显示全部楼层
我使用第二种,感觉程序结构不太好,再研究一下。

出0入0汤圆

发表于 2019-8-15 10:43:10 | 显示全部楼层
我觉着得看你的见面数量和按键了数量。

出330入0汤圆

发表于 2019-8-15 10:48:10 来自手机 | 显示全部楼层
第一种,论坛上可以挖掘出丰富的资源来用。

出0入0汤圆

发表于 2019-8-15 10:48:32 | 显示全部楼层
第二?  第一种耦合度会更高吧

出0入0汤圆

 楼主| 发表于 2019-8-15 10:48:49 | 显示全部楼层
沉默胜过白金 发表于 2019-8-15 10:43
我觉着得看你的见面数量和按键了数量。

我个人觉得还是第一种好理解一些,从状态机的角度讲,显示是状态,按键是条件。

出0入0汤圆

发表于 2019-8-15 10:50:47 | 显示全部楼层
建议第一种,按状态划分的话,当前状态下只处理当前需要的按键事件,这样做结构比较清晰

出0入0汤圆

发表于 2019-8-15 10:54:38 | 显示全部楼层
事件驱动,直接调用当前页面的回调,各页面独立管理自己的按键响应

出0入0汤圆

 楼主| 发表于 2019-8-15 11:01:26 | 显示全部楼层
styleno1 发表于 2019-8-15 10:54
事件驱动,直接调用当前页面的回调,各页面独立管理自己的按键响应

你说的是第一种吧?

出0入8汤圆

发表于 2019-8-15 11:04:08 | 显示全部楼层
第一种。

出0入0汤圆

发表于 2019-8-15 11:11:31 | 显示全部楼层
一样的,只是调用顺序不同。你的目的是一个按键,一个界面。对应一个操作。在组织跳转的时候是两个选择的结构,哪一个先来都一样。对于小的项目,你把一个界面和对应函数放在一个文件,大的多级菜单有通用的按键比如返回上一级之类的你可以把一个按键对应的功能放在一个文件。

出40入42汤圆

发表于 2019-8-15 11:58:27 | 显示全部楼层
按照人的理解角度,第一种是比较容易理解的
但如果考虑到按键的扫描,如果每个界面都有重复的按键扫描代码,那也是很烦的

出0入17汤圆

发表于 2019-8-15 12:12:11 | 显示全部楼层
一般都是第一种。 论坛有菜单的例子。

出0入0汤圆

 楼主| 发表于 2019-8-15 12:45:49 | 显示全部楼层
落叶知秋 发表于 2019-8-15 11:58
按照人的理解角度,第一种是比较容易理解的
但如果考虑到按键的扫描,如果每个界面都有重复的按键扫描代码 ...

按键一般做成一个函数来调用的吧?

另外,只需判断允许操作的按键就可以吧?

出0入10汤圆

发表于 2019-8-15 12:59:31 | 显示全部楼层
我第一种,当前界面下,通过按键选择功能

出0入0汤圆

发表于 2019-8-15 13:15:55 | 显示全部楼层
第一种。。。

出0入0汤圆

发表于 2019-8-15 13:29:48 | 显示全部楼层
第一种,每个界面可以独立一个C文件,独立的按键处理程序,程序清晰,对于多界面的项目,更适合多人协作开发,互不影响

出0入0汤圆

发表于 2019-8-15 13:32:59 | 显示全部楼层
本帖最后由 horizon0315 于 2019-8-15 13:34 编辑

贴一个我们现在用的界面结构,这个文件内容是其中的一个界面,其他的都类似结构。几十个界面,配合比较理想
进入这个界面需要先调用界面初始化函数,然后根据消息调用消息处理函数。

#include "UI_Includes.h"
#include "UI_Start.h"
//0.首界面控件定义
const Window Window_StartPage={gStartPage,0,0,480,320, SystemColor,0};
const Shape Shape_StartPage={gStartPage,10,10,460,300,2,SystemColor,SystemColor,sRectangle};

const Label Label_StartPage[]={
{gStartPage,30,30,CommonLabelColor,SystemColor,24,"编号:",1},
{gStartPage,158,152,CommonLabelColor,SystemColor,24,"( Ver4.",1},
{gStartPage,290,152,CommonLabelColor,SystemColor,24,")",1}
};
const Variable Variable_StartPage[]={
{gStartPage,240,152,SystemColor,SystemColor,24,Version,0,0,&SystemSoftwareVision,0,1},                  //版本号
{gStartPage,70,210,Red,SystemColor,24,String,0,999,StatusVariableString1,0,1},                                        //提示信息
};


//45,开始页
void UI_StartPage_Init(void)
{
        //注册本页面的控件
        GUI_Register_Window(&Window_StartPage);
        GUI_Register_Label(Label_StartPage,4);       
       
        GUI_WindowInit();  //绘制界面
}

//开始页
void UI_StartPage_MessageProcess(void)
{
        u16 msgtype,msgcontent;
       
        msgtype = UI_Message.MessageType;
        msgcontent = UI_Message.MessageContent;
       
        //--------------------------------------------------------------------------------------------------------------
        //按键处理
        if(msgtype == MsgType_KeyPressUp)  //按键发来的消息
        {
                if(msgcontent == kEnter)                                //按下确认键
                {                       
                        if(RegisterFlag == 1)    //正常
                        {
                                UI_Switch(gMainPage);                //跳转到主页:
                        }
                        else
                        {       
                                UI_Switch(gFactoryParameter);                //跳到工厂设置 页
                        }
                }
        }
        //--------------------------------------------------------------------------------------------------------------
        //串口消息处理
        else if(msgtype == MsgType_UartData) //串口发来的消息
        {

        }
       
}

出0入10汤圆

发表于 2019-8-15 13:58:36 | 显示全部楼层
肯定第一种啊。。第二种 耦合度比较高  第一种  界面按键可以做到分离的

出40入42汤圆

发表于 2019-8-15 14:09:26 | 显示全部楼层
prince2010 发表于 2019-8-15 12:45
按键一般做成一个函数来调用的吧?

另外,只需判断允许操作的按键就可以吧? ...

扫描按键是封装成函数调用,但界面一多总得到处调用这个接口,只是觉得这样比较麻烦而已
如果按键处理比较简单,没有用消息那种存储机制的话,界面切换中间按键动作就完全无效的
有些好的界面框架应该还是有考虑的吧,很早以前就用过第一种方式写裸机界面,那时候觉得很烦,
之后没怎么再用矩阵按键去做复杂的界面处理了

出0入0汤圆

发表于 2019-8-16 07:58:53 来自手机 | 显示全部楼层
落叶知秋 发表于 2019-8-15 14:09
扫描按键是封装成函数调用,但界面一多总得到处调用这个接口,只是觉得这样比较麻烦而已
如果按键处理比 ...

每个界面处理按键比较好。如果耦合一起的话,后续修改麻烦。

出40入42汤圆

发表于 2019-8-16 08:41:18 | 显示全部楼层
Ray______ 发表于 2019-8-16 07:58
每个界面处理按键比较好。如果耦合一起的话,后续修改麻烦。

没有说楼主位的第二种方式更好……只是根据以往的印象觉得第一种麻烦
说到底就是不喜欢做界面而已

出100入85汤圆

发表于 2019-8-16 08:45:24 来自手机 | 显示全部楼层
界面切换是因为按了按键,所以按键是触发条件。就算你按键几百个,界面只有两三个,也是第一种合适。

出0入0汤圆

发表于 2019-8-20 14:35:59 | 显示全部楼层
第一种比较好

出0入0汤圆

发表于 2019-8-20 14:44:04 | 显示全部楼层
建议第一种

出0入0汤圆

发表于 2019-8-26 21:32:20 来自手机 | 显示全部楼层
第一种,按键行为做成可注册的,加载界面的同时加载按键响应函数。

出50入4汤圆

发表于 2019-8-26 23:07:06 来自手机 | 显示全部楼层
我用的是第一种

出0入4汤圆

发表于 2019-8-27 15:09:48 | 显示全部楼层
1.  一个页面一个文件, 像windows里的多窗口一样.

出0入0汤圆

发表于 2019-8-27 16:23:27 | 显示全部楼层
按人的逻辑还是第一种
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 12:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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