硬汉嵌入式论坛

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

[μCGUI] 创建了窗口和button,点击button后没有反应。

[复制链接]

2

主题

5

回帖

2

积分

新手上路

积分
2
发表于 2015-3-25 19:27:43 | 显示全部楼层 |阅读模式
/extern GUI_CONST_STORAGE GUI_BITMAP data_show;
//extern GUI_CONST_STORAGE GUI_BITMAP data_capture;
//extern GUI_CONST_STORAGE GUI_BITMAP graph_show;
//extern GUI_CONST_STORAGE GUI_BITMAP Calculator_show;
//extern GUI_CONST_STORAGE GUI_BITMAP Info_show;
//extern GUI_CONST_STORAGE GUI_BITMAP Time_show;

//extern GUI_CONST_STORAGE GUI_BITMAP SystemSetup_show;

static int _x;
WM_HWIN h_MenuWindow;
BUTTON_Handle Btnhandle[6]={0};

/**
  * @brief  The desktop window's callback function
  * @param  the pointer of Windows message manager
  * @retval none
  */
static void _callback(WM_MESSAGE *pMsg)
{
    int NCode, Id;//Get the ID of buttons and Notification code
    WM_SCROLL_STATE ScrollState; //scrollbar handle
    SCROLLBAR_Handle hScroll;
   
    WM_HWIN hWin = pMsg->hWin;         

    switch(pMsg->MsgId)
    {
        case WM_CREATE:
            
            hScroll = SCROLLBAR_CreateAttached(hWin,0);//the scrollbar is attached to desktop window vertical
            SCROLLBAR_SetNumItems(hScroll,50);
            SCROLLBAR_SetPageSize(hScroll,25); //Pagesize must be smaller than NumItems.
         
            Btnhandle[0] = BUTTON_Create(5,  5, 105, 105,  GUI_ID_DataShow,  BUTTON_CF_SHOW );
            Btnhandle[1] = BUTTON_Create(115, 5, 105, 105,  GUI_ID_DataCapture,       BUTTON_CF_SHOW );
            Btnhandle[2] = BUTTON_Create(5, 115, 215, 105,  GUI_ID_Graph,  BUTTON_CF_SHOW );
            Btnhandle[3] = BUTTON_Create(225, 5, 105, 215,  GUI_ID_Calculator,     BUTTON_CF_SHOW );
            Btnhandle[4] = BUTTON_Create(445, 5, 105, 105,   GUI_ID_Info,   BUTTON_CF_SHOW );
            Btnhandle[5] = BUTTON_Create(335,5, 105, 105,   GUI_ID_Time,    BUTTON_CF_SHOW );
        //    Btnhandle[6] = BUTTON_Create(445, 5, 105, 105,  GUI_ID_SystemSetup,    BUTTON_CF_SHOW );
         
//            BUTTON_SetBitmap(Btnhandle[0],BUTTON_BI_UNPRESSED,&data_show);
//            BUTTON_SetBitmap(Btnhandle[1],BUTTON_BI_UNPRESSED,&data_capture);
//            BUTTON_SetBitmap(Btnhandle[2],BUTTON_BI_UNPRESSED,&graph_show);
//            BUTTON_SetBitmap(Btnhandle[3],BUTTON_BI_UNPRESSED,&Calculator_show);
//            BUTTON_SetBitmap(Btnhandle[4],BUTTON_BI_UNPRESSED,&Info_show);   
//            BUTTON_SetBitmap(Btnhandle[5],BUTTON_BI_UNPRESSED,&Time_show);   
        //  BUTTON_SetBitmap(Btnhandle[6],BUTTON_BI_UNPRESSED,&SystemSetup_show);
            
            break;
        
        case WM_PAINT:
            GUI_SetBkColor(GUI_BLUE); // redraw the desktop
            GUI_Clear();
            break;
           
        case WM_NOTIFY_PARENT:
            Id=WM_GetId(pMsg->hWinSrc);
            NCode = pMsg->Data.v;
        
          if(NCode == WM_NOTIFICATION_VALUE_CHANGED)
          {

                if(WM_GetId(pMsg->hWinSrc)== GUI_ID_HSCROLL)// the message get from horinzontal scrollbar
                {
                    WM_GetScrollState(pMsg->hWinSrc, &ScrollState);
                    if(_x!=ScrollState.v)
                    {
                        int x=0;
                        for(x=0;x<7;x++)
                        {
                            WM_MoveWindow(Btnhandle[x],(_x-ScrollState.v)*10,0);
                        }
                    }
                    _x=ScrollState.v;
                }
          }
        
            if (NCode == WM_NOTIFICATION_CLICKED)
            {
                switch (Id)
                {
                    case GUI_ID_DataShow:
                          GPIOG->ODR^=GPIO_Pin_6;
                        break;
                    
                    case GUI_ID_Graph:
                        GPIOG->ODR^=GPIO_Pin_6;
                        break;

                    case GUI_ID_Info:
                        GPIOG->ODR^=GPIO_Pin_6;
                        break;
                    
                    case GUI_ID_Calculator:
                        GPIOG->ODR^=GPIO_Pin_6;
                        break;
                    
                    case GUI_ID_DataCapture:
                        break;                    
                    
                    case GUI_ID_Time:  
                        break;        
                    
                    default:
                        break;
            }
       }
        break;

        default:
            WM_DefaultProc(pMsg);
        break;
    }
}


void Main_Menu(void)
{
    h_MenuWindow = WM_CreateWindow(0,0,LCD_XSIZE,LCD_YSIZE,WM_CF_SHOW,&_callback,0);//Create the desktop window  
//    WM_SetCallback(h_MenuWindow, &_cbMygui);//set DeskWindow Callback function.
   
}

非常简单的创建了一个窗口,并且在他的回调函数的 WM_cREATE 消息中初始化了窗口,就是添加了几个button 和一个 scrollbar。  但是实际测试的时候, scrollbar的消息可以i响应,屏幕可以滑动,但是按下button却没反应。求教这是怎么回事啊
回复

使用道具 举报

2

主题

5

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2015-3-25 19:36:18 | 显示全部楼层
我又确定了一下 ID,也是没问题的,包括翻转LED灯,也都是没问题,代码稍微改了一下,依然不能响应button

switch(NCode)
   {
    case WM_NOTIFICATION_RELEASED:
     switch (Id)
     {
      case GUI_ID_DataShow:
        GPIOG->ODR^=GPIO_Pin_6;
       break;
      
      case GUI_ID_Graph:
       GPIOG->ODR^=GPIO_Pin_6;
       break;
      case GUI_ID_Info:
       GPIOG->ODR^=GPIO_Pin_6;
       break;
      
      case GUI_ID_Calculator:
       GPIOG->ODR^=GPIO_Pin_6;
       break;
      
      case GUI_ID_DataCapture:
       break;     
      
      case GUI_ID_Time:  
       break;  
      
      default:
       break;
     }
    break;
   
    case WM_NOTIFICATION_VALUE_CHANGED:
     GPIOG->ODR^=GPIO_Pin_6;
     if(WM_GetId(pMsg->hWinSrc)== GUI_ID_HSCROLL)// the message get from horinzontal scrollbar
     {
      WM_GetScrollState(pMsg->hWinSrc, &ScrollState);
      if(_x!=ScrollState.v)
      {
       int x=0;
       for(x=0;x<7;x++)
       {
        WM_MoveWindow(Btnhandle[x],(_x-ScrollState.v)*10,0);
       }
      }
      _x=ScrollState.v;
     }      
    break;   
   
    default:
     break;
   }
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2015-3-25 21:30:34 | 显示全部楼层
应该不可以在 WM_CREATE消息里面创建的,可以放在WM_INIT_DIALOG里面。
回复

使用道具 举报

2

主题

5

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2015-3-25 22:06:30 | 显示全部楼层
额问题我自己解决了, 因为我这创建的是一个窗口,所以那个INIT_DIALOG 貌似不能用吧,我把原先的 WM_CREATE里面的 BUTTON_cREATE 改成了 BUTTON_CREATEEX  这样做的目的是因为 后者可以传入一个 父窗口的句柄进去,这样就可以响应之前的消息了。而我之前是单独创建的btn,所以是响应不了消息的。、
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
发表于 2015-3-26 10:33:49 | 显示全部楼层

回 heartbreak. 的帖子

heartbreak.:额问题我自己解决了, 因为我这创建的是一个窗口,所以那个INIT_DIALOG 貌似不能用吧,我把原先的 WM_CREATE里面的 BUTTON_cREATE 改成了 BUTTON_CREATEEX  这样做的目的是因为 后者可以传入一个 父窗口的句柄进去,这样就可以响应之前的消息了。而我之前是单独创建的bt .. (2015-03-25 22:06) 
感谢分享!

可能因为你在 case WM_NOTIFY_PARENT:中处理按钮消息,那么按钮的父窗口需要指定为你的创建窗口。不然默认为桌面,就不是这个回调函数了。
回复

使用道具 举报

2

主题

5

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2015-3-26 14:32:49 | 显示全部楼层
恩恩。因为我当时创建button的时候没有指定父窗口,所以不会有反应。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-14 03:37 , Processed in 0.042790 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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