SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4738|回复: 1
打印 上一主题 下一主题

[gui2] 单击关闭窗口、上下文菜单

[复制链接]

187

主题

346

帖子

2450

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2450
跳转到指定楼层
楼主
发表于 2016-6-19 12:32:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ancientcc 于 2018-8-18 14:33 编辑

相关事件
事件队列
窗口层SDL_LEFT_BUTTON_DOWN、SDL_MIDDLE_BUTTON_DOWN、SDL_RIGHT_BUTTON_DOWNfront_child
控件层LEFT_BUTTON_CLICK、MIDDLE_BUTTON_CLICK、RIGHT_BUTTON_CLICKback_post_child

为什么要分两层?主要原因是控件层收不到落在窗口外的单击操作。

窗口配置
设置click_dismiss为yes。

app额外控制
窗口一旦设了click_dismiss=yes,要是没有额外处理,那单击就会关闭窗口。如果app想改变这行为,那可在运行时调用twindow::set_click_dismiss(false)取消关闭。
  1. void set_click_dismiss(const bool click_dismiss)
  2. {
  3.         click_dismiss_ = click_dismiss;
  4. }
复制代码
回复

使用道具 举报

187

主题

346

帖子

2450

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2450
沙发
 楼主| 发表于 2018-8-18 14:35:07 | 只看该作者

上下文菜单


    最多支持两级菜单。
    PC上,触发二级菜单的机制是移动鼠标,触摸平台触发二级菜单的机制是单击。

使用
1、准备菜单项
std::vector<gui2::tmenu::titem>表示菜单、子菜单。每个菜单项是一字符串和一图标组成。
  1. std::vector<gui2::tmenu::titem> items, subitems;
  2. items.push_back(gui2::tmenu::titem("abc", val1));
  3. subitems.push_back(gui2::tmenu::titem("2abc", val2));
  4. items.push_back(gui2::tmenu::titem("sub", subitems));
复制代码


2、显示菜单
  1. gui2::tmenu dlg(items, initial_sel, nullptr, true);
  2. dlg.show(widget.get_x(), widget.get_y() + widget.get_height() + 16 * twidget::hdpi_scale);
复制代码
显示菜单后,Rose会处理显示、隐藏二级菜单,app写专门代码。

3、获得返回值
dlg.get_retval() != gui2::twindow::OK表示用户取消了菜单。
dlg.selected_val()返回用用户选择了那个项的cookie值。


注释
1、一个菜单对应一个dialog,两级菜单都展开时对应两个dialog。
2、PC平台,鼠标在第一级菜单移动到其它项时,展开下级菜单。移动平台,单击第一级菜单项时,展开下级菜单。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2024-5-20 03:11 , Processed in 0.045092 second(s), 19 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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