OpenEdv-开源电子网

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

请教 uCGUI对话框中TEXT显示的问题

[复制链接]

24

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2013-3-11
在线时间
22 小时
发表于 2013-7-11 21:17:12 | 显示全部楼层 |阅读模式
我现在创建了一个对话框用于调整时间: 小时 分钟,小时对应两个按钮 “+” “-” , 分钟对应两个按钮“+” ,“-” ,小时和分钟分别用两个TEXT显示,初始是12 12 ,现在遇到的问题是:
当我先点击分钟的"+"后 分钟变成13,点击小时"+"后按说也应该变成13,但是变成了1313,测试发现,小时的那个TEXT显示的时候总会把分钟的一块显示了,弄不明白了,下面是我的代码,谢谢指教:
#include "includes.h"
u8    timeflag;
char    timeh[2]; //小时
char    timem[2];  //分钟
u8    timehnum=12;
u8    timemnum=12;
TEXT_Handle hText1,hText2;

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = 
{
    { FRAMEWIN_CreateIndirect,  "TimeSet",           0,                       0,  0,  320,240,FRAMEWIN_CF_MOVEABLE,0},
    { BUTTON_CreateIndirect,    "+",           GUI_ID_BUTTON27,          51, 17, 40, 33, 0,0},
    { BUTTON_CreateIndirect,    "+",           GUI_ID_BUTTON28,          204,17, 40, 33, 0,0},
    { BUTTON_CreateIndirect,    "-",           GUI_ID_BUTTON29,          51, 120,40, 33, 0,0},
    { BUTTON_CreateIndirect,    "-",           GUI_ID_BUTTON30,          204,120,40, 33, 0,0},
    { BUTTON_CreateIndirect,    "OK",                GUI_ID_BUTTON31,          34, 186,75, 23, 0,0},
    { BUTTON_CreateIndirect,    "Cancel",            GUI_ID_BUTTON32,          192,186,75, 23, 0,0},
    { TEXT_CreateIndirect,      "12",                GUI_ID_TEXT3,            204,78, 73, 23, 0,0},
    { TEXT_CreateIndirect,      "12",                GUI_ID_TEXT4,            51, 78, 73, 23, 0,0}
};

/*********************************************************************
*
*       Dialog callback routine
*/
static void _cbCallback(WM_MESSAGE * pMsg) 
{
                int Id,NCode; 
                WM_HWIN hWin = pMsg->hWin;                
                hText2 = WM_GetDialogItem(hWin,GUI_ID_TEXT4);
                hText1 = WM_GetDialogItem(hWin,GUI_ID_TEXT3);
                switch(pMsg -> MsgId) 
                {
                
                case WM_INIT_DIALOG:
                                TEXT_SetFont(hText1,&GUI_Font24_1);         
                                TEXT_SetFont(hText2,&GUI_Font24_1);                            
                                break;
                  case WM_NOTIFY_PARENT:
                                  Id = WM_GetId(pMsg ->hWinSrc);
                                  NCode = pMsg ->Data.v;
                                  switch(NCode) 
                                  {
                                
                                            case WM_NOTIFICATION_RELEASED:
                                                                switch(Id)
                                                                {
                                                                                case GUI_ID_BUTTON31:
                                                                                                timeflag=1; //ok
                                                                                                GUI_EndDialog(pMsg->hWin, 1);
                                                                                                break;
                                                                                case GUI_ID_BUTTON32: //cancel
                                                                                            timeflag=2;
                                                                                                GUI_EndDialog(pMsg->hWin, 1);
                                                                                                break;
                                                                                case GUI_ID_BUTTON27:  //小时加
                                                                                                
                                                                                                timehnum++;
                                                                                                if(timehnum==24)
                                                                                                                timehnum=0;
                                                                                                timeh[0]=(timehnum/10)+0x30;
                                                                                                timeh[1]=(timehnum%10)+0x30;
                                                                                                TEXT_SetText(hText2,timeh);
                                                                                                TEXT_SetFont(hText2,&GUI_Font24_1);        //ucGUI自带
                                                                                                break;
                                                                                case  GUI_ID_BUTTON29: //小时减
                                                                                                
                                                                                                timehnum--;
                                                                                                if(timehnum==0)
                                                                                                                timehnum=23;
                                                                                                timeh[0]=(timehnum/10)+0x30;
                                                                                                timeh[1]=(timehnum%10)+0x30;
                                                                                                TEXT_SetText(hText2,timeh);        
                                                                                                TEXT_SetFont(hText2,&GUI_Font24_1);        //ucGUI自带                                                                                        
                                                                                                break;
                                                                                case  GUI_ID_BUTTON28: //分钟加
                                                                                                
                                                                                                timemnum++;
                                                                                                if(timemnum==60)
                                                                                                                timemnum=0;
                                                                                                timem[0]=(timemnum/10)+0x30;
                                                                                                timem[1]=(timemnum%10)+0x30;
                                                                                                TEXT_SetText(hText1,timem);        
                                                                                                TEXT_SetFont(hText1,&GUI_Font24_1);        //ucGUI自带                                                                                        
                                                                                                break;
                                                                                case  GUI_ID_BUTTON30: //分钟减
                                                                                        
                                                                                                timemnum--;
                                                                                                if(timemnum==0)
                                                                                                                timemnum=59;
                                                                                                timem[0]=(timemnum/10)+0x30;
                                                                                                timem[1]=(timemnum%10)+0x30;
                                                                                                TEXT_SetText(hText1,timem);        
                                                                                                TEXT_SetFont(hText1,&GUI_Font24_1);        //ucGUI自带                                                                                        
                                                                                                break;
                                                                }                                                                   
                                                  default:
                                                                  break;
                                  }                                        
                default:
                              WM_DefaultProc(pMsg);
                                  break;
                 }
}


void Task_Time(void *pdata)
{
                BUTTON_SetDefaultFont(&GUI_Font24_1);

                GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbCallback, 0, 0, 0);        
                while(1)
                {                   
                                if(timeflag==1) //ok
                                {
                                                timeflag=0;
                                                RTC_Configuration(); 
                                                RTC_SetCounter(timehnum*3600+timemnum*60); //设定时间
                                                //等待上次写操作完成 才能写操作
                                                RTC_WaitForLastTask();
                                                BKP_WriteBackupRegister(BKP_DR1,0xa5a5); //做个记号        
                                                Go_MainMenu(); //进入主菜单
                                                OSTaskDel(OS_PRIO_SELF);    //删除自己        
                                }                
                                if(timeflag==2)
                                {
                                                Go_MainMenu(); //进入主菜单
                                                OSTaskDel(OS_PRIO_SELF);    //删除自己                                                
                                }
                                
                                OSTimeDlyHMSM(0,0,0,15);
                
                }        
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2013-7-11 23:34:33 | 显示全部楼层
错误之处在于:楼主的定义变量时定义错了

char    timeh[2]; //小时
char    timem[2];  //分钟

应该改为

char    timeh[3]; //小时
char    timem[3];  //分钟
并且保证timeh[3]=0;timem[3]=0;

或者直接使用一个字符串代替

char timeh = "12";
char timem = "12";
这样会自动为字符串的结尾添加字符串结束符'\0'

由于在GUI中所有控件上的文本信息时传入的参数是一个指针,所以必须保证有字符串结束符——转义字符0
你在定义两个变量时,没有考虑到这点,在编译时timeh后面紧跟了timem,如果你改变这两个变量的定义先后顺序就不会出现你这种问题了


还有,TEXT中的字体设置完成后,已经作为一个参数保存在其对象中,所以你不用在每次点击BUTTON时都设置字体,没必要
努力,前进。
回复 支持 反对

使用道具 举报

24

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2013-3-11
在线时间
22 小时
 楼主| 发表于 2013-7-12 08:09:12 | 显示全部楼层
回复【2楼】5498折戟沉沙:
---------------------------------
谢谢你了....
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-17 22:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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