事件
事件是系统内发生的动作或者发生的事情,系统响应事件后,如果需要,你可以某种方式对事件做出回应。例如:如果用户在界面上单击一个按钮,你可能想通过显示一个信息框来响应这个动作。在这一章节中,我们将讨论一些关于事件的重要概念,并且观察它们在 LCUI 上如何运行。本文不会面面俱到,仅聚焦于你现阶段需要掌握的知识。
在 LCUI 中,事件在应用程序窗口中被触发并且通常被绑定到窗口内部的特定部分 —— 可能是一个组件、一系列组件、应用程序内的代码或者是整个应用程序窗口。举几个可能发生的不同事件:
- 用户在某个组件上点击鼠标或悬停光标。
- 用户在键 盘中按下某个按键。
- 用户调整应用程序窗口的大小或者关闭应用程序窗口。
- 全局设置被改变。
如果你想看看更多其他的事件 ,请查阅 include/LCUI/main.h 中定义的事件。
每个可用的事件都会有一个事件处理器,也就是事件触发时会运行的代码块。当我们定义了一个用来回应事件被激发的代码块的时候,我们说我们注册了一个事件处理器。注意事件处理器有时候被叫做事件监听器——从我们的用意来看这两个名字是相同的,尽管严格地来说这块代码既监听也处理事件。监听器留意事件是否发生,然后处理器就是对事件发生做出的回应。
简单的例子
#include <LCUI.h>
void OnKeyDown(LCUI_SysEvent e, void *data)
{
printf("key code: %d\n", e->key.code);
LCUI_Quit();
}
int main(void)
{
LCUI_Init();
LCUI_BindEvent(LCUI_KEYDOWN, OnKeyDown, NULL, NULL);
return LCUI_Main();
}
这个例子实现了按任意键退出的功能,我们定义了一个 OnKeyDown()
函数作为按键按下事件的处理器,然后使用 LCUI_BindEvent()
函数将它与事件的标识 LCUI_KEYDOWN
绑定,当按下任意键时就会调用我们的 OnKeyDown()
函数将事件对象中记录的按键码打印出来,然后退出应用程序。