現在、デスクトップ作業領域(タスクバーを除く領域)に合わせたウィンドウのリサイズを行おうとしているのですが、DXライブラリでウィンドウサイズ(ウィンドウの枠を含んだサイズ)の変更は出来ず、クライアント領域の変更のみできるようです。
クライアント領域設定でもできないことはないのですが、もし自分が知らなかっただけで実はウィンドウサイズの変更を行うことが可能な関数があるのではと思い、質問させて頂きました。
直接ウィンドウサイズを変更したい
Re: 直接ウィンドウサイズを変更したい
DXライブラリではないですがWin32APIでSetWindowPosなるものがあるらしくそちらでサイズ変更できないかと試してみましたが、位置は変更されるのにサイズのみが変更されません。
DXライブラリ内で何か変更を行わせない何かが働いているのでしょうか。
ウィンドウ設定は以下です。
void ResizeWindow()
{
// ウィンドウハンドル取得
HWND windowHandle = GetMainWindowHandle();
// ウィンドウサイズ取得
RECT windowRect;
GetWindowRect(windowHandle, &windowRect);
double windowWidth = windowRect.right - windowRect.left;
double windowHeight = windowRect.bottom - windowRect.top;
// デスクトップ作業領域取得
RECT desktopRect;
SystemParametersInfo(SPI_GETWORKAREA, 0, &desktopRect, 0);
double desktopWidth = desktopRect.right - desktopRect.left;
double desktopHeight = desktopRect.bottom - desktopRect.top;
//幅or高さがデスクトップ作業領域より大きかったらリサイズ
if (desktopWidth < windowWidth || desktopHeight < windowHeight)
{
double widthRatio = desktopWidth / windowWidth;
double heightRatio = desktopHeight / windowHeight;
double windowRatio = widthRatio < heightRatio ? widthRatio : heightRatio;
int newWindowWidth, newWindowHeight;
newWindowWidth = (int)floor(windowWidth * windowRatio);
newWindowHeight = (int)floor(windowHeight * windowRatio);
// 問題の箇所
SetWindowPos(windowHandle, 0, 0, 0, newWindowWidth, newWindowHeight, 0);
SetDrawArea(0, 0, RESOLUTION_SIZE_X, RESOLUTION_SIZE_Y);
}
}
ウィンドウ設定は以下です。
Re: 直接ウィンドウサイズを変更したい
手元で確かめたわけじゃないので、断言できませんが、
DXライブラリの公式リファレンスにないのであれば、目的の操作はサポートされていないのでしょう。
(隠し関数的な感じで、ヘッダーに定義はあるってことも考えられますが、それこそサポートされているのか不安)
WindowsAPIを使用して、
無理やり操作を行ったところでDXライブラリの動作に影響が起こる可能性があるので(解像度とか)
DXライブラリ本家の掲示板で、直接要望を出してみるのもありかもしれません。
DXライブラリの公式リファレンスにないのであれば、目的の操作はサポートされていないのでしょう。
(隠し関数的な感じで、ヘッダーに定義はあるってことも考えられますが、それこそサポートされているのか不安)
WindowsAPIを使用して、
無理やり操作を行ったところでDXライブラリの動作に影響が起こる可能性があるので(解像度とか)
DXライブラリ本家の掲示板で、直接要望を出してみるのもありかもしれません。
Re: 直接ウィンドウサイズを変更したい
サポート外の可能性を忘れていました。
確かにその可能性はありますね。
御返信ありがとうございました!
確かにその可能性はありますね。
御返信ありがとうございました!