argius note

プログラミング関連

MFCでマルチモニタ環境情報取得

マルチモニタ(マルチディスプレイ)環境の情報を取得するAPIなどについて調べました。


練習として、シングルモニタ環境とマルチモニタ環境の両方で使えるプログラムを書いてみました。仮想画面の最も右にあるモニタに画面最大サイズでダイアログを表示するプログラムです。シングルモニタの場合は普通に画面の最大サイズでダイアログが表示されます。デュアルモニタ(デュアルディスプレイ)の場合は、右側のモニタの最大サイズでダイアログが表示されます。

環境はWinXPproSP2,VC++2003です。MFCアプリケーションをダイアログベースで作成し、ダイアログクラスに下記コードを追加します。私はVC++やCは不慣れなので、適切なコードでないかもしれません。ご了承下さい。

#include "multimon.h" // マルチモニタ

// (中略)

BOOL CTestDlg::OnInitDialog()
{
    // (中略)
    // 初期化
    MONITORINFO MonitorInfo;
    MonitorInfo.cbSize = sizeof(MonitorInfo);
    POINT p = {GetSystemMetrics(SM_CXVIRTUALSCREEN), 0};
    HMONITOR MonitorHandle = ::MonitorFromPoint(p, MONITOR_DEFAULTTONEAREST);
    ::GetMonitorINfo(MonitorHandle, &MonitorInfo);
    RECT r = MonitorInfo.rcMonitor;
    MoveWindow(r.left, r.top, r.right - r.left, r.bottom - r.top);
}