- 締切済み
完全に透明なフォーム
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); }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- taka_tetsu
- ベストアンサー率65% (1020/1553)
お礼
早速のアドバイスありがとうございます。 説明不足でした。 残念ながら、こちらの環境はWin98、Borland C++ Builder Ver.4です。 Windos2000では、透明フォームがサポートされており、羨ましい限りです。