硬汉嵌入式论坛

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

[μCGUI] 请教 uCGUI对话框中TEXT显示的问题

[复制链接]

6

主题

9

回帖

6

积分

新手上路

积分
6
发表于 2013-7-11 21:16:30 | 显示全部楼层 |阅读模式
我现在创建了一个对话框用于调整时间: 小时 分钟,小时对应两个按钮 “+” “-” , 分钟对应两个按钮“+” ,“-” ,小时和分钟分别用两个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);

        }   
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2013-7-11 22:31:08 | 显示全部楼层
1. 你写的程序有两个语法错误
    case WM_NOTIFICATION_RELEASED:    这个后面没有相应的break
    case WM_NOTIFY_PARENT:                     这个后面也没有相应的break
2.  还有就是不用每次都设置字体,设置一次就可以了


建议以后用uCGUIBulder来做,简单方便。
回复

使用道具 举报

6

主题

9

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2013-7-11 22:54:46 | 显示全部楼层

回 eric2013 的帖子

eric2013:1. 你写的程序有两个语法错误
    case WM_NOTIFICATION_RELEASED:    这个后面没有相应的break
    case WM_NOTIFY_PARENT:               .. (2013-07-11 22:31) 
谢谢,更改了.....不过还是出现那种问题......
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2013-7-11 23:28:42 | 显示全部楼层

回 lhwaizhu 的帖子

lhwaizhu:谢谢,更改了.....不过还是出现那种问题...... (2013-07-11 22:54) 
又看了一遍,实在是没找到别的错误了。
回复

使用道具 举报

4

主题

39

回帖

130

积分

初级会员

积分
130
发表于 2013-7-12 08:47:52 | 显示全部楼层
你数组没有结束符,字符串应该是以‘\\0’结尾   timeh[2] 改成 timeh[3] ; timem[2] 改成 timem[3];
在你
timeh[0]=(timehnum/10)+0x30;
timeh[1]=(timehnum%10)+0x30;
后面加 timeh[2] = ‘\\0’; 或  timeh[2] = 0;
同样
timem[0]=(timemnum/10)+0x30;
timem[1]=(timemnum%10)+0x30;
后面加 timem[2] =‘\\0’; 或  timem[2] = 0;
回复

使用道具 举报

6

主题

9

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2013-7-12 18:03:54 | 显示全部楼层

回 ztzjl2010 的帖子

ztzjl2010:你数组没有结束符,字符串应该是以‘\\0’结尾   timeh[2] 改成 timeh[3] ; timem[2] 改成 timem[3];
在你
timeh[0]=(timehnum/10)+0x30;
timeh[1]=(timehnum%10)+0x30;
后面加 timeh[2] = ‘\\0’; 或  timeh[2] = 0;
....... (2013-07-12 08:47) 
谢谢了...问题解决了....是这个原因... timeh[2] 改成 timeh[3] ; timem[2] 改成 timem[3];就行了...
回复

使用道具 举报

2

主题

3

回帖

2

积分

新手上路

我思故我在

积分
2
QQ
发表于 2013-8-27 00:06:06 | 显示全部楼层
[s:141]
研究生
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2016-1-21 12:14:11 | 显示全部楼层
学习了  刚开始接触emwin
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-17 07:25 , Processed in 0.049819 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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