今日は午前中Blog整理をして、アイコン作りを始めたが絵心がないので軽く挫折した。そういう意味でもWindows7は敷居が高いなあと感じる。アイコンはとりあえず置いておいて、サムネイル・ツールバーを調べてみた。
サムネイル・ツールバーとは何かというと、Windows 7 のタスクバーのサムネイル表示(縮小表示)に付くツールバーのことである。
WMPで音楽を再生しながらChromeブラウザを起動してHPを観ているとすると、音楽を止めたくなったときはわざわざWMPをアクティブにしなくてもタスクバーのWMPのアイコンにマウスカーソルを重ね、縮小表示内のツールバーの停止ボタンを押せばよい。
ちなみにiTunesもサポートしていた。さすがですな。。
サムネイル・ツールバーはいわゆるツールバーなのだが、仕様(というか制約)は以下のとおりである。
- サムネイル・ツールバーのボタンは7個までに制限される。
- サムネイル・ツールバーはサムネイル画面にセンタリングされる。
- サムネイル・ツールバーはサムネイル画面下部に表示される。サムネイル画面を覆うことはできない。
- サムネイル・ツールバーは半透明である。不透明にできない。
- サムネイル・ツールバーの個々のボタンはTHUMBBUTTON構造体で、ツールバー自体はその配列で定義(ITaskbarList3::ThumbBarAddButtons)・設定・変更( ITaskbarList3::ThumbBarUpdateButtons.)する。
- サムネイル・ツールバーを一度セットすると削除できない。ITaskbarList3::ThumbBarUpdateButtonsで非表示にはできる。
- サムネイル・ツールバーが画面に表示しきれない場合、右から左の順で表示されなくなる。
- サムネイル・ツールバーのボタンアクションは、 WM_COMMANDメッセージで送られる。 wParam のHIWORDにTHBN_CLICKED が、LOWORDにボタンIDがセットされる。
UXガイドラインにもサムネイル・ツールバーのことが書かれている。
http://msdn.microsoft.com/ja-jp/library/aa511446.aspx#thumbnail
サムネイル・ツールバーのAPIはザックリ感漂う物である。THUMBBUTTON構造体の配列ですべてコントロールするので、ツールバーの中の1つのボタンの状態を変更するのも配列全体をすべて渡すのである。またボタンの状態をOSから逆に得ることはできないので、状態管理をすべてアプリ側で行わないといけない。まあそんなに大したことではないか。。出来ることも限られているし、制約も大きいしね。
話はそれるけど、気になってきたのはアイコンのリソース管理である。アイコンのハンドルをパラメータにして渡すと、そのアイコンのオーナーは誰になるのかということ。つまり破棄の責任は誰が持つのかということ。今回のサムネイル・ツールバーAPIも個々のボタンにアイコンハンドルを渡せる。アイコンハンドルなので作るのはアプリ側だけど、引き渡したアイコンを処分するのはOS側なのかアプリ側なのか。リソースとしてEXE内部で持つものはOSが管理して、自前でアイコンを生成した場合はアプリ側で管理するような考えを漠然と持っているが、それで合っているのだろうか。他のアイコンを引数に持つAPIはどうなのか。調べてみようかな。。