1

Aeroガラスは、それを利用しようとすると多くの人に問題を引き起こします。アルファ値が255の場合は、追加のぼかしを使用して描画するDWMでは透明として扱われるようです。クライアントエリアの一部でAeroガラスを使用し、残りの部分は不透明として処理する必要があるため、適切にレンダリングされない一般的なコントロールの問題に対処する必要はありません。

MSDNにはDwmEnableBlurBehindWindow、クライアント領域の一部をDWMによってぼやけたものとしてマークできる関数がリストされています。ウィンドウの領域へのハンドルをDWM_BLURBEHIND持つポインタを取ります。HRGNこの関数を使用すると、ウィンドウ全体が追加ブレンドで透明になりますが、渡したウィンドウの領域のみDwmEnableBlurBehindWindowがぼやけます。ウィンドウの残りの部分が透明にならないようにする方法はありますか?

私が持っているものは少し似ています:

blur.dwFlags = DWM_BB_ENABLE | DWM_BB_BLURREGION;
blur.hRgnBlur = CreateRectRgn(0, 0, 90, 90);
blur.fEnable = true;
DwmEnableBlurBehindWindow(hwnd, &blur);
RECT rect;
GetClientArea(&rect);
FillRect(hdc, &rect, CreateSolidBrush(0));
4

1 に答える 1

1

MSDNライブラリの記事から:

ウィンドウ内のアルファ値が尊重され、ブラーの上のレンダリングではこれらのアルファ値が使用されます。ウィンドウ内のすべてのピクセルのアルファ値が正しいことを確認するのは、アプリケーションの責任です。一部のGDI操作はアルファ値を保持しないため、子ウィンドウを表示するときは、それらが提供するアルファ値が予測できないため、注意が必要です。

FillRect ()のようなほとんどのGDI操作を行います。作成したブラシは24ビットカラーで描画され、アルファは0になります。これによりウィンドウが透明になります。たとえば、GDI+に切り替える必要があります。テキストは特に面倒です。また、GDIで描画するEDITやLISTBOXなどの従来のWindowsコントロールも同様です。

于 2013-02-13T20:25:22.293 に答える