C++Builder XE3とWindows8で子ウィンドウを半透明にする

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で実行したとき

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください