Hatena::ブログ(Diary)

趣味グラマ。ゆとり。そっちの話だけ。

2010-03-12

WinAPIでディスプレイの解像度を取得する(まとめ)

WindowsAPIで画面のサイズを得る方法は、調べてみたらいくつかあるようです。

中には、タスクバーの領域を除いたサイズを返す関数もあるようです。

GetSystemMetrics式

これはフツーのやり方。

int dispx = GetSystemMetrics(SM_CXSCREEN);
int dispy = GetSystemMetrics(SM_CYSCREEN);

参考 http://sho1blog.exblog.jp/7992890/

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);

でも、タスクバーを左端タテ向きに移動すると、変な値になった。

ちかわちかわ 2013/03/20 10:48 参考になりました (・ω・)ノ

トラックバック - http://d.hatena.ne.jp/yu-hr/20100312/1268419472