lv_indev_get_act
时间: 2023-10-26 18:07:06 浏览: 52
lv_indev_get_act是一个函数,用于获取当前活动的输入设备(input device)。在LVGL中,输入设备可以是触摸屏、鼠标、键盘等。该函数返回一个指向当前活动输入设备的指针,如果没有活动输入设备,则返回NULL。通过获取当前活动输入设备的指针,可以对该输入设备进行操作,例如获取输入设备的状态、设置输入设备的回调函数等。
相关问题
LVGL中输入设备LV_INDEV_TYPE_POINTER类型怎么添加鼠标右键
在LVGL中,可以通过 `lv_indev_set_button_id()` 函数来为输入设备设置不同的按键ID。对于鼠标,一般会使用 `LV_INDEV_STATE_BTN1` 表示左键,`LV_INDEV_STATE_BTN2` 表示中键,`LV_INDEV_STATE_BTN3` 表示右键。因此,如果想要添加鼠标右键支持,你可以在初始化输入设备后,通过以下代码来设置右键的按键ID:
```c
lv_indev_set_button_id(indev, LV_INDEV_STATE_BTN3, 2); // 设置右键按键ID为2
```
这样,在使用鼠标时,当检测到右键按下事件时,将会触发 `LV_EVENT_PRESSED` 事件,并且可以通过 `lv_event_get_data()` 函数获取到按下的按键ID。你可以根据需要在事件回调函数中进行处理,例如:
```c
static void mouse_event_cb(lv_obj_t * obj, lv_event_t event)
{
lv_indev_t * indev = lv_indev_get_act();
if (indev == NULL) return;
if (event == LV_EVENT_PRESSED) {
uint32_t btn_id = lv_event_get_data();
if (btn_id == 2) { // 右键按下
// 处理右键按下事件
}
}
}
```
如何在lv_indev_read_timer_cb中支持识别鼠标右键点击并触发对应obj的事件
在 `lv_indev_read_timer_cb` 函数中,可以通过读取当前输入设备(鼠标)的状态来判断鼠标是否有点击事件。如果鼠标右键被点击,则可以通过 `lv_indev_get_point` 函数获取当前鼠标点击的位置,然后使用 `lv_hit_test` 函数检测该位置是否在某个对象的范围内。
如果该位置在某个对象的范围内,可以通过该对象的回调函数来触发对应的事件。以下是一个示例代码:
```c
static void mouse_handler(lv_timer_t * timer)
{
lv_indev_t * indev = lv_timer_get_user_data(timer);
lv_point_t point;
lv_indev_get_point(indev, &point);
if (lv_indev_is_button_pressed(indev, LV_INDEV_STATE_RELEASED, LV_BTN_RIGHT)) {
/* 鼠标右键被点击 */
lv_obj_t * obj = lv_hit_test(lv_scr_act(), &point);
if (obj != NULL) {
/* 找到了被点击的对象 */
lv_event_send(obj, LV_EVENT_CLICKED, NULL);
}
}
}
```
在此示例代码中,我们首先通过 `lv_indev_is_button_pressed` 函数判断鼠标右键是否被松开,如果鼠标右键被松开,则通过 `lv_indev_get_point` 函数获取当前鼠标点击的位置,并使用 `lv_hit_test` 函数检测该位置是否在某个对象的范围内。如果找到了被点击的对象,则通过 `lv_event_send` 函数触发该对象的 `LV_EVENT_CLICKED` 事件。在该对象的回调函数中,可以处理鼠标右键点击事件的逻辑。