AppBar的WTL实现
AppBar的WTL实现
【IT168知识库】
关于Docking Window的文章有很多,基本都是讲主程序内部的工具栏小窗口的Docking,看看代码,一般都很复杂。关于桌面Docking的文章并不多见。实际上从Windows95开始,Win32 API就提供了一个叫做SHAppBarMessage的函数,用于实现完全等同于Windows Task Bar的功能。即可以停靠在屏幕在任意一边,并把自己排除到桌面空间之外。当其他应用程序窗口最大化的时候,不占据Task Bar的空间。同时,也可以设置成自动隐藏,让出所有的桌面空间。这样的窗口,就称为AppBar。
象QQ这样的程序可以停靠在窗口的一边,也可以自动隐藏,但似乎和AppBar的行为还是有不少差距的。本文提供的是对标准AppBar的一个实现。
利用SHAppBarMessage函数实现一个AppBar并不困难,这篇文章介绍了几乎所有实现细节,但所提供的例子却是SDK风格的代码,基本没有实际使用价值。但是对于SDK文档是一个很好的补充,很多SDK中没有说清楚的问题在文中给出了解释。
另一个问题是,SHAppBarMessage函数并没有提供我想当然认为应该实现的功能。比如对拖动的支持,比如自动隐藏窗口的隐藏和出现功能都必须额外的代码实现。SHAppBarMessage函数所做的主要工作似乎是划分屏幕,使其他窗口不会占用AppBar的空间。当然,能实现这个也足够了,毕竟,没有SHAppBarMessage函数,其他功能肯定都可以实现,而这个划分屏幕的功能我不知道该怎么做。
写一个可重用的AppBar基础类的愿望马上出现在我头脑中。WTL由于其超低的耦合性成为我必然的选择。模板类CAppBar<T>就是工作的结果。这个类不只是对SHAppBarMessage函数的简单封装,同时提供了通过拖动实现停靠或脱离屏幕的功能,并提供自动隐藏的实现。
任何从CWindowImpl直接或间接继承的弹出式窗口类都可以使用CAppBar。使用的方法很简单:
1、把CAppBar作为一个父类继承
2、使用CHAIN_MSG_MAP把消息传递给CAppBar
3、在窗口创建时调用InitAppBar函数,参数可选
这样,这个窗口就具备了AppBar的功能了,下面你就可以通过拖动把它停靠在屏幕边上了。
当然,也可以通过调用DockAppBar停靠或脱离;或者调用SetAutoHide改变自动隐藏的设置。
如果在停靠状态改变时需要有特殊操作,可以重载OnDockingChanged函数。
AppBar的WTL实现相关推荐
- 安卓Design包之AppBar和Toolbar的联用
前面讲了Design包的的CoordinatorLayout和SnackBar的混用,现在继续理解Design包的AppBar; AppBarLayout跟它的名字一样,把容器类的组件全部作为AppB ...
- Flutter——设置appBar的高度
使用脚手架Scaffold可以设置AppBar,想要设置高度,在AppBar外包一层PreferredSize,设置preferredSize的属性为想要的高度即可. Scaffold( appBar ...
- wtl中显示html,用WTL构建HTML界面应用程序(1)
主要针对有一定Windows编程经验的读者.阅读本文需要对COM机制有一定的了解,最好掌握C++的STL,熟悉模板机制.本文假定您使用的是Visual C++(6.0以上版本),并正确安装了WTL 7 ...
- 背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar
原文:背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar [源码下载] 背水一战 Windows 10 (40) - 控件(导航类): AppBar, ...
- Material组件之MaterialApp、Scaffold、AppBar学习笔记
一.MaterialApp flutter的路由方式有两种:新建路由和注册路由 1.1 新建路由 Navigator.push负责将新建的路由添加到Navigator管理的route堆栈的栈顶,Nav ...
- 关于在Windows Mobile下今日插件使用WTL的问题
简介 本文讲述在今日插件开发中整合WTL遇到的问题,问题已经解决,看解决部分. 问题 最近一段时间都在开发今日插件(Today Plug-in).开始把代码都写的差不多了,整合了Sqlite和WTL, ...
- C++ STL,ATL,WTL之间的联系和区别
STL即 Standard Template Library (标准模板库) STL是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R M ...
- 使用MVVM绑定AppBar事件
最近在做一个项目,使用到MVVM,在appbar事件绑定时候发现不知道怎么绑定,查阅资料发现时可以绑定的,需要借助到AppBarUtils,可以到这里http://appbarutils.codepl ...
- Windows 8实用窍门系列:10.Windows 8的基本变换和矩阵变换以及AppBar应用程序栏
在Windows 8中有几种基本变换和矩阵变换和Silverlight中的使用方法都是一样. 包括: RotateTransform:旋转变换 ScaleTransform:缩放变换 SkewTran ...
最新文章
- 两种列式存储格式:Parquet和ORC
- mysql5.7建库建表_MySQL5.7 建库建表的命令
- Android 图片圆角的设置
- linux文件映射mmap
- Rxjava2.X的一些讲解
- OpenWRT 使用USB 4G上网卡
- 设置计算机从目标磁盘启动,电脑开机怎么设置从U盘启动
- ionic:点击某个商品名称,跳转到相应的商品详情页面
- Combined Margin loss人脸识别训练笔记
- 今日没有睡眠质量记录
- 报盘、还盘的英语短句(建议收藏)
- 找不到网络路径计算机共享,win10 局域网共享问题 提示0x80070035 找不到网络路径...
- 【松岩早盘视点】2019-09-30
- intel历代架构演进6—— SIMD指令集
- ORA-01210: data file header is media corrupt
- java agent简介
- 自动驾驶专题介绍 ———— 毫米波雷达
- 自建DNS server 同时屏蔽某些网站
- 【逆向】【Android微信】获取微信聊天记录
- Spring Cloud Alibaba 同时兼容dubbo与openfeign