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. 从零开始学习PYTHON3讲义(十六)(连载完)学习资源包下载

    <从零开始PYTHON3>学习资源包下载 课程连载已经完全结束. 经过整理校对,这里把在课程中出现过的源码和练习答案示例源码全部打包提供下载: https://pan.baidu.com/ ...

  2. springboot~Money类型在序列化时遇到的问题与解决

    在java扩展包里,有这样一个包,它可以描述货币类型,它说币种和金额组成,可以应用在任何复杂的场合里,这个对象结构如下: { "price": { "amount&quo ...

  3. 微信公众号开发C#系列-1、微信公众平台注册

    微信公众号简介 微信公众号分为服务号.订阅号.企业号,订阅号可以个人申请,服务号和企业号要有企业资质才可以. 我们所说的微信公众号开发主要指的是公众号的账号类型,公众号的账号类型分为订阅号.服务号.企 ...

  4. Linux环境变量配置全攻略

    Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法. 下面所有例子的环境说明如下: 系统:Ubuntu 14.0 用户名:uusama 需要配置M ...

  5. Springboot 系列(五)Spring Boot web 开发之静态资源和模版引擎

    前言 Spring Boot 天生的适合 web 应用开发,它可以快速的嵌入 Tomcat, Jetty 或 Netty 用于包含一个 HTTP 服务器.且开发十分简单,只需要引入 web 开发所需的 ...

  6. django-restframework之缓存系统

    django-restframework之缓存系统 一 前言 一 为什么需要缓存 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增.删.查.改,渲染模块,执行业务逻辑,最后生成用户看到的 ...

  7. 图片与Base64的转换

    图片转为Base64 // 图片转化成base64字符串 public static String GetImageStr() {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理 ...

  8. 使用jQuery增加或删除元素(内容)

    使用jQuery增加或删除元素(内容):一.jQuery添加元素或内容:1,append() 方法:在被选元素的结尾插入元素或内容 2,prepend() 方法:被选元素的开头插入元素或内容. 3,a ...

  9. 用jQuery做一个选项卡

    1.首先我们点击选项卡的标题栏来改变内容

  10. .net 笔试面试总结(2)

    在.net 中类(class) 与结构(Struct)的异同. Class 可以被实例化,属于引用类型,是分配在内存的堆上的.类是引用传递的. Struct 属于值类型,是分配在内存的栈上的.结构体是 ...