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. golang高并发的理解

    前言 GO语言在WEB开发领域中的使用越来越广泛,Hired 发布的<2019 软件工程师状态>报告中指出,具有 Go 经验的候选人是迄今为止最具吸引力的.平均每位求职者会收到9 份面试邀 ...

  2. springboot打包不同环境配置与shell脚本部署

    本篇和大家分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell程序启动工具,希望能便利工作: profiles指定不同环境的配置 maven-assembly-plu ...

  3. 【反编译系列】四、反编译so文件(IDA_Pro)

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 安卓应用程序的开发语言是java,但是由于java层的代码很容易被反编译,而反编译c/c++程序的难度比较大,所以现在很多安卓应用程 ...

  4. Python:黑板课爬虫闯关第五关

    第五关是最后一关了,至此之后黑板课就没有更新过关卡了. 第五关地址:http://www.heibanke.com/lesson/crawler_ex04/ 可以看到,是在第三关的基础上加了验证码. ...

  5. 【大数据安全】基于Kerberos的大数据安全验证方案

    1.背景 互联网从来就不是一个安全的地方.很多时候我们过分依赖防火墙来解决安全的问题,不幸的是,防火墙是假设"坏人"是来自外部的,而真正具有破坏性的攻击事件都是往往都是来自于内部的 ...

  6. 配置CLion作为Qt5开发环境

    使用Qt进行程序开发时QtCreator总是不二之选.作为老牌IDE在提供了强大的功能同时也对Qt的支持做了许多优化.如果没有特别的原因你应该使用它. 然而一个顺手的工具将会极大得提升生产效率,而如果 ...

  7. .net core +codefirst(.net core 基础入门,适合这方面的小白阅读,本文使用mysql或mssql)

    设置为model所在的那一层 前言 .net core mvc和 .net mvc开发很相似,比如 视图-模型-控制器结构.所以.net mvc开发员很容易入手.net core mvc .但是两个又 ...

  8. 逐个使用C++11新特性

    C++11 auto & decltype auto:根据变量初始值来推导变量类型,并用右值初始化变量. decltype:从表达式推导出类型,并将变量定义为该类型,但不用表达式的值初始化该变 ...

  9. d3js scales深入理解

    转自:https://www.cnblogs.com/kidsitcn/p/7182274.html 比例尺函数是这样的javascript函数: 接收通常是数字,日期,类别等data输入并且: 返回 ...

  10. C#隐式转换与显示转换

    System.Objec时C#中所有类型的基类,也就是万类之源. 一.值类型 值类型都继承自System.ValueType(派生自System.Objec),继承自System.ValueType的 ...