Excel阅读模式/聚光灯开发技术序列作品之三

高级自定义任务窗格开发原理简述——    隐鹤

1. 引言

Excel任务窗格是一个可以用来存放各种常用命令的侧边窗口(准确的说是一个可以停靠在类名为xlDesk窗口周围的Excel的子窗口)。Excel插件开发中可以用它来存放一些常用的自定义界面的窗口,用于相关Excel的操作,还是十分方便的。原生长相如下图:

在office开发中,微软提供了原生的任务窗格接口,可以接收一个我们自定义的userform的实例,界面自定义也都很方便。

唯一不足的是,他给的自定义很有限。比如,窗格的宽度(或高度)有限制,窗格的标题栏(有个关闭X没有提供方法去除),总之不能够最大化的进行自定义,相信有过任务窗格开发经验的应该都明白了。显然没有如下图的这种任务窗格灵活:

知名Excel插件Kutools(收费),中工作部表导航功能用到的任务窗格就是上图这种:

本文要阐述的就是这种任务窗格,我称之为高级自定义任务窗格。称之为高级任务窗格是有出处的,有个外国网站就有这种任务窗格的开发组件出售。

对于Excel开发者来说,用这种高级任务窗格用来装载开发的常用功能,但又可以让其占地可高度调控是十分有必要的。一定程度上可以免于Ribbon切换带来的繁琐。

2. 目前已实现此类任务窗格的插件:

◆ Kutools

目前其他人的插件只看到大名鼎鼎的Kutools插件的作者中的工作簿表导航功能用到这种任务窗格。还是鲜有看到其他人开发。

◆ ExcelPower_Helper

除了Kutools的,我只看到本人开发的ExcelPower_Helper中的侧边栏工具已成功实现这一类的任务窗格。

其实还是有不少开发者网友是很想要去开发这种类型的高级任务窗格的。

3.开发技术要点简述

   

本文最重要的部分,来谈一谈实现这种方式的简要原理:

◆ Excel是MDI多文档窗口,Mdi窗口是可以调整其位置大小的。

◆ 通过spy++可以看到office的任务窗格实际是其主窗口Xlmain的一个mdi子窗口,我们可以创建一个这样的子窗口。

◆ 然后通过api调整其与类名为xldesk窗口的位置关系即可。

◆ 比较难处理的是要捕获一些窗口的消息,当xldesk窗口大小位置发生变化时,重新处理挂载任务窗格与xldesk窗口的关系。

◆ 要注意,因为捕获的窗口消息是和窗口大小位置有关的WM_SIZE等,捕获后要去处理这些窗口的大小等,又会产生类似消息。要注意处理好这其中的消息循环逻辑,不然会陷入消息泵死循环。

◆ Excel2007与之后的版本某些地方不太一样。2007以下的没做测试。

感兴趣的可以按以上几点思路,去研究下。

【总结】

高级任务窗格,实际也没那么难。相比之下应该是聚光灯技术序列作品里最简单的一个了。

  三篇聚光灯技术序列阐述博客至此已经完结。可以了却一宗心事了。

  所谓技术嘛,在专业以计算机编程为业的人那里,以上三篇博客阐述的,可能也不算什么多么厉害的技术,虽然牛逼也吹了不少(后面还会继续吹),但是作为一个编程爱好者,一个Excel开发爱好者,我是认真的。能得到我的用户们的一点赏识就已知足。谢谢各位。

Excel阅读模式/聚光灯开发技术序列作品之三 高级自定义任务窗格开发原理简述—— 隐鹤的更多相关文章

  1. Excel阅读模式/聚光灯开发技术之二 超级逐步录入提示功能开发原理简述—— 隐鹤 / HelloWorld

    Excel阅读模式/聚光灯开发技术之二 超级逐步录入提示功能开发原理简述———— 隐鹤  /  HelloWorld 1. 引言 自本人第一篇博文“Excel阅读模式/单元格行列指示/聚光灯开发技术要 ...

  2. Excel阅读模式/单元格行列指示/聚光灯开发 技术要点再分享

    1. 引言 文题中所谓技术要点再分享,本意是想在大神Charltsing Liu的博文“简单介绍Excel单元格行列指示的实现原理(俗称聚光灯功能)”的基础上写一点个人开发体会.写本文的初衷有三点,一 ...

  3. [转]TEC1401.Report开发技术总结 - 第三章 使用Oracle Reports开发报表-创建一个分组报表(2/4)

    本文转自:http://blog.csdn.net/deepsea_allen/article/details/53900284 第三章   创建一个分组报表 1.     建立数据模型 数据模型用于 ...

  4. 《Windows驱动开发技术详解》之自定义StartIO

    自定义StartIO 系统定义的StartIO队列只能使用一个队列(DDK提供的StartIO内部只有一个队列),这个队列将所有的IRP进行处理化.例如,读.写操作都会混在一起进行串行处理.然而,有时 ...

  5. VC++/MFC(VC6)开发技术精品学习资料下载汇总

    工欲善其事,必先利其器,VC开发MFC Windows程序,Visual C++或Visual Studio是必须的,恩,这里都给你总结好了,拿去吧:VC/MFC开发必备Visual C++.Visu ...

  6. Autodesk 最新开发技术研讨会 -8月22日-Autodesk北京办公室

    为了增进与广大中国地区Autodesk产品的二次开发人员的了解与互动,帮助中国地区的Autodesk产品二次开发人员了解Autodesk最新的二次开发技术动向,并获得Autodesk公司专业开发支持顾 ...

  7. 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? .Net Web开发技术栈

    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?   什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念 ...

  8. 个人永久性免费-Excel催化剂功能第72波-序列规则下的数据验证有效性好帮手:快速录入窗体辅助录入

    Excel作为最好用的数据录入工具,没有之一,如果能够充分利用好Excel的灵活性和规范性,将带来极大的生产力提升,前面的几波功能也有做了几大数据录入的辅助功能,今天再次给大家带来一个特定的使用场景, ...

  9. GIS历史概述与WebGis应用开发技术浅解

    声明:本篇在李晓晖的<杂谈WebGIS>,补充更多的资料说明.基于地图二次开发一直断断续续在做,这里算是补充一下基本功把.其实对于前端,WebGis开发都是api,抄demo,改.GIS深 ...

随机推荐

  1. Hangfire源码解析-如何实现可扩展IOC的?

    一.官方描述 These projects simplify the integration between Hangfire and your favorite IoC Container. The ...

  2. PMBook - 以考PMP为项目,整理项目章程

    一.以考PMP为项目,整理项目章程 二.PMBook 制定项目章程:输出 参考资料:<PMBook第六版> 作 者: Jackson0714 出 处:http://www.cnblogs. ...

  3. TabTopLayout【自定义顶部选项卡区域(固定宽度且居中)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 自定义顶部选项卡并居中显示.结合显示/隐藏view的方式实现切换功能(正常情况下可能是切换fragment). 效果图 代码分析 T ...

  4. arguments对象详解

    在javascript中,函数是没有重载这一项的,所谓的重载,一个函数可以有多个,就是参数的个数和形式不同所以引用的功能不同,而js不存在函数重载,不管传不传参数,函数里面是否引用,关系都不大,一个函 ...

  5. DotNetCore跨平台~EFCore2.0连接Mysql的烦恼-已解决

    回到目录 对于传统的nuget包,我们习惯上用官方或者大型组织的,因为它们比较考靠谱,但就在前两天.net core2.0发布后,我把efcore也升级到2.0了,mysql.EfCore也升级到支持 ...

  6. LindDotNetCore~ISoftDelete软删除接口

    回到目录 概念 ISoftDelete即软删除,数据在进行delete后不会从数据库清除,而只是标记一个状态,在业务范围里都不能获取到这个数据,这在ORM框架里还是比较容易实现的,对传统的ado来说需 ...

  7. 详解mybatis配置文件

    在前面两篇文章中,大致与大家分享了基于Java的ORM框架,Mybatis基本架构和Mybatis实现CRUD的基本原理与流程,在本篇文章中,继续与大家分享Mybatis配置文件. 通过研究Mybat ...

  8. IntelliJ IDEA如何激活?

    本文使用的IDEA的版本是:14.0.3 下载IDEA授权服务器(下载地址见最后),并解压,打开解压后的IntelliJIDEALicenseServer目录,可以看到如下的两个文件: Intelli ...

  9. Python二级-----------程序冲刺1

    1. 仅使用 Python 基本语法,即不使用任何模块,编写 Python 程序计算下列数学表达式的结果并输出,小数点后保留3位.‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪ ...

  10. ssh远程连接vm 安装的ubuntu

    准备工作 安装包  vmware 虚拟机.xshell.ubuntu 1.软件安装比较简单,这里不做介绍 2.选择虚拟机连接方式 3.添加虚拟IP 配置 编辑->虚拟网络编辑器->选择vm ...