3

ボーダレス コンソール ウィンドウを作成しようとしています。
ウィンドウ スタイルを WS_POPUP に設定して境界線を削除することはできましたが、いくつか問題がありました。 グリッチ..

コンソールウィンドウの一部が再描画されていないなどの部分があるようですが、ウィンドウ全体でInvalidateRect()やその他の再描画関数を使ってみたのですが、うまくいかないようです.
誰かが SetWindowPos() (with SWP_FRAMECHANGED) を使用することを提案しましたが、それも何もしません。

私はしばらくの間、この問題をいじっていましたが、クライアントエリアが適切に描画されていないことに関係していると確信しています (これについて引用しないでください)。

また、最初に下にスクロールしてから上にスクロールすると、下のグリッチ部分が黒/透明になりますが、プログラムのテキストがその下に表示されないことがあります。これは、私の知る限り、背景がないことを示唆しているため、 「カメレオン」効果。

何か案は?

4

1 に答える 1

3

私はついにそれを理解しました。(Maximus に大いに感謝します)彼が提案したように、
私は を使用しなければなりませんでした。SetWindowRgn()

最終的なコードは次のようになります。

HWND hWnd = GetConsoleWindow();
RECT rcScr, rcWnd, rcClient;

GetWindowRect(hWnd, &rcWnd);
GetWindowRect(GetDesktopWindow(), &rcScr);
GetClientRect(hWnd, &rcClient);

MoveWindow(hWnd, (rcScr.right / 2) - 330, (rcScr.bottom / 2) - 180, rcWnd.right - rcWnd.left, rcWnd.bottom - rcWnd.top, 1);
SetWindowLong(hWnd, GWL_STYLE, WS_POPUP);
SetWindowRgn(hWnd, CreateRectRgn(rcClient.left + 2, rcClient.top + 2, rcClient.right + 2, rcClient.bottom + 2), TRUE);
ShowWindow(hWnd, 1);
于 2012-10-21T00:27:37.250 に答える