Skip to content

Instantly share code, notes, and snippets.

@kumatti1
Created April 2, 2012 23:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kumatti1/2287862 to your computer and use it in GitHub Desktop.
Save kumatti1/2287862 to your computer and use it in GitHub Desktop.
・Windows リボンフレームワーク

###始めに Windows7以降には上記のCOMがサポートされているが、 Vista向けにはWindows Updateで提供され、単独のKBでも入手出来る。 (これがどういったものなのかは、7のペイントやワードパッドで確認出来る)

Officeのリボンと決定的に違うのは、マークアップバイナリをリソースに持たせる点だろう。 さて、リソースの話をしたが、通常自前のexeならexe側に持たせる事もよくあるが、 Officeではそれは妥当と言えないだろう。

なので、DLLに持たせるのだが、お分かりだろうか。 開発側にはDLLを作成出来る環境、実行側にはDLLを持ち込める環境という条件である。

##1) TypeLib

まずは、DLL側のリソースに持たせるTypeLibに触れてみよう。 MSDNを参照してWindows SDK の該当する*.idlを VBA向けに直していく作業である。

特定のCOMインターフェースはそもそも未定義なので (著者は)アルファベット順に並んでいるメソッドに注意を払いつつ、 MSDNから逐一、各メソッドの定義をコピー、idl側の定義と置き換えた。 (根気の要る作業であるorz)

基本的に引数は値渡しのLong型として、必要に応じて 参照渡しの固有型等に変更すればいいだろう。

##2) DLL

別段、これと言った作業ではなくて、MSDNからエントリーポイント(DllMain)を コピーしてくるだけである。 (include文も必要)

##流れ

マークアップコンパイラ(uicc.exe)でribbonの定義ファイル(.xml)をマークアップバイナリ(.bml)へ。 (リソースファイルも同時)

IDLコンパイラ(midl.exe)でTypeLib作成。

リソースファイルにTypeLib追加の旨を書く。

リソースコンパイラ(rc.exe)で、リソーススクリプト作成。

VC++コンパイラ(cl.exe)でDLL作成。

##Excelでの例

リンク先の練習 2: リボンへのコントロールの追加 をExcelのUserFormに置き換えてのサンプル。

VBA向け

ExcelならUserFormに強力なUIを提供しますが、使いこなすのはなかなか、大変かなと。 (基本的に英語のドキュメントオンリーなので)

##リファレンス

##後書き TypeLibは、未定義なのは仕方無いとして、 正規表現のパターンをよく考えれば、効率良くidlを変更出来るかもしれません。

APIや定数もTypeLibに定義出来ますが、既にDeclare 用のスクリプトがあり、それを使い回しているので、 VBA側で宣言しています。

また、C++のサンプルをWH_CALLWNDPROCフックなどのフック用に直せば、見た目の上で同じ事が出来ますが、 VBAとの連携を考えると却って難しいかもしれません。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment