クライアントエリアでガラス効果のある素敵なGUIを構築しようとしています。
そこで、ここで説明するように実装しました。
私は成功し、ガラスでいっぱいの素敵なフレームを持っていますが、ウィンドウが最大化されていない場合に限ります。ウィンドウを最大化すると、黒だけになります:-(
いくつかのグーグルと実験で、私が次のような応答でウィンドウを無効にすると、私は理解しましたWM_WINDOWPOSCHANGING:
case WM_WINDOWPOSCHANGING: {
WINDOWPOS* pWindowPos = (WINDOWPOS*)lParam;
if (pWindowPos->flags & SWP_FRAMECHANGED) {
InvalidateRect(hWnd, NULL, TRUE);
}
}
ウィンドウを最大化したときにもガラス効果が得られます。
奇妙なことに、これは、タイトルバーをダブルクリックするか、ウィンドウの右上隅にある最大化ボタンをダブルクリックした場合にのみ機能します。しかし、ウィンドウを画面の上部に移動してそこにスナップさせてウィンドウを最大化すると(Aero Snap)、ウィンドウは真っ黒になります。
誰かがこれが正しく行われる方法を知っていますか?
(私はWindows 7 64ビットで開発しています。)
編集:
また、標準のタイトルバーを削除したいので、メッセージ0に応答して戻ることで削除しWM_NCCALCSIZEます。これがなければ、すべてが正常に機能しています。
編集:
基本的に同じである別のシステムでのテストは成功しました。唯一の顕著な違いは、AMD RadeonHD5870の代わりにAMDRadeonHD 4300という別のグラフィックカードがあることです。これは、グラフィックカードのドライバーに問題があるのでしょうか。