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. 从壹开始前后端分离 [ vue + .netcore 补充教程 ] 二七║ Nuxt 基础:框架初探

    缘起 哈喽大家好,又是周四了,俗话说周四来了,周末还远么哈哈,老张我也想下周请假,来个16天的大长假哟,不知道大家是怎么请假的,近来发现文章下边已经没有人评论了,赶脚比较凄凉了,大家看到的麻烦点个赞呀 ...

  2. unity+xlua开发中的问题笔记

    转载请标明出处:http://www.cnblogs.com/zblade/ 一.概述 整理遇到的一些较难处理的bug,总结相关经验 二.主要问题 2.1 material类型的依赖修改 对于mate ...

  3. 基于python脚本,实现Unity全平台的自动打包

    转载请标明出处:http://www.cnblogs.com/zblade/ 0. 概述 本文主要针对项目中自动打包过程进行调研,实现用python脚本来打出win/android/ios三个平台下的 ...

  4. InheritableThreadLocal类原理简介使用 父子线程传递数据详解 多线程中篇(十八)

      上一篇文章中对ThreadLocal进行了详尽的介绍,另外还有一个类: InheritableThreadLocal 他是ThreadLocal的子类,那么这个类又有什么作用呢?   测试代码 p ...

  5. powdesingner 更新数据库表结构

    1.连接数据库 2更新数据库表结构

  6. Java HashMap 使用了未经检查或不安全的操作

    今天在做接口测试的时候使用了Java中的Map(java 所知胜少,因项目需要提供示例),不扯犊子了,我们直接看一个代码文件名:Test.java: import java.util.ArrayLis ...

  7. 为什么单线程的Redis这么快?

    一. Redis简介 Redis是一个开源的内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(li ...

  8. spring boot拦截器中获取request post请求中的参数

    最近有一个需要从拦截器中获取post请求的参数的需求,这里记录一下处理过程中出现的问题. 首先想到的就是request.getParameter(String )方法,但是这个方法只能在get请求中取 ...

  9. Ext.isNumber与Ext.isNumeric

    Ext.isNumber: Ext.isNumber(1) true Ext.isNumber(new Number(1)) false Ext.isNumber("1") fal ...

  10. 安装Docker时错误提示 "could not change group /var/run/docker.sock to docker: group docker not found"的解决方案

    安装Dock服务,主要命令是  yum install docker. 但是在启动的时候报错:warning msg="could not change group /var/run/doc ...