拙作のソフトは640x480のクライアント領域サイズでウィンドウ
モードで動作させているのですが、このサイズに加えて、最大化
ができないものかと試行錯誤しています。
最大化した場合には、クライアント領域のサイズをタスクバー
を除くディスプレイのサイズと同程度に広げて、表示するグラフィ
ックの解像度もクライアント領域と同じサイズにしたいのです。
試してみたのは下記のコードです。
// 初期設定
SetGraphMode( 640, 480, 16 ) ;
DxLib_Init() ;
// 最大化を有効に
HWND hMainWnd = GetMainWindowHandle();
LONG lStyle;
lStyle = GetWindowLong( hMainWnd, GWL_STYLE );
lStyle |= WS_MAXIMIZEBOX;
lStyle = SetWindowLong( hMainWnd, GWL_STYLE, lStyle );
SetWindowPos( hMainWnd, NULL, 0, 0, 0, 0,
(SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_FRAMECHANGED) );
これだと、ウィンドウは最大化されるのですが、元のウィンドウ
サイズの外側には描画されません。
次に試してみたのは、最大化したタイミングでSetGraphMode()
を再度呼び出すことです。
// 最大化検知後(SystemParametersInfo()で取得した値を使用)
SetGraphMode( 1600, 860, 16 ) ;
これだと、描画は大丈夫そうなのですが、最大化された状態では
なく通常サイズのウィンドウの扱いになり、タイトルバーのボタン
が最大化された状態ではなくなってしまいます。
初期設定でディスプレイサイズのウインドウを作ってから、無理
やり640x480のウィンドウにリサイズできないものかと下記のコード
を試しましたが、ウィンドウのサイズを変えることができませんで
した。初めから最大の解像度でDXライブラリのグラフィックモード
を初期化しておけば、最大の領域に描画を行ってくれて、ウィンド
ウのサイズを小さくすれば、そこで描画が切り取られるかなと思っ
たのですが、ちょっと甘かったですね。
// 初期設定
SetGraphMode( 1600, 860, 16 ) ;
DxLib_Init() ;
// 最大化を有効に
HWND hMainWnd = GetMainWindowHandle();
LONG lStyle;
lStyle = GetWindowLong( hMainWnd, GWL_STYLE );
lStyle |= WS_MAXIMIZEBOX;
lStyle = SetWindowLong( hMainWnd, GWL_STYLE, lStyle );
SetWindowPos( hMainWnd, NULL, 0, 0, 1600, 480,
(SWP_NOMOVE|SWP_NOZORDER|SWP_FRAMECHANGED) );
SetWindowPos( hMainWnd, NULL, 0, 0, 640, 480,
(SWP_NOMOVE|SWP_NOZORDER|SWP_FRAMECHANGED) );
最大化を有効にすることは諦めて、画面サイズ切り替えボタンを
クライアント領域の中に作成して、640x480とディスプレイいっぱい
のサイズとを切り替えるようにしようかと考え始めていますが、最
大化ボタンをうまく使えるような方法がありましたら教えていただ
けないでしょうか?
よろしくお願いします。