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实现相关推荐

  1. 安卓Design包之AppBar和Toolbar的联用

    前面讲了Design包的的CoordinatorLayout和SnackBar的混用,现在继续理解Design包的AppBar; AppBarLayout跟它的名字一样,把容器类的组件全部作为AppB ...

  2. Flutter——设置appBar的高度

    使用脚手架Scaffold可以设置AppBar,想要设置高度,在AppBar外包一层PreferredSize,设置preferredSize的属性为想要的高度即可. Scaffold( appBar ...

  3. wtl中显示html,用WTL构建HTML界面应用程序(1)

    主要针对有一定Windows编程经验的读者.阅读本文需要对COM机制有一定的了解,最好掌握C++的STL,熟悉模板机制.本文假定您使用的是Visual C++(6.0以上版本),并正确安装了WTL 7 ...

  4. 背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar

    原文:背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar [源码下载] 背水一战 Windows 10 (40) - 控件(导航类): AppBar, ...

  5. Material组件之MaterialApp、Scaffold、AppBar学习笔记

    一.MaterialApp flutter的路由方式有两种:新建路由和注册路由 1.1 新建路由 Navigator.push负责将新建的路由添加到Navigator管理的route堆栈的栈顶,Nav ...

  6. 关于在Windows Mobile下今日插件使用WTL的问题

    简介 本文讲述在今日插件开发中整合WTL遇到的问题,问题已经解决,看解决部分. 问题 最近一段时间都在开发今日插件(Today Plug-in).开始把代码都写的差不多了,整合了Sqlite和WTL, ...

  7. C++ STL,ATL,WTL之间的联系和区别

    STL即 Standard Template Library (标准模板库) STL是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R M ...

  8. 使用MVVM绑定AppBar事件

    最近在做一个项目,使用到MVVM,在appbar事件绑定时候发现不知道怎么绑定,查阅资料发现时可以绑定的,需要借助到AppBarUtils,可以到这里http://appbarutils.codepl ...

  9. Windows 8实用窍门系列:10.Windows 8的基本变换和矩阵变换以及AppBar应用程序栏

    在Windows 8中有几种基本变换和矩阵变换和Silverlight中的使用方法都是一样. 包括: RotateTransform:旋转变换 ScaleTransform:缩放变换 SkewTran ...

最新文章

  1. 两种列式存储格式:Parquet和ORC
  2. mysql5.7建库建表_MySQL5.7 建库建表的命令
  3. Android 图片圆角的设置
  4. linux文件映射mmap
  5. Rxjava2.X的一些讲解
  6. OpenWRT 使用USB 4G上网卡
  7. 设置计算机从目标磁盘启动,电脑开机怎么设置从U盘启动
  8. ionic:点击某个商品名称,跳转到相应的商品详情页面
  9. Combined Margin loss人脸识别训练笔记
  10. 今日没有睡眠质量记录
  11. 报盘、还盘的英语短句(建议收藏)
  12. 找不到网络路径计算机共享,win10 局域网共享问题 提示0x80070035 找不到网络路径...
  13. 【松岩早盘视点】2019-09-30
  14. intel历代架构演进6—— SIMD指令集
  15. ORA-01210: data file header is media corrupt
  16. java agent简介
  17. 自动驾驶专题介绍 ———— 毫米波雷达
  18. 自建DNS server 同时屏蔽某些网站
  19. 【逆向】【Android微信】获取微信聊天记录
  20. Spring Cloud Alibaba 同时兼容dubbo与openfeign

热门文章

  1. 什么是“软件定义汽车”
  2. 百斗度输入法linux,爪哇语输入法下载-爪哇语输入法 安卓版v10.0.16-PC6安卓网
  3. Qt报错unknown type name XXX
  4. 递归算法实现角谷定理
  5. 用户体验地图——互联网平台建设
  6. 京东商城关键词SEO优化总结
  7. 全球及中国电动汽车产业产销规模与十四五发展方向调研报告2022版
  8. 微信网页下载无效 微信无法打开分享的链接的解决方案
  9. 带分数(全排列详解)
  10. Linux中安装的mysql查不到配置文件my.cnf