ChangeDisplaySettingsを使用して、デフォルトのディスプレイデバイスのデスクトップ解像度を変更しようとしています。しかし、私の機能(set_resolution
)を実行すると、ChangeDisplaySettingsはデスクトップ解像度に明らかな変更を加えなくても成功します(リターンコードは常にDISP_CHANGE_SUCCESSFULです)。ChangeDisplaySettingsは成功しますが、何もしません。どうすればそれを動作させることができますか?
私はdwFlagsのすべての値を試しましたが、それぞれの値に対して同じ結果が得られます。ディスプレイがサポートすべき複数の解像度を試しましたが、同じ結果が得られます。私のディスプレイは16:9、ネイティブ1920x1080です。私は1280x720のように試しました。
私はウィンドウを作成すると同時にset_resolution
を実行しようとしましたが、すべてのWM_ACTIVATE
イベントで関数を実行しようとしました。
LONG set_resolution(uint32_t width, uint32_t height)
{
DEVMODE dm;
dm.dmPelsWidth = width;
dm.dmPelsHeight = height;
dm.dmBitsPerPel = 32;
dm.dmDisplayFrequency = 60;
dm.dmFields =
DM_PELSWIDTH |
DM_PELSHEIGHT |
DM_BITSPERPEL |
DM_DISPLAYFREQUENCY;
DWORD flags =
0;
//CDS_FULLSCREEN;
//CDS_GLOBAL;
//CDS_NORESET;
//CDS_RESET;
//CDS_SET_PRIMARY;
//CDS_TEST;
//CDS_UPDATEREGISTRY;
LONG code = ChangeDisplaySettings(&dm, flags);
if (code == DISP_CHANGE_SUCCESSFUL)
{
printf("Display change successful [%dx%d]: %d", width, height, flags);
}
else
{
printf("Display change failed [%dx%d]: %d", width, height, code);
}
return code;
}
と呼びます。あなたは 'dm.dmSize'を設定していません。不確かな場合は、[documentation](https://msdn.microsoft.com/en-us/library/windows/desktop/dd183411(v = vs.85).aspx)を参照してください。DEVMODEのdmSizeメンバを初期化する必要がありますDEVMODE構造体のサイズ(バイト単位)。 DEVMODEのdmDriverExtraメンバは、DEVMODE構造体に続くプライベートドライバデータのバイト数を示すように初期化する必要があります。 –