悬浮提示的一种简单实现(CEGUI)
来源:互联网 发布:android绘图软件开发 编辑:程序博客网 时间:2024/06/09 15:22
悬浮提示是一种常见的提示,那么界面中的简单悬浮提示(只有文本的)是如何实现的?
下面简单的以CEGUI中的实现加以分析,下面的代码主要截取与设置悬浮提示相关的部分。悬浮提示其实也是一种特殊的界面,因此也派生自CEGUI各种窗口的基类Window类。
CEGUI中的window类继承自属性集和事件集:
class CEGUIEXPORT Window : public PropertySet, public EventSet{//!< 事件相关///< 鼠标进入事件virtual void onMouseEnters(MouseEventArgs& e);///< 鼠标离开事件virtual void onMouseLeaves(MouseEventArgs& e);///< 鼠标移动事件virtual void onMouseMove(MouseEventArgs& e);//!< 成员变量相关///< 窗口设置的文本String d_text;///< 窗口悬浮提示的文本String d_tooltipText;///< 窗口保存的指向悬浮提示的指针Tooltip* d_customTip;}
Tooltip继承自Window类,这样看起来Tooltip也类似成为了Window的一种属性,而通过Window::d_customTip及Tooltip::d_target可以进行方便地修改,Tooltip内部主要实现了设置关联目标窗口及控制显示的接口。
class CEGUIEXPORT Tooltip : public Window{///< 设置/获取目标窗口void setTargetWindow(Window* wnd);const Window* getTargetWindow();///< 重置显示时间void resetTimer(void);///< 关联的目标窗口const Window* d_target;}
当鼠标进入窗口的有效范围时,会触发Tooltip类中重新定义的onMouseEnters()接口。
void Tooltip::onMouseEnters(MouseEventArgs& e){///< 计算位置positionSelf();Window::onMouseEnters(e);}可以看出Tooltip只是计算了自身的位置,然后便调用Window类的接口。
void Window::onMouseEnters(MouseEventArgs& e){///< 设置鼠标图标getGUIContext().getMouseCursor().setImage(getMouseCursor());///< 获取Window关联的TooltipTooltip* const tip = getTooltip();///< 判断tip是否为空,且tip不是父窗口if (tip && !isAncestor(tip))tip->setTargetWindow(this);///< 触发事件fireEvent(EventMouseEntersSurface, e, EventNamespace);}这其中调用了Tooltip的接口setTargetWindow():
void Tooltip::setTargetWindow(Window* wnd){//...///< 保存关联的目标窗口d_target = wnd;///< 设置Tooltip的窗口文本setText(wnd->getTooltipText());///< 重置显示时间resetTimer();//...}
这里要注意一下,setText(wnd->getTooltipText())设置的是Tooltip的成员d_text,而非wnd的成员d_text。在Tooltip的渲染层,悬浮提示文字的尺寸及内容都是通过Tooltip的d_text来获取的。
Tooltip中并没有重新定义onMouseMove()这个接口,所以当鼠标在窗口上移动时,触发的是Window::onMouseMove
void Window::onMouseMove(MouseEventArgs& e){///< 重新设置显示时间Tooltip* const tip = getTooltip();if (tip)tip->resetTimer();}当鼠标离开窗口区域时,会触发OnMouseLeaves()
void Window::onMouseLeaves(MouseEventArgs& e){const Window* const mw = getGUIContext().getWindowContainingMouse();Tooltip* const tip = getTooltip();///< 悬浮提示窗口存在且不为包含鼠标的wnd且不是当前窗口的父窗口时,将关联窗口指针置为空if (tip && mw != tip && !(mw && mw->isAncestor(tip)))tip->setTargetWindow(0);///< 触发事件fireEvent(EventMouseLeavesSurface, e, EventNamespace);}
- 悬浮提示的一种简单实现(CEGUI)
- angularjs框架的悬浮提示框实现
- iOS如何完美简单实现UITableView索引的放大悬浮提示View显示
- 可拖拽悬浮窗、对话框悬浮窗的简单实现
- 悬浮窗口(智能隐藏和显示)的一种实现方案
- Android 悬浮按钮的简单实现
- ListView悬浮Header的简单实现
- Ext实现鼠标悬浮提示
- 360的悬浮提示以及效果是如何实现的
- vector的一种简单实现
- 九九乘法表的一种简单实现
- 搜索引擎关键字智能提示的一种实现
- 搜索引擎关键字智能提示的一种实现
- 搜索引擎关键字智能提示的一种实现
- 搜索引擎关键字智能提示的一种实现
- 搜索引擎关键字智能提示的一种实现
- 搜索引擎关键字智能提示的一种实现
- 悬浮窗的实现(如360悬浮窗效果)
- 转:开源图形库 c语言-图形图像库 集合
- ORACLE中使用递归查询
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- Auto activation triggers for Java(代码提示)功能扩展
- 为什么把端口号改为80之后,访问的时候就可以不写端口号
- 悬浮提示的一种简单实现(CEGUI)
- Java读取文件方法
- 关于怎么获取jsp的web站点的目录问题
- SAP Basis如何显示SAP中所有用户列表
- TomCat JDK环境变量
- <p>标题</p>能设置字体的大小和颜色
- 清空session的方法
- HTML文本框内容发生变化时引发事件执行
- 使用onclick跳转到其他页面/跳转到指定url