Aeroにて文字までAeroになってしまう対策


近代的なアプリを制作するためによく使用されるAeroなのですが、設定をし、その上にラベルを普通においてしまうと文字までAeroになってしまいます。
その対策情報も公開されているのですが、非常に面倒なことになっています。

簡単に使えるようにライブラリ化させてみました。.NETならなんでも使えるはずです。VB.NETとか

対策をしていない状態

対策をしていない場合、このような表示になってしまいます。文字が読めません。必死に見てかろうじて読めるかな…?レベルです

aero-no-taisaku

 

だからといってラベルを使わねればいいんじゃない?といってもそんな訳にはいかないので対策をすることにします。

普通に表示させる

私の場合、予め用意したHDCにBitBltすることで対策をしています。アルファ値をいじることでも対策はできるのですが、今回はテーマラベルにも対応させるということでこの方法です。

aero-normal

また、BitBltする方法だと普通のSolidBrushを作り、DrawStringするだけで案外いけるみたいです。
ただメイリオフォント等はアンチエイリアスをしないとかなり酷いことになるのでアンチエイリアスは標準装備です。

aero-anti

上がアンチエイリアスあり、下がアンチエイリアスなしです。結果が歴然です。

 

テーマラベルへの対応

テーマラベルにする場合、DrawThemeTextExメソッドを使うことになるのですが、これまた非常に面倒くさい。予め用意したHDCに描き、それをBitBltする必要が出てきます。

aero-theme

黒いところの上にのせるとよくわかりますが、文字に白い影ができています。
これで背景がどんなところでも文字が見やすいです。Windowsシステムではタイトル表示によく使われていますね。

なおこれを実現するための描画部分のみのソースコードはこのような感じ。これが面倒でライブラリ化させています。
aero-source

使い方

解凍すると以下の3つのdllファイルが出てきます。

  • Sharoron.CExtension.dll
    様々な拡張メソッドを追加します。多分これは使用しなくても正常に作動すると思います。
  • Sharoron.NMethod.dll
    いろんなWinAPIメソッドをラッパー化しています。標準の名前空間はWinAPI
  • Sharoron.Control.dll
    コントロールはこちらにまとめています。今回紹介したラベルもこの中です。

下の2つだけでも動作すると思います。

ラベルの名前はAeroLabel、名前空間はWinAPI>Control.AeroLabelです。

プロパティ

  • DrawMode
    テーマラベルか、対策ラベルかを切り替えることができます。(Aero(テーマ)/Normal(通常))
  • GlowSize
    グロー効果の度合いを調整できます。デフォルト値:2
  • ShadowEnable
    影効果のオンオフを切り替えれます。正直、こっちでも対策ラベル状態にすることができます。少し動作が重めですが

主要なプロパティは上記の3つです。

背景はデフォルトで黒色にされています。

Aeroが有効ではないコンピューターではテーマラベル設定にしても強制的に対策ラベルに切り替わります。
なので、設定をしないとAeroが有効でないコンピューターでは黒地に黒色文字で書かれることになるので注意が必要です。

ダウンロード

自分用につくったライブラリなので多少のことは勘弁ください。
ただ何かバグなどがあった場合は遠慮なくご連絡ください。

自己責任でご使用ください。このライブラリによって負った支障や責任については製作者は一切負いません。

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">