突然ですが、DirectX9について質問させて頂きます。
突然ですが、DirectX9について質問させて頂きます。
ウィンドウモードとフルスクリーンモードを切り替える
プログラムを組んでいますが、なぜか、フルスクリーンモード
からウィンドウモードに復帰すると画面サイズが変化してしまいます。
以下がその問題となる関数です。
void SetWindowStyle( HWND hWnd, bool g_WindowMode )
{
if( g_WindowMode )
{
SetWindowLong( hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE );
MoveWindow( hWnd, 0, 0, 0, 0, false );
SetClientSize( hWnd, WINDOW_WIDTH, WINDOW_HEIGHT ); // 以下に記載
}
else
{
SetWindowLong( hWnd, GWL_STYLE, WS_POPUP | WS_VISIBLE );
MoveWindow( hWnd, 0, 0, 800, 600, true );
}
}
以下はウィンドウのサイズを再設定する関数です。
void SetClientSize( HWND hWnd, int width, int height )
{
RECT wnd_Rect, clt_Rect;
int WindowSize_Width, WindowSize_Height;
GetWindowRect( hWnd, &wnd_Rect );
GetClientRect( hWnd, &clt_Rect );
// ウィンドウのサイズを求める
WindowSize_Width = ( wnd_Rect.right - 1 ) - ( wnd_Rect.left - 1 );
WindowSize_Height = ( wnd_Rect.bottom - 1 ) - ( wnd_Rect.top - 1 );
// ウィンドウのサイズを変更
MoveWindow( hWnd,
wnd_Rect.left,
wnd_Rect.top,
width + (WindowSize_Width-clt_Rect.right),
height + (WindowSize_Height-clt_Rect.bottom),
true
);
}
SetClientSize関数はアプリ起動時に一度実行され、800x600に変更されます。
この時点では問題はありません。
しかし、フルスクリーンモード→ウィンドウモードと切り替えると、
800x576と値がおかしくなります。
結果的に800x600になる予定だったのですが…。
同じ関数を使用しているのに、なぜサイズが変化してしまうのでしょう?
どなたかこの問題を解決する方法をご存知ないでしょうか?
よろしくお願いします。
お礼
お教え頂きました SetWindowPos でうまくいきました。 早速の回答ありがとうございました。助かりました。