0

wm_nccalcsize をオーバーライドしてトリックを使用して、opengl でウィンドウ領域全体を描画することは可能ですか?

Windows (この場合は 7 を獲得) のすべてのエアロ機能を保持する必要があるため、(WS_POPUP | WS_SYSMENU | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_THICKFRAME) スタイルを使用します。

最大化モードでは問題なく動作します。Lparam を調整することで、境界線を画面の外に残すことができます。

しかし、通常のウィンドウには、おそらくクライアント四角形の一部であるにもかかわらず、8px の境界線がまだあります (これは GetClientRect() で確認しました)。

画像: 濃い灰色の境界線が見える

そして、これはすべて、opengl コンテキストを初期化する前に行われます。だから私は何が起こっているのか分かりません。または、これが可能であれば。ボーダレスを作成し、すべてのエアロ機能を再実装することになっていますか? (そんなことはしてません)

upd 2: Opengl コンテキストを初期化する直前に GDI で四角形を描画すると、これが得られます: 非クライアント領域から始まる素敵な (0,0,200,200) 四角形 したがって、opengl コンテキストの問題です。msdn ドキュメントで、opengl がクライアント領域でのみ描画することを見ました。そして、クライアントの四角形をウィンドウ全体に拡張したことを無視して、それでもそれを行います。サイハイ。

4

1 に答える 1

1

Aero と OpenGL を組み合わせる通常の方法は、DWM API を使用してウィンドウ クライアント領域をゼロに設定することです。これにより、OpenGL を使用してウィンドウ全体 (タイトルバーを含む) に描画できます。wglarb ラッパーの一部として、次のテスト プログラムをいじります。

https://github.com/datenwolf/wglarb/blob/master/test/layered.c

また、私の dwm_load ラッパーにも興味があるかもしれません。これにより、プログラムを DWM に対して厳密にリンクすることなく DWM 関数を呼び出すことができます (これにより、古い Windows バージョンとの互換性がなくなります。「WinXP で実行する必要があります」というメッセージが何度も表示されることは信じられないでしょう)。機能要件として) https://github.com/datenwolf/dwm_load

于 2016-11-05T11:20:42.100 に答える