WinAPIでディスプレイの解像度を取得する(まとめ)
WindowsAPIで画面のサイズを得る方法は、調べてみたらいくつかあるようです。
中には、タスクバーの領域を除いたサイズを返す関数もあるようです。
GetSystemMetrics式
これはフツーのやり方。
int dispx = GetSystemMetrics(SM_CXSCREEN); int dispy = GetSystemMetrics(SM_CYSCREEN);
GetDeviceCaps式
これもまあフツー?
HWND hWnd = GetDesktopWindow(); HDC hdc = GetDC( hWnd); int dispx = GetDeviceCaps( hdc, HORZRES); int dispy = GetDeviceCaps( hdc, VERTRES); int res = ReleaseDC( hWnd, hdc);
参考 http://homepage1.nifty.com/MADIA/delphi/Win32API/kaizoudo.htm
(VBは読めないので、関数名だけ斜め読みしました。)
以下、変なやつ
マルチディスプレイの時は、各ディスプレイで、解像度が違うこともあります。
(普通、全部同じ解像度に統一する気もしますけど。)
そういう時のヒントになればさいわいです。
デュアルディスプレイ、マルチディスプレイのとき、全部まとめたサイズを取得する
(デュアルディスプレイとかじゃない場合、上記のフツーのやり方と同じ結果になるはず。)
int dispx = GetSystemMetrics( SM_CXVIRTUALSCREEN); int dispy = GetSystemMetrics( SM_CYVIRTUALSCREEN);
ただ、複数のディスプレイを繋げた時に全体の形がデコボコだった場合、どんな値が返されるのか・・・。
デュアルディスプレイ、マルチディスプレイのとき、個々のディスプレイのサイズを調べる
ごめんなさい、面倒なのでヒントっぽいのだけ。
EnumDisplayDevices()を使えば、各ディスプレイごとのサイズがわかるらしいです。
参考 http://www.winapi-database.com/System/SystemSet/EnumDisplayDevices.html
タスクバーを除いた領域のサイズ(要検証)
RECT rcDisp, rcWnd; SystemParametersInfo( SPI_GETWORKAREA, NULL, &rcDisp, NULL);
でも、タスクバーを左端タテ向きに移動すると、変な値になった。