XNAでサポートされている画面解像度を取得するにはどうすればよいですか?Windowsで画面の解像度を変更するときのように、可能なすべての選択肢のリストを提供する代わりに、それらのほんの一部を提供します。
質問する
2821 次
2 に答える
5
これを使用してください:
foreach (DisplayMode mode in GraphicsAdapter.DefaultAdapter.SupportedDisplayModes) {
//mode.whatever (and use any of avaliable information)
}
ただし、重複する数は少なくなります。これは、累積の再フラッシュ率も考慮に入れるため、そのaswelを含めるか、フィルタリングを実行する場合があります。
于 2012-09-19T04:19:53.350 に答える
4
私はXNAについてはそれほど最新ではありませんが、すばやく簡単な機能があるとは思いませんでした。古いWinFormsAPIを使用する方法はありますが、個人的には他のアプリケーションでそれとリンクしたくないので、最も簡単な方法はネイティブ関数を使用することです。
まず、使用するネイティブ構造体を定義します。
[StructLayout(LayoutKind.Sequential)]
internal struct DEVMODE
{
private const int CCHDEVICENAME = 0x20;
private const int CCHFORMNAME = 0x20;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
public string dmDeviceName;
public short dmSpecVersion;
public short dmDriverVersion;
public short dmSize;
public short dmDriverExtra;
public int dmFields;
public int dmPositionX;
public int dmPositionY;
public int dmDisplayOrientation;
public int dmDisplayFixedOutput;
public short dmColor;
public short dmDuplex;
public short dmYResolution;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
public string dmFormName;
public short dmLogPixels;
public int dmBitsPerPel;
public int dmPelsWidth;
public int dmPelsHeight;
public int dmDisplayFlags;
public int dmDisplayFrequency;
public int dmICMMethod;
public int dmICMIntent;
public int dmMediaType;
public int dmDitherType;
public int dmReserved1;
public int dmReserved2;
public int dmPanningWidth;
public int dmPanningHeight;
}
また、使用する2つのネイティブ関数を定義する必要があります。
[DllImport("user32.dll")]
private static extern bool EnumDisplaySettings(string lpszDeviceName, int iModeNum, ref DEVMODE lpDevMode);
[DllImport("user32.dll")]
private static extern int GetSystemMetrics(int nIndex);
そして最後に、すべての画面解像度を一覧表示し、現在の画面解像度を取得する関数を1つ作成します。
public static List<string> GetScreenResolutions()
{
var resolutions = new List<string>();
try
{
var devMode = new DEVMODE();
int i = 0;
while (EnumDisplaySettings(null, i, ref devMode))
{
resolutions.Add(string.Format("{0}x{1}", devMode.dmPelsWidth, devMode.dmPelsHeight));
i++;
}
resolutions = resolutions.Distinct(StringComparer.InvariantCulture).ToList();
}
catch (Exception ex)
{
Console.WriteLine("Could not get screen resolutions.");
}
return resolutions;
}
public static string GetCurrentScreenResolution()
{
int width = GetSystemMetrics(0x00);
int height = GetSystemMetrics(0x01);
return string.Format("{0}x{1}", width, height);
}
于 2012-04-06T08:49:37.237 に答える