VC モニターの物理サイズ(インチ)の取得方法 | 株式会社リッカWebサイト

株式会社リッカ

BLOG
ブログ詳細

2019-08-16VC モニターの物理サイズ(インチ)の取得方法

 

はじめに

VCで、「モニターが物理的に何インチなのか?」を取得する方法を書きます。

一発でとれるわけではなく、計算をしないといけないのですが、
GetDeviceCaps()を使用するので、対象OSがWindows 2000まで広がります。
Windows 7がサポート切れるこのご時世にそこまでカバーしなくてもとも思うけど、
余計な実装や依存関係を考えなくていいのがうれしいですね。

ちなみに、アイキャッチはDCを取得したりするので、
いらすとやさんからワシントンDCの画像を…

モニターサイズの計算

今回は、GetDeviceCaps()を使用して、物理スクリーンの幅と高さ(ミリメートル)を取得して計算します。
取得できるのがミリメートルなので、インチに単位変換が必要になります。
1in = 25.4mm

モニターサイズを算出する式です。
モニターサイズ(in) = sqrt(幅 * 幅 + 高さ * 高さ) / 25.4(mm)

その他

DCが必要となるので、GetDC(NULL)で画面全体を取得します。
あと、取得したDCはリリースが必要なので使用後は、ReleaseDC()をする。

GetDeviceCaps()のindexには、
HORZSIZE : Width, in millimeters, of the physical screen. (幅)
VERTSIZE : Height, in millimeters, of the physical screen. (高さ)
を指定する。

ソース

簡単にコンソールアプリのコードを作成しました。

ここから下はおまけ

解像度とDPIの取得

当初、インチ計算のために、解像度とDPIを取得して計算しようとしていました。
しかし、どうしてもDPIが決め打ちしか返さないので諦めました。

WindowsではDPIは互換性のために96を必ず返すそうです。
拡大縮小やカスタムスケーリングを行っていると、96に倍率をかけた数字が返ってきました。

Awareを設定する方法も試したんですけどだめでした。

関係ないけどGetWindowRect()で解像度を取得したりもしたので、
一応、サンプルコードものせときます。
色んな環境で試すと面白いですよ!!