wxAuiNotebook的wxAUI_NB_TAB_EXTERNAL_MOVE样式用法
来源:互联网 发布:旺点软件怎么恢复数据 编辑:程序博客网 时间:2024/06/11 06:41
wxAuiNotebook是wxWidgets库中用于实现同一窗口显示多页的页面tab,这是一种很流行的页面布局方式。在wxWidgets中,可以将从wxWindow继承的页面添加到notebook中,页面上可以再放多个控件。另外,因为控件本身也从wxWindow继承,所以也可以将单个的一个控件添加到notebook中。
notebook的分页可以支持页面拖放,即拖动页面的位置。但要支持拖动需要在创建notebook时指定style。有两个支持拖动的style:
wxAUI_NB_TAB_MOVE:支持将页面在同一个notebook从一个位置拖动到另一个位置。
wxAUI_NB_TAB_EXTERNAL_MOVE:支持将页面从一个notebook拖动到另一个notebook。
下面的代码片断创建了两个notebook,每个notebook上添加两个text控件,即每个notebook有两个分页。
创建完后,试了一下拖动功能。在同一个notebook拖动页面是没问题了。但是当将页面拖动到另一个notebook上时却发现不行。原本以为是个bug,后来看了下wxWidgets源代码关于wxAUI_NB_TAB_EXTERNAL_MOVE样式的控制,才发现另有玄机。
看看wxWidgets处理拖动的代码:
原来wxWidgets对于拖动到另一个notebook的情况并不直接放进去,而是先发一个wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND事件给目标notebook,问一下是否允许放进去,
if (!e.IsAllowed()) //wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND是否被allowed
{
// no answer or negative answer
m_mgr.HideHint();
return; //不allowed,直接return,当然就没法拖放了。
}
看了这个之后就明白了,那我们只要处理目标notebook的wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND事件就可以了。下面就添加notebook的事件处理:
编译完,再跑一下,果然可以拖动到外部了。
wxWidgets确实是个挺好用的界面库,类体系和MFC差不多,但却封装了很多MFC没有的控件,省去自己再扩展MFC的麻烦。只是文档还是不够全面。像这个wxAUI_NB_TAB_EXTERNAL_MOVE样式支持外部拖放需要自己再处理事件的都没写清楚。看来要推广开来还需要努力啊。
- wxAuiNotebook的wxAUI_NB_TAB_EXTERNAL_MOVE样式用法
- Silverlight中样式的用法
- css 样式用法的累积
- Toast的各种样式用法
- ProgressBar的样式及用法
- xsl样式解析时全局变量的用法
- android自定义样式style的用法
- 样式中 nth-child(n) 的用法
- xsl样式解析时全局变量的用法
- css样式的零碎用法总结
- xsl样式解析时全局变量的用法
- Table的小样式,和Fileupload的小用法
- 安卓中编写样式的xml文件的用法
- 样式表用法
- 表单样式[fieldset]用法
- CSS文本样式用法
- ListBoxControl样式与用法
- 将CSS样式写成JS格式的用法
- 大学毕业快半年了,现在想换工作了,想考系统分析师
- 一个好用的天气预报WebService
- C语言学习记录
- 用PHP实现POP3邮件的收取(转载)
- Hibernate主键生成方式 Key Generator
- wxAuiNotebook的wxAUI_NB_TAB_EXTERNAL_MOVE样式用法
- 需求分析的20条法则
- 艰苦奋斗100天
- 用于主题检测的临时日志(c4cacc86-fcdc-40c2-aef1-c680980ecb0f - 3bfe001a-32de-4114-a6b4-4005b770f6d7)
- mysql 优化总结
- Windows下使用VIM,搭建Mainframe开发环境(七)---编译并修改源文件
- 等差数列
- 知识产权保护
- Google 排名中的 10 个最著名的 JavaScript 库