直接ウィンドウサイズを変更したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
KRNKRS
記事: 40
登録日時: 6年前
連絡を取る:

直接ウィンドウサイズを変更したい

#1

投稿記事 by KRNKRS » 3年前

現在、デスクトップ作業領域(タスクバーを除く領域)に合わせたウィンドウのリサイズを行おうとしているのですが、DXライブラリでウィンドウサイズ(ウィンドウの枠を含んだサイズ)の変更は出来ず、クライアント領域の変更のみできるようです。
クライアント領域設定でもできないことはないのですが、もし自分が知らなかっただけで実はウィンドウサイズの変更を行うことが可能な関数があるのではと思い、質問させて頂きました。

KRNKRS
記事: 40
登録日時: 6年前
連絡を取る:

Re: 直接ウィンドウサイズを変更したい

#2

投稿記事 by KRNKRS » 3年前

DXライブラリではないですがWin32APIでSetWindowPosなるものがあるらしくそちらでサイズ変更できないかと試してみましたが、位置は変更されるのにサイズのみが変更されません。

コード:

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);
    }
}
DXライブラリ内で何か変更を行わせない何かが働いているのでしょうか。
ウィンドウ設定は以下です。

コード:

//略
ChangeWindowMode(true);
SetWindowSizeChangeEnableFlag(false);
//1280x720,32
SetGraphMode(DEFAULT_CLIENT_SIZE_X, DEFAULT_CLIENT_SIZE_Y, COLOR_BIT);
//略

inemaru
記事: 108
登録日時: 3年前

Re: 直接ウィンドウサイズを変更したい

#3

投稿記事 by inemaru » 3年前

手元で確かめたわけじゃないので、断言できませんが、
DXライブラリの公式リファレンスにないのであれば、目的の操作はサポートされていないのでしょう。
(隠し関数的な感じで、ヘッダーに定義はあるってことも考えられますが、それこそサポートされているのか不安)

WindowsAPIを使用して、
無理やり操作を行ったところでDXライブラリの動作に影響が起こる可能性があるので(解像度とか)
DXライブラリ本家の掲示板で、直接要望を出してみるのもありかもしれません。

KRNKRS
記事: 40
登録日時: 6年前
連絡を取る:

Re: 直接ウィンドウサイズを変更したい

#4

投稿記事 by KRNKRS » 3年前

サポート外の可能性を忘れていました。
確かにその可能性はありますね。
御返信ありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る