2016-12-15 12 views
2

SDLウィンドウサイズをウィンドウの他のパネルを除外するウィンドウのうちworking area (SPI_GETWORKAREA)に収ませたい。SDL調整ウィンドウサイズ

問題は、SDL_CreateWindowSDL_SetWindowSizeの両方が、ウィンドウ境界を含むサイズではなく、ウィンドウのクライアント領域を設定することです。だから私は小さいワーキングエリアに収まるようにウィンドウのサイズを設定すると、境界線はまだ作業エリアから外に出る。

SDL_CreateWindow:ウィンドウのクライアント領域のサイズを設定するには、この機能を使用してください。

SDLは作業領域内でウィンドウサイズを設定する方法を提供しますか?どのようにSDLウィンドウの境界線サイズを取得して自分自身で行うことができますか?

答えて

3

私が知っている唯一の方法は、まず小さなウィンドウ(2x2ピクセル)を作成してから、Windows API(GetWindowPlacement)を使って合計ウィンドウサイズを確認することです。これに基づいて、探しているウィンドウのサイズを取得し、最後にウィンドウのサイズを変更するために必要なパラメータを計算することができます(MoveWindow)。

これは非常に醜い回避策ですので、誰かがより良い解決策を望むことを願っています。

+0

2x2サイズのウィンドウを作成する必要はありません。とにかくWindows APIを使用している場合は、 'GetWindowPlacement'を使用してウィンドウ座標を取得し、次に' ClientToScreen'を使用して画面上にクライアント領域座標を取得することができます。この2つで数学をすると、境界線のサイズが得られます。 – SMUsamaShah

+0

正しいサイズのウィンドウを作成するソリューションが見つかった場合は、最初に一時的なウィンドウを表示せずにコードを投稿してください。 –

+0

WinAPIを使用するには、まずウィンドウが必要です。私はSDLだけでそれを行う方法を見つけることができませんでした。 – SMUsamaShah

2

SDL_GetWindowSize()を使用してクライアント領域のサイズを画面座標で照会し、SDL_GL_GetDrawableSize()またはSDL_GetRendererOutputSize()を使用して描画可能サイズをピクセル単位で問い合せます。

編集1:

AあなたがWindowsを使用していることを言及しているので、あなたはあなたの窓の境界が含まれており、GetClientRect()はあなたに境界線を除く矩形を与え四角形を与えるGetWindowRect()を使用することができます - ウィンドウ固有の図面に割り当てられる領域。

注: GetWindowRect()画面に矩形を返すことに注意してください座標 - スクリーン/モニタに対するものである座標。​​は、それ自体に対して相対的な長方形を返します。

例: WINAPIを使用している場合は、作業例from hereが表示されます。

2

これを行うにはWinAPIは必要ありません。

ウィンドウ境界のサイズはSDL_GetWindowBordersSize()で、ディスプレイの占有していない部分はSDL_GetDisplayUsableBounds()で返されます。

これらの機能を使用すると、適切なウィンドウの位置(および場合によってはサイズ)の維持が容易になります。

関連する問題