C#2.0時代のゲームプログラミング(21)

次に、.NETで画面解像度を切り替える場合を見ていこう。


ChangeDisplaySettingsExを呼び出すところは同じだが、この第一パラメータで指定するディスプレイ名。これと、global::System.Windows.Forms.Screen.DeviceNameで表されるディスプレイ名とは同一なのか?という疑問があろう。心配いらない。同一である。


よって、そのままChangeDisplaySettingsExに渡せば、その画面の画面解像度を変更できる。問題は、EnumDisplaySettingsExの引数であるDEVMODE構造体だ。こいつがどうも怪しげな構造体で、プリンタデバイス等にも対応させるために、いくつものバージョンが存在するようだ。


Win32APIのお助けサイトであるpinvokeを見ても、C#版とVB版とで異なる構造体が書かれていたり、文献によってはdmPositionX〜dmDisplayFixedOutputが、dmOrientation〜dmPrintQualityになっていたり、dmLogPixelsがshortだったりintだったり。これでは何を信用していいのかわからない。


そんなわけで、いろいろ試行錯誤した結果、この部分は、Yanesdk.NETのsrc/draw/Win32DisplaySettings.csのようになった次第である。(つづく)