したがって、ここに格子状の小さくて読みやすい MFC サンプルがあります。しかし、その背景はしっかりとしたイメージです。アプリの背景として透明な PNG を作成する方法を教えてください。
1 に答える
ウィンドウの非クライアント (「クロム」) 領域を変更するには、2 つの基本的な方法があります。
レイヤード ウィンドウは、Windows XP で導入されました。これにより、さまざまなレベルのウィンドウ効果が可能になります。ここでの手法は、WS_EX_LAYERED
スタイルをウィンドウに追加することです。これにより、WM_PAINT
( MFC 内のCWnd::OnPaint
) が動作しなくなります。代わりに、レイヤー化されたウィンドウはUpdateLayeredWindow
、事前に乗算された 32bpp データで満たされた DIBSection を提供する、 を呼び出すアプリケーションによって描画されます。
Windows Vista では、デスクトップ アルファ効果を有効にするためにウィンドウをペイントする前にウィンドウを構成するDesktop Window Managerが導入されました。DWM API を使用してアルファ効果を取得することは、PNG ほどカスタマイズ可能ではありませんが、それでも非常に魅力的です。
子ウィンドウの描画はアルファに対応していないため、どちらの手法でも問題が発生します。レイヤード ウィンドウは単に子ウィンドウを描画しないため、すべての子コントロールを列挙してオフスクリーン サーフェスに手動で描画する必要があります。DWM ウィンドウは子コントロールを描画しますが、ネイティブ アプリで使用できる標準のウィンドウ コントロールはどれもアルファ対応に変更されていません。
皮肉なことに、.NET WinForms アプリは、表面上は標準の Windows 共通コントロールをラップしているように見えますが、実際にはすべての標準コントロールが .NET 用に再開発されており、ウィンドウの「ガラス」領域に配置されると正しく描画されます。