コーラさんがお考えの方法で良いと思います
ただ、デスクトップ画面は大抵ゲームで使用する画面より高解像度なので、デスクトップ画面と
同じサイズを DrawExtendGraph で描画すると少し描画負荷が高すぎるかもしれません
なので、モニタが対応しているゲーム画面より高解像度な最低解像度のフルスクリーンモードに
したあと、コーラさんの考えられた方法を実践するのが良いと思います
と書いたところで、DXライブラリに変更可能な画面モードを取得するための機能がないことに
気付きました
変更可能な画面モードを取得する機能を追加したバージョンをアップしましたので、よろしければ
こちらをダウンロードしてください m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
追加した関数は以下の二つです
// 変更可能なディスプレイモードの数を取得する
int GetDisplayModeNum( void ) ;
// 変更可能なディスプレイモードの情報を取得する( ModeIndex は 0 ~ GetDisplayModeNum の戻り値-1 )
DISPLAYMODEDATA GetDisplayMode( int ModeIndex ) ;
GetDisplayMode 関数の戻り値である DISPLAYMODEDATA 構造体は以下のようになっています
// 画面モード情報データ型
struct DISPLAYMODEDATA
{
int Width ; // 横解像度
int Height ; // 縦解像度
int ColorBitDepth ; // 色ビット数
int RefreshRate ; // リフレッシュレート( -1 の場合は規定値 )
} ;
最初に GetDisplayModeNum で変更可能なディスプレイモードの数を取得した後、
その数だけ GetDisplayMode を呼んで、希望する画面モードがあるかどうかを調べる、
といった使い方をします
例えば、変更可能なディスプレイモードの情報を一覧表示するプログラムは以下のようになります
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
DISPLAYMODEDATA ModeData ;
int i, ModeNum ;
// ウインドウモードで起動
ChangeWindowMode( TRUE );
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1;
// フォントサイズを小さくする
SetFontSize( 10 ) ;
// フォントの線を細くする
SetFontThickness( 0 ) ;
// ディスプレイモードの数を取得する
ModeNum = GetDisplayModeNum() ;
// ディスプレイモードの数だけループする
for( i = 0 ; i < ModeNum ; i ++ )
{
// ディスプレイモードの情報を取得する
ModeData = GetDisplayMode( i ) ;
// 画面にディスプレイモードの情報を描画する
DrawFormatString( 0, i * 11, GetColor( 255,255,255 ), "%dx%d %dbit %dHz",
ModeData.Width, ModeData.Height, ModeData.ColorBitDepth, ModeData.RefreshRate ) ;
}
// キーが押されるまで待つ
WaitKey() ;
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}
こちらの機能を使用して
ゲーム画面と同じサイズの画面が使用できるか調べる→使用できる場合は特別な処理なし
↓
使用できない場合はゲーム画面より大きい画面モードを捜す
↓
見つけたらその画面モードで SetGraphMode する
↓
DxLib_Init
↓
ゲーム画面の大きさの描画可能な画像を作成して、裏画面の代わりに使用する
( SetDrawValidGraphCreateFlag( TRUE ) ; と MakeGraph と SetDrawScreen を使用 )
↓
ScreenFlip をする前に描画可能画像を画面いっぱいに DrawExtendGraph で描画
↓
ScreenFlip
という感じにすると描画速度的には良いです
ただ、ゲーム画面と実際の画面の解像度が異なる場合は、実際の画面の解像度が
ゲーム画面の解像度に対して整数倍であるか、そうでない場合は解像度が高ければ
高いほど解像度の違いによるドットの歪みが少なくなるので、描画速度を優先しない場合は
ゲーム画面が収まる最低解像度よりも高解像度にした方が見た目は良くなります