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開發愛好者,我是認真的。能得到我的用戶們的一點賞識就已知足。謝謝各位。