OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3249|回复: 1

ucgui 多对话框切换

[复制链接]

10

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
407
金钱
407
注册时间
2014-10-22
在线时间
135 小时
发表于 2016-6-5 19:32:14 | 显示全部楼层 |阅读模式
本帖最后由 I is alun 于 2016-6-5 22:29 编辑

1.不用设置父子联系
2.设置按钮,按钮按下然后释放时响应
3.enddialog,然后execdialog或createdialog即可
4.while(1){GUI_exec();或WM_exec();}
很方便
[mw_shl_code=c,true]/*
******************************************************************
**                      uCGUIBuilder                            **
**                  Version:   2.0.0.5                          **
**                     2011 / 08                                **
**                   CpoyRight to: wyl                          **
**              Email:wyl2008056@163.com                        **
**          This text was Created by uCGUIBuilder               **
******************************************************************/

#include "demo1.h"
#include "delay.h"

//+++++++++++++++++以下是A对话框+++++++++++++++++++++++++++++++++++++
//资源配置表
static const GUI_WIDGET_CREATE_INFO _A_TABLE[] =
{
    /*窗口控件*/   {  FRAMEWIN_CreateIndirect,    "ADialog",  0, 0, 0, 240,320, FRAMEWIN_CF_ACTIVE,0},
    /*按钮控件*/   {  BUTTON_CreateIndirect,      "down",  GUI_ID_BUTTON0,  240-50-5, 320-50-22-5, 50, 50, 0,0},  //320-50-5-32还要减去对话框标题栏的高度22,减去对话框边缘宽度5(不知道是多少)
};

//初始化对话框界面
void PAInitDialog(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;

    //
    //FRAMEWIN
    //
                FRAMEWIN_SetFont(hWin,&GUI_Font16B_ASCII);
    FRAMEWIN_SetBarColor(hWin,1,GUI_GRAY);
    FRAMEWIN_SetClientColor(hWin,GUI_DARKGRAY);
    FRAMEWIN_SetTextColor(hWin,GUI_BLUE);

    FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
    FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);
    FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);

    FRAMEWIN_SetTitleHeight(hWin,22);
    //
    //GUI_ID_BUTTON0
    //
                BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),&GUI_Font16B_ASCII);
    BUTTON_SetBkColor(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),BUTTON_CI_UNPRESSED,GUI_BLUE);
    BUTTON_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),BUTTON_CI_UNPRESSED,GUI_GREEN);        
}

//回调函数
static void _cbCallbackA(WM_MESSAGE * pMsg)
{
    int Id,NCode;
    unsigned short Get_No;
    WM_HWIN hDlg;
    hDlg = pMsg->hWin;
    switch (pMsg->MsgId)
    {
        case WM_PAINT://重绘事件
            break;
        case WM_INIT_DIALOG: //初始化事件
            PAInitDialog(pMsg);
            break;
        case WM_NOTIFY_PARENT:
            Id = WM_GetId(pMsg->hWinSrc);//控件ID号
           NCode = pMsg->Data.v;//通知代码信号量
            switch(NCode)
            {
                case WM_NOTIFICATION_RELEASED:
                    if(Id == GUI_ID_BUTTON0)
                    {
                                                                                                GUI_EndDialog(hDlg, 0);
                        BDialogBox(); //创建B对话框
                    }
                    break;
                default:
                    break;
            }
            break;
        default:
            WM_DefaultProc(pMsg);
            break;
    }
}


//创建对话框
void ADialogBox(void)
{
    WM_HWIN  AhWin = GUI_CreateDialogBox(_A_TABLE, GUI_COUNTOF(_A_TABLE), &_cbCallbackA, 0, 0, 0);//创建一个非阻塞式对话框
    WM_MakeModal(AhWin);//设置成模态窗口
}






//+++++++++++++++++以下是B对话框+++++++++++++++++++++++++++++++++++++
//资源配置表
static const GUI_WIDGET_CREATE_INFO _B_TABLE[] =
{
    {  FRAMEWIN_CreateIndirect,    "BDialog",  0, 0,   0, 240,320, FRAMEWIN_CF_ACTIVE,0},
    {  BUTTON_CreateIndirect,      "down",      GUI_ID_BUTTON1, 240-50-5, 320-50-22-5, 50, 50, 0,0},
    {  BUTTON_CreateIndirect,      "up",      GUI_ID_BUTTON2,  0, 320-50-22-5, 50, 50, 0,0},
};

//初始化对话框界面
void PBInitDialog(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;

    //
    //FRAMEWIN
    //
                FRAMEWIN_SetFont(hWin,&GUI_Font16B_ASCII);
    FRAMEWIN_SetBarColor(hWin,1,GUI_GRAY);
    FRAMEWIN_SetClientColor(hWin,GUI_DARKGRAY);
    FRAMEWIN_SetTextColor(hWin,GUI_BLUE);

    FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
    FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);
    FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);

    FRAMEWIN_SetTitleHeight(hWin,22);
    //
    //GUI_ID_BUTTON1
    //
                BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON1),&GUI_Font16B_ASCII);
    BUTTON_SetBkColor(WM_GetDialogItem(hWin,GUI_ID_BUTTON1),BUTTON_CI_UNPRESSED,GUI_BLUE);
    BUTTON_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_BUTTON1),BUTTON_CI_UNPRESSED,GUI_GREEN);        
//
    //GUI_ID_BUTTON2
    //
                BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON2),&GUI_Font16B_ASCII);
    BUTTON_SetBkColor(WM_GetDialogItem(hWin,GUI_ID_BUTTON2),BUTTON_CI_UNPRESSED,GUI_BLUE);
    BUTTON_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_BUTTON2),BUTTON_CI_UNPRESSED,GUI_GREEN);                        
}


//回调函数
static void _cbCallbackB(WM_MESSAGE * pMsg)
{
    int Id,NCode;
    WM_HWIN hDlg;
    hDlg = pMsg->hWin;
    switch (pMsg->MsgId)
    {
        case WM_INIT_DIALOG: //初始化事件
            PBInitDialog(pMsg);
            break;
        case WM_NOTIFY_PARENT:
            Id = WM_GetId(pMsg->hWinSrc);//控件ID号
            NCode = pMsg->Data.v;//通知代码信号量
            switch(NCode)
            {
                case WM_NOTIFICATION_RELEASED:
                    if(Id == GUI_ID_BUTTON1)//下一页
                    {
                        GUI_EndDialog(hDlg, 0);
                        CDialogBox();
                    }
                    if(Id == GUI_ID_BUTTON2)//上一页
                    {
                                                                                                GUI_EndDialog(hDlg, 0);
                                                                                                ADialogBox();                                                   //呢?
                    }
                    break;
                                                        default:
                                                                WM_DefaultProc(pMsg);
                                                                        break;
                                                }

    }
}

//创建对话框
void BDialogBox(void)
{
    WM_HWIN PBhWin = GUI_CreateDialogBox(_B_TABLE, GUI_COUNTOF(_B_TABLE), &_cbCallbackB,0, 0, 0);//创建一个非阻塞式对话框,第一个0表示没有父窗口
    WM_MakeModal(PBhWin);//设置成模态窗口
}


//+++++++++++++++++以下是C对话框+++++++++++++++++++++++++++++++++++++
//资源配置表
static const GUI_WIDGET_CREATE_INFO _C_TABLE[] =
{
    /*窗口控件*/   {  FRAMEWIN_CreateIndirect,    "CDialog",  0, 0, 0, 240,320, FRAMEWIN_CF_ACTIVE,0},
    /*按钮控件*/   {  BUTTON_CreateIndirect,      "up",  GUI_ID_BUTTON3,  0,320-50-5-22, 50, 50, 0,0},
};

//初始化对话框界面
void PCInitDialog(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;

    //
    //FRAMEWIN
    //
                FRAMEWIN_SetFont(hWin,&GUI_Font16B_ASCII);
    FRAMEWIN_SetBarColor(hWin,1,GUI_GRAY);
    FRAMEWIN_SetClientColor(hWin,GUI_DARKGRAY);
    FRAMEWIN_SetTextColor(hWin,GUI_BLUE);

    FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
    FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);
    FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);

    FRAMEWIN_SetTitleHeight(hWin,22);
    //
    //GUI_ID_BUTTON3
    //
                BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON3),&GUI_Font16B_ASCII);
    BUTTON_SetBkColor(WM_GetDialogItem(hWin,GUI_ID_BUTTON3),BUTTON_CI_UNPRESSED,GUI_BLUE);
    BUTTON_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_BUTTON3),BUTTON_CI_UNPRESSED,GUI_GREEN);               
}

//回调函数
static void _cbCallbackC(WM_MESSAGE * pMsg)
{
    int Id,NCode;
    unsigned short Get_No;
    WM_HWIN hDlg;

    hDlg = pMsg->hWin;
    switch (pMsg->MsgId)
    {
        case WM_PAINT://重绘事件
            break;
        case WM_INIT_DIALOG: //初始化事件
            PCInitDialog(pMsg);
            break;
        case WM_NOTIFY_PARENT:
            Id = WM_GetId(pMsg->hWinSrc);//控件ID号
            NCode = pMsg->Data.v;//通知代码信号量

            switch(NCode)
            {
                case WM_NOTIFICATION_RELEASED:
                    if(Id == GUI_ID_BUTTON3)
                    {
                                                                                                GUI_EndDialog(hDlg, 0);
                        BDialogBox(); //创建B对话框
                    }
                    break;
                default:
                    break;
            }
            break;
        default:
            WM_DefaultProc(pMsg);
            break;
    }
}


//创建对话框
void CDialogBox(void)
{
    WM_HWIN  ChWin = GUI_CreateDialogBox(_C_TABLE, GUI_COUNTOF(_C_TABLE), &_cbCallbackC, 0, 0, 0);//创建一个非阻塞式对话框
    WM_MakeModal(ChWin);//设置成模态窗口
}






[/mw_shl_code]


效果如下:

A.JPG
B.JPG
C.JPG
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2016-3-16
在线时间
48 小时
发表于 2016-6-7 11:55:34 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 03:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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