所以可以直接透過SystemParameters取得主螢幕的解析度
Size GetScreenResolution()
{
return new Size(
SystemParameters.PrimaryScreenWidth,
SystemParameters.PrimaryScreenHeight);
}
當然,如果是習慣使用Win32的程式設計師
也一樣可以用GetSystemMetrics來取得
const int SM_CXSCREEN = 0;
const int SM_CYSCREEN = 1;
[DllImport("user32.dll")]
static extern int GetSystemMetrics(int nIndex);
Size GetScreenResolution()
{
return new Size(
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN));
}
此時要注意DPI的設定,在非預設的DPI(96)下
由於WPF的特性,這兩種方法取出的數值會不同
例如同樣在1920x1080的解析度下
DPI 設定 | SystemParameters | GetSystemMetrics |
---|---|---|
100% (96) | 1920x1080 | 1920x1080 |
125% (120) | 1536x864 | 1920x1080 |
150% (144) | 1280x720 | 1920x1080 |
這樣彷彿使用GetSystemMetrics比較一致
但在WPF中,視窗相對位置會使用SystemParameters的解析度來算
也就是一個最大化的視窗,在滑鼠事件中取得右下角座標時
會取得SystemParameters的大小
所以還是需要依照使用的需求而選用
有關DPI的設定可以參考在WPF中取得DPI的設定及DPI Virtualization
--
參考資料
SystemParameters 類別
GetSystemMetrics Function
沒有留言:
張貼留言