硬汉嵌入式论坛

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

[μCGUI] UC/GUI3.90中通过点击一个BUTTON1切换一个界面,BUTTON2返回上一个界面!

[复制链接]

27

主题

94

回帖

175

积分

初级会员

积分
175
发表于 2018-3-23 15:25:10 | 显示全部楼层 |阅读模式
界面设置用的UC/GUI3.90.实现的功能就是:点击BUTTON1从主界面中切换到另一个界面中,然后在第二个界面中点击BUTTON2就返回上一个界面!
求大佬们指点下,最好是有源码参考下的,感激不尽!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2018-3-23 15:27:16 | 显示全部楼层
我们新版emWin教程第64章就是这种例子。
http://www.armbbs.cn/forum.php?m ... &extra=page%3D1
回复

使用道具 举报

27

主题

94

回帖

175

积分

初级会员

积分
175
 楼主| 发表于 2018-3-23 15:39:05 | 显示全部楼层
eric2013 发表于 2018-3-23 15:27
我们新版emWin教程第64章就是这种例子。
http://www.armbbs.cn/forum.php?mod=viewthread&tid=19834&ex ...

哇,真是雪中的大火炉啊,!每次发帖都是硬汉大佬很快回复,对于新入行的我来说,真的是帮助很大!真心感激!
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
发表于 2018-3-24 06:42:49 | 显示全部楼层
mark,过几天试试
回复

使用道具 举报

27

主题

94

回帖

175

积分

初级会员

积分
175
 楼主| 发表于 2018-3-24 09:33:25 | 显示全部楼层
eric2013 发表于 2018-3-23 15:27
我们新版emWin教程第64章就是这种例子。
http://www.armbbs.cn/forum.php?mod=viewthread&tid=19834&ex ...

硬汉大佬,我照你这个例程做了,在你的那个实体按键实现操作基础上做的修改。
void MainTask(void)
{
   GUI_TIMER_HANDLE hTimer;
       
    GUI_Init();
       
        /* 使能UTF-8编码 */  
        GUI_UC_SetEncodeUTF8();
       
    WM_SetDesktopColor(Colorspicture[255]);      /* Automacally update desktop window */
    WM_SetCreateFlags(WM_CF_MEMDEV);  /* Use memory devices on all windows to avoid flicker */

                /* 创建定时器,为轮询按键服务 */       
        hTimer = GUI_TIMER_Create(_cbTimer, /* 回调函数 */
                                                         1000,      /* 绝对时间,设置系统上电后1s作为溢出时间 */
                                                         0x01,      /* 可以任务此参数是区分不同定时器的ID,方便多个定时使用同一个回调函数 */
                                                         0);        /* 保留,暂时未用到 */
       
        /* 设置定时器周期为20ms */
        GUI_TIMER_SetPeriod(hTimer, 20);
        CreateFramewin1();
        //GUI_CreateDialogBox(_aDialogCreate1, GUI_COUNTOF(_aDialogCreate1), &_cbCallback1, WM_HBKWIN, 0, 0);
        while(1)
        {       
                GUI_Delay(100);
        }
}

在第一个界面的回调函数里的BUTTON0中入下面代码,
当然CreateFramewin2()这个函数是第二个界面,
case GUI_ID_BUTTON0:
                    switch(NCode)
                    {
                                                case WM_NOTIFICATION_CLICKED:
                                                       
                                                        break;
                                               
                        case WM_NOTIFICATION_RELEASED:
                           
                                                                GUI_EndDialog(pMsg->hWin, 0);                                               
                                                                CreateFramewin2();

                                                break;
                    }

但是我烧录到开发板时,实体按键来操作点击BUTTON0没有做界面的切换。
大佬什么原因啊?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2018-3-24 09:38:55 | 显示全部楼层
Mark 发表于 2018-3-24 09:33
硬汉大佬,我照你这个例程做了,在你的那个实体按键实现操作基础上做的修改。
void MainTask(void)
{  ...

两个问题,一个是看看聚焦到你要操作的按钮上了没,聚焦了的话,按钮边界会有变化。

另一个就是你在这个回调函数里面加个串口打印之类的东西,看看收到消息了没。
回复

使用道具 举报

27

主题

94

回帖

175

积分

初级会员

积分
175
 楼主| 发表于 2018-3-24 09:44:59 | 显示全部楼层
eric2013 发表于 2018-3-24 09:38
两个问题,一个是看看聚焦到你要操作的按钮上了没,聚焦了的话,按钮边界会有变化。

另一个就是你在这 ...

是有聚焦的,在BUTTON0的外圈有一圈虚线,然后我也在这个回调函数里加过打印
static void _cbCallback1(WM_MESSAGE * pMsg)
{
    int NCode, Id;
    WM_HWIN hWin = pMsg->hWin;
        printf("test1\r\n");
    switch (pMsg->MsgId)
    {
        case WM_PAINT:
            PaintDialog1(pMsg);
                       
            break;
        case WM_INIT_DIALOG:
            InitDialog1(pMsg);
            break;
        case WM_KEY:
            switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
            {
                case GUI_KEY_ESCAPE:
                    GUI_EndDialog(hWin, 1);
                    break;
                case GUI_KEY_ENTER:
                    GUI_EndDialog(hWin, 0);
                    break;
            }
            break;
        case WM_NOTIFY_PARENT:
            Id = WM_GetId(pMsg->hWinSrc);
            NCode = pMsg->Data.v;        
            switch (Id)
            {
                case GUI_ID_OK:
                    if(NCode==WM_NOTIFICATION_RELEASED)
                        GUI_EndDialog(hWin, 0);
                    break;
                case GUI_ID_CANCEL:
                    if(NCode==WM_NOTIFICATION_RELEASED)
                        GUI_EndDialog(hWin, 0);
                    break;
                                       
                                case GUI_ID_BUTTON0:
                    switch(NCode)
                    {
                                                case WM_NOTIFICATION_CLICKED:
                                                       
                                                        break;
                                               
                        case WM_NOTIFICATION_RELEASED:
                                                                printf("test2\r\n");
                                                                GUI_EndDialog(pMsg->hWin, 0);                                               
                                                                CreateFramewin2();
                                                       break;
                    }
                    break;
                               
            }
            break;
        default:
            WM_DefaultProc(pMsg);
    }
}

串口打印的话“test1”有按键按下时会有输出,但是“test2”的话是没有输出的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 07:33 , Processed in 0.268311 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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