硬汉嵌入式论坛

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

[μCGUI] ucgui 定时器仿真不成功

[复制链接]

3

主题

10

回帖

3

积分

新手上路

积分
3
发表于 2015-4-21 17:07:10 | 显示全部楼层 |阅读模式
在学习ucgui时,看到了定时器,于是学习硬汉哥的教程36章,仿造写但是没有成功,这是为啥????求各位提示一下:
static const GUI_WIDGET_CREATE_INFO _aDialogCreate5[] = {
    { FRAMEWIN_CreateIndirect,  "Caption",           0,                       0,  0,  800,600,0,0},
    { BUTTON_CreateIndirect,    "BUTTON0",           GUI_ID_BUTTON0,          174,265,354,82, 0,0},
    { TEXT_CreateIndirect,      "0000",              GUI_ID_TEXT0,            174,95, 365,98, 0,0}
};
/*****************************************************************
**      FunctionName:void PaintDialog(WM_MESSAGE * pMsg)
**      Function: to initialize the Dialog items
**                                                      
**      call this function in _cbCallback --> WM_PAINT
*****************************************************************/
void PaintDialog5(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;
}
void InitDialog5(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;
    //
    //FRAMEWIN
    //
    FRAMEWIN_SetClientColor(hWin,0xffffff);
    FRAMEWIN_SetTitleVis(hWin,0);
    //
    //GUI_ID_BUTTON0
    //
    BUTTON_SetBkColor(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),BUTTON_CI_UNPRESSED,0xffffc0);
    BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),&GUI_Font32B_ASCII);
    //
    //GUI_ID_TEXT0
    //
    TEXT_SetBkColor(WM_GetDialogItem(hWin,GUI_ID_TEXT0),0x808080);
    TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT0),&GUI_FontD48);
    TEXT_SetTextAlign(WM_GetDialogItem(hWin,GUI_ID_TEXT0),GUI_TA_VCENTER|GUI_TA_CENTER);
}
static void _cbCallback5(WM_MESSAGE * pMsg)
{
    int NCode, Id;

char buf1[10],buf2[10],buf3[10],buf4[10];
    WM_HWIN hWin = pMsg->hWin;
    switch (pMsg->MsgId)
    {
  case WM_TIMER:
     count1++;
     sprintf(buf1,"%04d",count1);
     TEXT_SetText(WM_GetDialogItem(hWin,GUI_ID_TEXT0),(const char *)buf1);   
     WM_RestartTimer(pMsg->Data.v, 100);
   break;
  case WM_DELETE:
    DisplayState=0; //窗体已经关闭
   break;
        case WM_PAINT:
            PaintDialog5(pMsg);
            break;
        case WM_INIT_DIALOG:
            InitDialog5(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:
       break;
      case WM_NOTIFICATION_MOVED_OUT:
       break;
     }
     break;
            }
            break;
        default:
            WM_DefaultProc(pMsg);
    }
}
void OPenDisplay(void)
{
WM_HWIN display;
DisplayState=1;
   display= GUI_ExecDialogBox(_aDialogCreate5, GUI_COUNTOF(_aDialogCreate5), &_cbCallback5, 0, 0, 0);
   WM_CreateTimer(WM_GetClientWindow(display),  /*接收信息的窗口句柄 */
                   0,                          /*用户定义的ID*/
            500,                         /* 周期*/
          0);                         /*0 */         
   while(DisplayState)
   {
     GUI_Delay(50);  
   }
}
运行结果:一直是0

as.jpg
回复

使用道具 举报

336

主题

2045

回帖

3058

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3058
发表于 2015-4-21 17:14:29 | 显示全部楼层
display= GUI_ExecDialogBox(_aDialogCreate5, GUI_COUNTOF(_aDialogCreate5), &_cbCallback5, 0, 0, 0);

这里有问题,不能用这个阻塞对话框。因为你不关闭对话框,后面的语句根本执行不了!!也就是说,定时器还没有创建呢。。。
回复

使用道具 举报

3

主题

10

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-21 17:34:56 | 显示全部楼层
谢谢你了。。。。完美解决问题了。。。。
回复

使用道具 举报

3

主题

10

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-21 17:35:35 | 显示全部楼层

回 caicaptain2 的帖子

caicaptain2:display= GUI_ExecDialogBox(_aDialogCreate5, GUI_COUNTOF(_aDialogCreate5), &_cbCallback5, 0, 0, 0);

这里有问题,不能用这个阻塞对话框。因为你不关闭对话框,后面的语句根本执行不了!!也就是说,定时器还没有创建呢。。。
(2015-04-21 17:14)
完美解决。。。。谢谢指点。。。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 03:44 , Processed in 0.158984 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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