「Windows 8 で可能になった半透明子ウィンドウ (フェンリル | デベロッパーズブログ)」で、Windows8では子ウィンドウを半透明にできることを知りました。
C++Builder XE3で試してみました。
フォームにコンポーネントを配置します。
フォームのコンストラクタにコードを記述します。
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
const int AlphaValue = 130;
LONG dwExStyle = GetWindowLong(Panel1->Handle, GWL_EXSTYLE);
SetWindowLong(Panel1->Handle, GWL_EXSTYLE, dwExStyle | WS_EX_LAYERED);
::SetLayeredWindowAttributes(Panel1->Handle, 0, AlphaValue, LWA_ALPHA);
}
$(BDS)\bin\default_app.manifestをプロジェクトのあるフォルダーにコピーします。
default_app.manifestを編集し、次のコードを追加します。
このコードはアプリケーションの動作環境をWindows8に設定しています。
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
</application>
</compatibility>
編集したdefault_app.manifestは次のようになります。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
</application>
</compatibility>
<dependency>
…
プロジェクトオプション画面を開き、カスタムマニフェストを選択します。
プログラムを実行すると、次のように表示されます。
Windows8で実行したとき
Windows7で実行したとき