3

Glass ウィンドウの作成は、WPF で DwmExtendFrameIntoClientArea を呼び出すのと同じくらい簡単ですが、それはトリックの半分にすぎません。aero を無効にして、問題が発生する XP のようなスキンを取得すると、次のようになります。

XP (または無効化された aero) では、「透明な感じ」を得るために DrawThemeBackground を呼び出す必要があります。

Windows.Forms で Aero が無効になっているときに、適切にフォールバックするアプリケーションを作成しました

質問:しかし、WPF でそれを行うのは異なります。DrawingContext を提供する OnRender (avalon では OnPaint と同等)、DrawThemeBackground WINAPI 呼び出しでそれをどのように描画しますか?

4

1 に答える 1

2

まあ、DrawThemeBackground純粋なWin32の概念であるデバイスコンテキストハンドルが必要です...WPFはデバイスコンテキストやウィンドウハンドルを使用しません。ただし、WPFアプリはWin32ウィンドウでホストされており、そのウィンドウのHWNDを取得できます。

using System.Windows.Interop;

...

IntPtr hwnd = new WindowInteropHelper(this).Handle;

次に、GetDC APIを使用して、このウィンドウのDCを取得できます。

[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr hWnd);

...

IntPtr hdc = GetDC(hwnd);

DrawThemeBackgroundこれで、このDCで使用できるようになります。

これはすべて純粋に理論的なものであり、テストしなかったことに注意してください...

于 2009-10-04T22:36:18.413 に答える