ディスプレイの設定をするには EnumDisplaySettings と ChangeDisplaySettings を使用する.
// 選択可能なディスプレイモードの諸元の取得
DEVMODE dm;
ZeroMemory(&dm, sizeof(DEVMODE));
DWORD dwModeNum;
for( dwModeNum = 0;
EnumDisplaySettings(NULL, dwModeNum, &dm);
dwModeNum++) {
// dm に選択可能なディスプレイモードの諸元が格納されるので
// 必要ならここで保存する。
}
// ディスプレイモードの変更
DEVMODE dmNew;
ZeroMemory(&dmNew, sizeof(DEVMODE));
dmNew = x; // EnumDisplaySettings() で取得した諸元
DOWRD dwFlags = 0;
dwFlags = CDS_UPDATEREGISTRY; // 動的に変更 レジストリ更新
//dwFlags = CDS_TEST; // 設定できるかどうかをシステムでテスト
dmNew.dmBitsPerPel = 色数;
dmNew.dmPelsWidth = 幅;
dmNew.dmPelsHeight = 高さ;
dmNew.dmFields = DM_BITSPERPEL |DM_PELSWIDTH | DM_PELSHEIGHT;
ChangeDisplaySettings(&dmNew, dwFlags);
/*
ChangeDisplaySettings() の戻り値
DISP_CHANGE_SUCCESSFUL 動的に変更に成功 レジストリに保存される
WM_DISPLAYCHANGEメッセージがアプリに送られる
DISP_CHANGE_RESTART 動的に変更不可能 レジストリに保存される
モードを有効にするために再起動が必要
DISP_CHANGE_BADFLAGS 無効なフラグがセットされた
DISP_CHANGE_FAILED 変更に失敗
*/
参照
解像度の変更