Today プラグインサンプルプログラム2

背景透過

Today プラグインサンプルプログラムで作ったサンプルでは、ウィンドウクラス登録で指定した黒ブラシで描画された背景を持つアイテムが表示されていました。
この上に色々描いていってもいいのですが、せっかくToday画面には壁紙が表示されているので、その壁紙の上に色々表示させたいですよね。

というわけで、前回黒かった部分を透過して、壁紙を表示させるようにします。

といっても、WindowsMobileSDKのサンプル等を見ると、WM_ERASEBKGNDを処理して、シェルにTODAYM_DRAWWATERMARKメッセージで壁紙を描いてもらうという処理を行っているようですが、これをしなくても、ウィンドウクラスのhbrBackgroundをNULL指定にするだけで、とりあえずは壁紙が表示されるようです。

恐らく、アイテムの親ウィンドウにWS_CLIPCHILDRENがついていないので、親ウィンドウが描画されるタイミングでアイテム部分まで壁紙が描画されているので、問題なく透けて見えているようです。
ただ、なんらかの要因で親ウィンドウの更新がされずに、アイテム内部の描画だけが必要になった時には、WM_ERASEBKGNDかWM_PAINTを処理して、その中で親ウィンドウに壁紙の描画を依頼する必要があると思われます。

ちらつきを抑えるという意味では、一旦親ウィンドウが背景を描いてしまう以上、多少のちらつきはしょうがないのですが、アイテムの描画としては、ウィンドウクラスではNULLブラシを設定してWM_ERASEBKGNDでは何もせず、WM_PAINT時に裏バッファを用意しておいて、そこにTODAYM_DRAWWATERMARKで背景を描いてもらい、アイテムの描画を行った上で、表画面に描画するのがいいのかもしれませんね。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS