完全に透明なフォーム
toshi_ynと申します。
良く話題にあがる透明フォームを作っております。
透明フォーム自体は実現できているのですが、完全な透明フォームが
できず困っております。
フォームがActiveになったイベントを拾うため、WM_ACTIVATEイベントを
設定し、それなりに透明フォームができています。(描画スピードは遅い・・)
しかしながら、複数のウィンドウがあり、特に下側のあるウィンドウの変化に
対応できておりません。
具体的に言うと、他のアプリのウィンドウが2枚あり、本アプリの透明フォームが
一番上にあるとします。
そこで、タスクバーから下側にある他のアプリのウィンドウが閉じられても、
その変化に追従できず透明になっていない。(閉じられたウィンドウのイメージ
が透明フォームに残ってしまっている)
透明フォームを実現するためフォームのCanvasを書き換えるのに時間がかかる
のがネックのような気がしていますが・・・。
どなたか、アドバイスをいただければ幸いです。
よろしくお願いします。
//---現在のコード--------
Unit.h
private: // ユーザー宣言
void __fastcall TForm1::On_WM_Activate(TWMActivate &msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_ACTIVATE, TWMActivate, On_WM_Activate);
END_MESSAGE_MAP(TForm)
Unit.cpp
void __fastcall TForm1::On_WM_Activate(TWMActivate &msg)
{
HBITMAP DesktopBitmap;
HDC MemDC, DeskDC;
DeskDC = GetDC(0);
MemDC = CreateCompatibleDC(DeskDC);
DesktopBitmap = CreateCompatibleBitmap(DeskDC, Screen->Width, Screen->Height);
SelectObject(MemDC, DesktopBitmap);
BitBlt(MemDC, 0, 0, Screen->Width, Screen->Height, DeskDC, 0, 0, SRCCOPY);
DeleteDC(MemDC);
ReleaseDC(0, DeskDC);
}
お礼
ご回答ありがとうございます。 試した結果、思い描いていたとおりにできました。 本当にありがとうございました。