設定可能な Device Mode を列挙する

現在のハード構成で設定可能な Device Mode を列挙します。
設定可能な Device Mode はビデオボードやモニタで決まります。
DirectX やゲームプログラムでは、画面の解像度(サイズ)をプログラムで強制的に設定することが良くあります。
このプログラムは、現在の環境で設定できる全てのモードを列挙して MessageBox に表示します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. 新規プロジェクトで[空のプロジェクト]を作成します。
  2. メインプログラムのソースコードです。
    /****************************************************/
    /*★ 設定可能な Device Mode を列挙する    前田 稔 ★*/
    /****************************************************/
    #include    <windows.h>
    
    DEVMODE dev[1000];
    int     idx= 0;
    char    buf[512];
    
    //★ Windows Main 関数
    int  WINAPI  WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int nCmdShow)
    {   int     i; 
    
        for(idx=0; EnumDisplaySettings(NULL,idx,&dev[idx]); idx++);
        for(i=0; i<idx; i++)
        {   wsprintf(buf,"Width= %d\nHeight= %d\nBitsPerPel= %d\nFrequency= %d\n",
                     dev[i].dmPelsWidth,dev[i].dmPelsHeight,dev[i].dmBitsPerPel,dev[i].dmDisplayFrequency);
            MessageBox(NULL,buf,"Display Device Mode",MB_OK);   
        }
        return 0;
    }
        
  3. EnumDisplaySettings() が設定可能な Device Mode を調べる関数です。
    見つかる度に編集して MessageBox で表示しています。

【演習】

  1. ChangeDisplaySettings() 関数を使って Device Mode を変更することができます。
    例えば上のプログラムで列挙した i 番目に設定を変更するときは、次のように書きます。
        if (ChangeDisplaySettings(&dev[i],0)!=DISP_CHANGE_SUCCESSFUL)
        {   MessageBox(NULL,"ChangeDisplay に失敗しました","Set Display Mode",MB_OK);
            return FALSE;
        }
        
  2. 元の状態に戻すときは、次の関数を実行して下さい。
    ChangeDisplaySettings(NULL,0);
  3. 列挙した Device Mode から適当な物を選んで Mode を変更して画像を描画してみて下さい。

超初心者のプログラム入門(Win32API C++)