Aeroなウィンドウを作る

.NET Tips

VistaやWindows7で実装されているAero、キャプションバーが半透明になるやつです。Internet ExplorerやGoogle Chromeでは、タブの部分まで半透明になっていますよね。どうやってやるのか調べた結果の備忘録です。

Aeroを実現するには、デスクトップウィンドウマネージャ(DWM)というインターフェースを使います。詳細はMSDNマガジンにある記事に書かれていますが、多くを文章で説明していて、コードの実例があまりないです。

では実例を紹介します。まず、DllImportするために、次の一行を加えます。

そして、クラス内に次のコードを書きます。

これでDWMを呼び出す準備ができました。続いてコンストラクタでDWMを呼び出します。

BackColorをBlackにしているのは、DWMでは黒い部分が半透明になるからです。また、marginのいずれかを-1にすると、ウィンドウ全体にAero効果が現れます。

実行した結果がこれです。
20140103_184801

ちゃんと半透明になりました。しかし、よく見ると、ボタンやテキストボックスの文字の色まで半透明になってしまいました。これを回避するには、UseCompatibleTextRenderingをtrueにすればいいという記事を見つけたのですが、ボタンのUseCompatibleTextRenderingをtrueにしても結果は同じでした。まだ調べる必要がありますね。

次のコードを加えて、フォーム上に直接文字列を書いてみましたが、これは半透明になりませんでした。これが半透明になった場合は、SetCompatibleTextRenderingDefaultをtrueにしてやれば黒で描画されるようになる、という記事を見つけたのですが、再現できないので保留です。

もっとも、ウィンドウ全体を半透明にしたい場合は少ないでしょう。次のようなコードが現実的ではないでしょうか。(tabControl1.ItemSize.Heightを参照したいので、Form_Loadに書いています)

実行結果がこれです。
20140103_185001

まだまだ不完全な記事です。情報をお持ちの方はお知らせください。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です