OpenEdv-开源电子网

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

UCGUI里如何触发BUTTON控件并执行某些操作

[复制链接]

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
发表于 2014-7-31 21:20:56 | 显示全部楼层 |阅读模式
5金钱
前提,触摸屏移植成功,
触摸屏光标随触点能正常移动

建立了一个按钮控件,想通过使用触摸屏点击按钮实现LED的两灭,
但是发现在屏幕上点击按钮没反应,

该怎么实现按钮盒触摸屏的关联呢?


下边是一个书上的例子,这个又是怎么触发button动作呢
 static void _DemoButton(void)
{
        BUTTON_Handle hButton;
        GUI_SetFont(&GUI_Font8x16);
        GUI_DispStringHCenterAt("Click on button...",160,90);

        hButton = BUTTON_CreateAsChild(110,110,100,40,WM_GetActiveWindow(),GUI_ID_OK,WM_CF_SHOW);

        BUTTON_SetText(hButton,"Click me...");
        while(GUI_WaitKey() != GUI_ID_OK);
        BUTTON_Delete(hButton);
        GUI_ClearRect(0,50,319,239);
        GUI_DispStringHCenterAt("hello",160,120);
        GUI_Delay(1000);
}

最佳答案

查看完整内容[请看2#楼]

下载一个ucGUIBuilder建立一个DIALOG 然后再DIALOG上建立一个BUTTON 然后开启BUTTON的事件处理函数中的CLICK事件 最后在Event.c文件中会产生一个函数,名字貌似为_OnButtonClick();吧,在这里面插入你的代码 以上操作都是在ucGUIBuilder软件生成的 最后点击软件上面一个绿色的实体箭头,run,生成三个文件 将这三个文件添加到你的工程里面 在main中调用Code.c文件中生成的那个_Demo();函数,即可
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2014-7-31 21:20:57 | 显示全部楼层
下载一个ucGUIBuilder建立一个DIALOG

然后再DIALOG上建立一个BUTTON

然后开启BUTTON的事件处理函数中的CLICK事件

最后在Event.c文件中会产生一个函数,名字貌似为_OnButtonClick();吧,在这里面插入你的代码

以上操作都是在ucGUIBuilder软件生成的

最后点击软件上面一个绿色的实体箭头,run,生成三个文件

将这三个文件添加到你的工程里面

在main中调用Code.c文件中生成的那个_Demo();函数,即可
努力,前进。
回复

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2014-7-31 22:42:23 | 显示全部楼层
手边没有现成的软件,只能口头描述一下了
努力,前进。
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-8-1 10:14:18 | 显示全部楼层
窗口的WM_NOTIFY_PARENT消息
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-8-1 21:34:16 | 显示全部楼层
回复【2楼】5498折戟沉沙:
---------------------------------
我按照你的方法建立了界面,但是点击屏幕上的按钮没任何反应的,光标也没反应,
回复

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2014-8-1 22:32:54 | 显示全部楼层
你把相应的代码贴上来,明天我给你看一下
努力,前进。
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-8-2 19:38:29 | 显示全部楼层
回复【6楼】5498折戟沉沙:
---------------------------------
我认为是我触摸屏移植的有问题,之前是使用了战舰开发板的坐标转换方法实现光标移动的,这样和UCGUI结合不起来

又重新移植了, 我是参考 http://www.xiaomengyc.com/?post=9 这的文章移植的

但是移植完之后  光标不会移动

我单步跟踪到
static void _PID_Load(void) {
  #if (GUI_WINSUPPORT)
    WM_pfHandlePID = WM_HandlePID;
  #endif
}
处发现这个条件编译是成立的,
执行 WM_pfHandlePID = WM_HandlePID;
但是不执行WM_HandlePID的函数体,这是怎么回事

我改成

static void _PID_Load(void) {
  #if (GUI_WINSUPPORT)
     WM_HandlePID();
  #endif
}
光标就能移动了,  但是不是很准确,偏差较大

为什么呢?
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-8-3 09:48:08 | 显示全部楼层
回复【6楼】5498折戟沉沙:
上面是工程完整源码,
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-8-3 11:03:10 | 显示全部楼层
回复【6楼】5498折戟沉沙:
---------------------------------
typedef int  WM_tfHandlePID(void);
      WM_tfHandlePID*    WM_pfHandlePID;
WM_pfHandlePID = WM_HandlePID;

WM_HandlePID是一个函数
请问WM_pfHandlePID是什么类型的
回复

使用道具 举报

17

主题

293

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-26
在线时间
1 小时
发表于 2014-8-3 13:58:04 | 显示全部楼层
uCGUI自己的机制是使用回调函数,当你点击按钮的时候,GUI内部函数会调用回调函数,里面有对ID的反馈,依据ID识别按的是什么,并执行你想要的操作,还有一般不用...AsChild 方式创建,否则需要指定父向窗口,直接Button_Create(...),一般是在窗体里面创建Button 参数里面有要求回调函数的
回复

使用道具 举报

17

主题

293

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-26
在线时间
1 小时
发表于 2014-8-3 13:59:09 | 显示全部楼层
回复【4楼】styleno1:
---------------------------------
正解
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-8-3 15:32:22 | 显示全部楼层
回复【2楼】5498折戟沉沙:
---------------------------------
已经成功了,非常感谢,
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-8-18 21:44:41 | 显示全部楼层
回复【2楼】5498折戟沉沙:
---------------------------------
在uCGUIBuilder.exe里如何会的控件句柄

我知道调用函数
LISTBOX_Handle LISTBOX_Create(const GUI_ConstString * ppText, 
                              int   x0, int y0, 
                              int   xSize, int ySize, 
                              int   Flags);能返回相应的句柄 

但是uCGUIBuilder使用的是对话框

建立了一个资源表,会调用上边的函数  但是返回值存哪去了,怎么得到???
回复

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2014-8-18 22:01:55 | 显示全部楼层
回复【13楼】wang12zhe:
---------------------------------
这个返回值,就是控件的句柄,得不得到没有任何关系——你可以看一看_Demo();函数中是怎么利用资源列表创建函数的,那个返回值没有用

你可以通过ID查找到这个ID对应的控件的句柄,见Code.c文件中,有一个通过ID查找句柄的函数,好像叫WM_GetDialogItem(hParent,ID);,具体的记不清了
努力,前进。
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-8-18 22:16:06 | 显示全部楼层
回复【2楼】5498折戟沉沙:
---------------------------------
我大概是知道了 但是又有问题了
我是在一个事件里这样操作的 

void OnDropDownSelChanged(WM_MESSAGE * pMsg) 

 int SelItemNum;//选中条目的索引 
 WM_HWIN ListBoxHwin; 
 WM_HWIN Hwin; 
 Hwin=pMsg->hWin; 
  
 ListBoxHwin= WM_GetDialogItem(Hwin,GUI_ID_DROPDOWN0);//Returns the window handle of a dialog box item (widget). 


 SelItemNum = LISTBOX_GetSel(ListBoxHwin);//获得当前选择的单元的数量 
LISTBOX_GetItemText(ListBoxHwin,  SelItemNum , 
                        g_ListBoxItemBuffer, sizeof(g_ListBoxItemBuffer));//获得对应的内容 


但是 我发现读到的ListBoxHwin正确,但是读到的SelItemNum 不正确,我明明选择的第三个,返回的确实0X00061,不是应该返回2吗? 
是哪里的问题、????????、
回复

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2014-8-18 23:13:32 | 显示全部楼层
回复【15楼】wang12zhe:
---------------------------------

控件是DROPDOWN,你干嘛调用LISTBOX的API呢?!!!!!

试一下这个函数,int      DROPDOWN_GetSel          (DROPDOWN_Handle hObj);
努力,前进。
回复

使用道具 举报

5

主题

9

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2014-7-19
在线时间
0 小时
发表于 2014-11-15 13:16:12 | 显示全部楼层
移植了UCGUI之后还要在进行触摸屏移植才能触发BUTTON控件吗??
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-11-19 20:13:22 | 显示全部楼层
回复【17楼】Alone:
---------------------------------
当然了,。
回复

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-5-18
在线时间
16 小时
发表于 2017-6-28 17:14:46 | 显示全部楼层
5498折戟沉沙 发表于 2014-7-31 21:20
下载一个ucGUIBuilder建立一个DIALOG

然后再DIALOG上建立一个BUTTON

然后开启BUTTON的事件处理函数中的CL ...

你好,请问如何开启BUTTON的事件处理函数中的CLICK事件?新人小白一脸懵逼
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 17:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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