tmytのらくがき

個人の日記レベルです

Part.2 飛んでくるメッセージと飛ばすメッセージ

前回、次は飛んでくるメッセージの解説する。と言ったので、今回はメッセージ編です。


ほとんどMSDNからのコピーです。変更は日本語にしたぐらいです。日本語のMSDNにも書いてくれればいいのに。
英語できない子なので、超てきとうです。誤訳だらけだと思います。なんかあったらどんどん突っ込んでください。

まずはSelectability に関係なく飛んでくるメッセージ。

WM_TODAYCUSTOM_QUERYREFRESHCACHE

システムからだいたい2秒ごとに飛んできます。
前回書いたようにアイテムの高さを変えたいときはこのメッセージに応答します。

引数
  • WPARAM
    • TODAYLISTITEM 構造体へのポインタ
  • LPARAM
    • 予約されています。0を指定しなければなりません。
戻り値

アイテムを更新する必要があるならばTRUE、そうでないならFALSEを返します。

WM_TODAYCUSTOM_CLEARCACHE

アイテムがアンロードされる時に送られます。
このメッセージを受信したときに、アイテムはキャッシュしているデータを破棄しなければなりません。
破棄した後にTODAYLISTITEM構造体のgrfFlags, prgbCachedData, cbCachedDataメンバを更新しないといけないらしいです。

引数
  • WPARAM
    • TODAYLISTITEM 構造体へのポインタ
  • LPARAM
    • 予約されています。0を指定しなければなりません。
戻り値

戻り値はありません。

次にSelectabilityが1の時。ですが、Selectabilityが1の時はOSが選択を自動で処理してくれるので何もしなくていいことになってます。
アイテムが選択された状態で、ユーザがアクションキー*1を押した場合は、(1,1)の位置でタップしたということでシステムが処理してくれます。
なのでアイテムとしてはWM_LBUTTONDOWNメッセージに応答するとSelectabilityが1の時の処理は完了。のはずです。

次にSelectabilityが2の時飛んでくるメッセージ。

WM_TODAYCUSTOM_ACTION

アイテムが選択されているときにユーザがアクションキー*2を押したときに送信されます。

引数
  • WPARAM
    • アクションキーの仮想キーコードが格納されます。(VK_RETURNです。)
  • LPARAM
    • このパラメータは使用されません。
戻り値

戻り値は無視されます

WM_TODAYCUSTOM_LOSTSELECTION

アイテムの選択が解除されたとき*3に飛んできます。

引数
  • WPARAM
    • パラメータは使用されません
  • LPARAM
    • パラメータは使用されません
戻り値

戻り値は無視されます。

WM_TODAYCUSTOM_RECEIVEDSELECTION

アイテムが選択されたときに送信されます。上下にあるアイテムがWM_TODAYCUSTOM_USERNAVIGATIONメッセージにFALSEを返したときに送信されます。
さらにSelectabilityに関係なくWM_ERASEBKGNDとWM_PAINTを受け取ります。*4

引数
  • WPARAM
    • このメッセージが飛んでくる原因となったキーの仮想キーコード*5
  • LPARAM
    • パラメータは使用されません
戻り値

選択を受け取る場合はTRUEを返します。FALSEを返すと選択を受けずにシステムは次のアイテムを選択状態にしようとします。

WM_TODAYCUSTOM_USERNAVIGATION

アイテムが選択状態のときにユーザがナビゲーションキー*6を押したときに飛んできます。
アイテムの中で複数選択項目があるときとか、このメッセージに応答していろいろしたらいいです。

引数
  • WPARAM
    • VK_UPとかVK_DOWNみたいな仮想キーコードがはいってます。
  • LPARAM
    • パラメータは使用されません
戻り値

メッセージを処理したときはTRUEを返さなければなりません。FALSEだった場合はアイテムの選択は解除されます。


システムから送信されるメッセージは以上です。そんなに多くないです。
これらのメッセージに必要なら応答しつつ、ほかのメッセージを普通のWindowsプログラムと同じように処理しておけばだいたい大丈夫です。

最後にアイテムから親ウィンドウに送るメッセージ。

TODAYM_DRAWWATERMARK

指定した領域にTodayの背景を描画してもらいます。

引数
  • WPARAM
    • 予約されています。0を指定しなければなりません。
  • LPARAM
    • TODAYDRAWWATERMARKINFO構造体へのポインタ

ついでにTODAYDRAWWATERMARKINFO構造体の中身

typedef struct {
  HDC hdc;
  RECT rc;
  HWND hwnd;
} TODAYDRAWWATERMARKINFO;
  • hdc
    • 描画先デバイスコンテキストハンドル
  • rc
    • 描画する範囲
  • hwnd
    • アイテムのウィンドウハンドル
戻り値

成功するとTRUE、失敗するとFALSEが返ります。

TODAYM_GETCOLOR

現在のTodayで使われている各種色設定を取得します。

引数
  • WPARAM
    • どの色を取得するかを指定します
  • LPARAM
    • 予約されています。0を指定しなければなりません。

WPARAMにはTODAYCOLOR_TEXT*7TODAYCOLOR_HIGHLIGHT*8TODAYCOLOR_HIGHLIGHTEDTEXT*9を指定できます。

戻り値

指定した色に対するCOLORREFが返ります。

TODAYM_REQUESTREFRESH

これを送信するとシステムはすべてのアイテムに対してWM_TODAYCUSTOM_QUERYREFRESHCACHEを送るそうです。いまいちよくわかりません。
このメッセージはWM6以降で対応してます。

引数
  • WPARAM
    • パラメータは使用されません
  • LPARAM
    • パラメータは使用されません
戻り値

0の時、シェルはメッセージを処理しました。
戻り値はシェルがメッセージを処理したか。だけであって、実際に画面がリフレッシュされたかどうかは関係ありません。

TODAYM_TOOKSELECTION

いますぐアイテムを選択して欲しいときに送信します。たとえばタップされたときとか。
メッセージを送信するとWM_TODAYCUSTOM_RECEIVEDSELECTIONが送信されます。このときWPARAMが0ならばこのメッセージは成功です。

引数
  • WPARAM
    • >(2008/12/13 14:52修正) アイテムのウィンドウハンドル
  • LPARAM
    • パラメータは使用されません
戻り値

戻り値はありません。


以上Today用に拡張されたメッセージでした。
前回のサンプルのSelectabilityを1にすると、タップしたり十字キーで選択できるようになります。
しかしSelectabilityを2にすると、たぶん選択できません。メッセージに応答してないからですね。
次回はSelectabilityを2にした場合のアイテム。を紹介できたらな。と思ってます。でわ。

*1:もっというとVK_RETURN

*2:同じくVK_RETURN

*3:もうちょっとうまい日本語ないかな

*4:英語よくわからない。辞書引くとこんな感じ

*5:微妙な書き方。もうすこしどうにかしたい

*6:十字キーです。

*7:通常の文字色

*8:選択時の背景色

*9:選択時の文字色