3

通常の「オーバーラップ」ウィンドウを作成するときに、正確なクライアントサイズ(たとえば300 x 300)を設定したいと思います。

目的のクライアント領域を渡して、CreateWindowExに渡すことができるサイズを取得できる関数がありAdjustWindowRectEx()ますが、ドキュメントには、重複するウィンドウには使用しないように記載されており、その理由がわかりません。

300 x 300を通過すると、そこから306 x 326を取得し、を受信する WM_SIZEと、クライアントサイズは298 x 298であるため、2ピクセル小さすぎます。

正確に指定されたクライアントサイズでオーバーラップウィンドウを作成するにはどうすればよいですか?

4

2 に答える 2

1

私の場合の間違いは次のとおりです。

AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS, FALSE, WS_OVERLAPPEDWINDOW);

これに変更すると修正されます:

AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS, FALSE, 0);
于 2012-09-18T15:13:37.170 に答える
1

AdjustWindowRect が機能しない理由がわかりません (クライアント領域に 1 ピクセルの境界線を持つ子ウィンドウが含まれている場合を除きます)。

この関数は、重なり合ったウィンドウに使用できることに注意してください。ドキュメントには、WS_OVERLAPPED スタイルは使用できないと書かれていますが (値がゼロであるためだと思います)、WS_OVERLAPPEDWINDOW を使用できます。

別の方法として、GetWindowRect と GetClientRect を呼び出して、境界線の幅/高さ (2 つの四角形の幅/高さの差) を計算し、これらを目的のクライアント サイズに追加して、ウィンドウ サイズを設定することができます。ウィンドウが表示される前にこれを行うことができると思います。

于 2012-09-14T13:39:49.103 に答える