3

Windows の新規インストールで WS_EX_LAYERED フラグが機能しない理由を理解するのに多くの時間を費やしたので、この投稿を共有したいと思います (私のテストは Win7 で行われました。 Win8 OS)。

これは私のコードでした:

...

hParentWindow=hWnd;
HWND myWnd=CreateWindowEx(WS_EX_LAYERED|WS_EX_PALETTEWINDOW,_T("STATIC"),_T(""), WS_POPUP|SS_BITMAP,position.left,position.top, position.right, position.bottom,hWnd,NULL,hInst,NULL);

次に、透明なレイヤーを追加したかった:

CWnd::FromHandle(myWnd)->SetLayeredWindowAttributes(RGB(0,0,0), 255*0.6, LWA_ALPHA);

コードを実行しても、ウィンドウは表示されませんでした! これは子ウィンドウではなかった (WS_EX_LAYERED は子ウィンドウでは機能しない) ため、WS_EX_LAYERED フラグは機能しているはずです。

なんで?

4

2 に答える 2

4

ソリューションの検索にほぼ 1 日を費やした後、ターゲット PC (実行可能ファイルをホストする PC) で「パフォーマンス情報とツール」を実行したことがないため、Aero Peek テーマが無効になっていることがわかりました。

そのため、コードで WS_EX_LAYERED を使用する予定のプログラマーである IMHO は、Aero Peek がオンになっているかどうかを判断する必要があります (たとえば、\HKEY_CURRENT_USER\Software\Microsoft\Windows\DWMキー レジストリを調べて、EnableAreoPeek レジストリ値を確認します)。どのPCでも正しく表示されます。

これで時間を節約できることを願っています!

于 2013-11-13T10:50:03.443 に答える