uCOS-IIwilliam hill官网
直播中

h1654155178.6397

12年用户 14经验值
擅长:测量仪表 嵌入式技术
私信 关注
[问答]

UCGUI--问题请教!

    个位好,本人在学习UCGUI时碰到了一下问题,请教下大家!!    我在MainDisplayCallback回调函数中任务中用BUTTON_Create()函数建立了一个2个按键,按键1,2,当按下第1个按键时
弹出第二个界面,触摸屏是移植好了的,按下按钮也有反应,按下按钮也高亮了,但是未见弹出第二个界面,麻烦版主抽空帮忙分析下原因,谢谢了!

主要函数如下:
   void Touch_Task(void *pdata)    //液晶屏更新任务            
{   
    g_hMainDisplay = WM_CreateWindow(0, 0, LCD_GetXSize()-1, LCD_GetYSize()-1, WM_CF_SHOW, &MainDisplayCallback, 0);
     g_hSelectWaveDisplay = WM_CreateWindow(0, 0, LCD_GetXSize()-1, LCD_GetYSize()-1, WM_CF_SHOW, &SelectWaveDisplayCallback , 0);
           
   WM_BringToTop(g_hMainDisplay);
    WM_SetFocus(g_hMainDisplay);
    WM_SelectWindow(g_hMainDisplay);         
    WM_Paint(g_hMainDisplay);                 
    while (1)
    {
      GUI_TOUCH_Exec();
     // _DemoTransWindow();
      // Touch_Sample();     
       //Demo_Graph();        
       GUI_Exec();
       //GUI_Delay(10);
       OStimeDly(OS_TICKS_PER_SEC/200);      
    }
}

/*********************************************************
主界面函数:MainDisplayCallback
第二个窗口回调窗口函数:g_hSelectWaveDisplay
**********************************************************/
void MainDisplayCallback(WM_MESSAGE* pMsg)
{
    int ButtonId, NCode;
    switch (pMsg->MsgId)
    {
    case WM_PAINT:
                 GUI_ClearRect(200, 100, 470, 350);
                     /* 建立按钮 */
                                          Button_SelectWave =  BUTTON_Create(0, 430, 200, 60, GUI_ID_SELECTWAVE, WM_CF_SHOW);
        Button_Setup = BUTTON_Create(200, 430, 200, 60, GUI_ID_SETUP, WM_CF_SHOW);
            
        /* 设置按钮文本 */
        BUTTON_SetText(Button_OnOf , "设置");
        BUTTON_SetText(Button_SelectWave , "波形选择");   
        break;
   
case WM_NOTIFY_PARENT:
     ButtonId = WM_GetId(pMsg->hWinSrc);
     NCode = pMsg->Data.v;
    // ButtonId = GUI_GetKey();
     switch(NCode)
     {
        
         case WM_NOTIFICATION_RELEASED:
                          if(ButtonId == GUI_ID_SELECTWAVE)
        {
             WM_BringToTop(g_hSelectWaveDisplay);
                               WM_SetFocus(g_hSelectWaveDisplay);
                               WM_SelectWindow(g_hSelectWaveDisplay);
              WM_Paint(g_hSelectWaveDisplay);
         }
    break;
     }           
    default:
               WM_DefaultProc(pMsg);
    }
}

备注:
    我单步调试可以看到,我按下触摸屏的“1”按钮松开后,发现程序已经运行到 了_OnButtonReleased(),这个函数中有WM_NotifyParent()这个函数,WM_NotifyParent()这个函数按我理解有2句Msg.MsgId   = WM_NOTIFY_PARENT;WM_SendToParent(hWin, &Msg);已经实现了发送
WM_NOTIFY_PARENT了,但是问题是程序不能回到MainDisplayCallback这个回调函数执行case WM_NOTIFY_PARENT这句程序,不解。
    前段时间试过外部按键按下按钮实现同样的功能,也是无法实现,道理是一样的按下按钮后,程序运行到BUTTON_Callback这个GUI自带的按钮回调函数,但是不会回到我的MainDisplayCallback函数,按道理应该是执行完BUTTON_Callback回调函数后再回到用户的回调函数继续执行的吧。
    不知道上面我自己的理解对不对,请教下版主GUI的每种控件按下以后都是回到响应的控件的回调函数执行,执行完以后,是否会自动回到用户的回调函数中,或者有什么条件回到用户的回调函数中???

回帖(2)

610095871

2013-10-11 11:23:52
如果想透彻的学习下ucgui可以联系我 qq610095871 开水。william hill官网 里搜索ucgui视频教程也可以
举报

Hugo801122

2014-1-7 23:52:20
没用过,学习了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分