デュアルディスプレイで指定のモニタへ表示させるには

解決


メグロ  2007-08-22 00:43:07  No: 66069

大変、お世話になっています。
以下について、ご指導をよろしくお願いします。

●Windows XP  VC++6  MFC  ダイアログベース

●不明点
デュアルディスプレイ(2画面)のマシンで、ダイアログの表示を
指定(セカンダリ)することは、可能でしょうか。
m(__)m


メグロ  2007-08-22 20:52:13  No: 66070

画面(プライマリ)サイズを取得、ダイアログ位置を指定するところまで
できましたが、画面(セカンダリ)のサイズを取得がわかりません。
宜しくお願い致します。

BOOL CTestDlg::OnInitDialog()
{
  CDialog::OnInitDialog();
//追記 S 〜
    RECT rec;
    SystemParametersInfo(SPI_GETWORKAREA, 0, &rec, 0);
    SetWindowPos(&wndTop, rec.right, 0, 200, 200, SWP_SHOWWINDOW);
//〜追記 E
}


subaru  2007-08-22 21:29:31  No: 66071

試したことはありませんが画面ごとにサイズを取りたいなら
EnumDisplayMonitorsからGetMonitorInfoでできそうな感じです。


オショウ  2007-08-22 23:19:29  No: 66072

マルチディスプレイの各種情報取得では・・・
GetSystemMetrics(SM_CMONITORS)  で、ディスプレイ台数取得
GetSystemMetrics(SM_XVIRTUALSCREEN)
GetSystemMetrics(SM_YVIRTUALSCREEN)
GetSystemMetrics(SM_CXVIRTUALSCREEN)
GetSystemMetrics(SM_CYVIRTUALSCREEN) で、仮想画面全体のサイズ取得
MonitorFromPoint( p , MONITOR_DEFAULTTONEARESET) で、領域に対する
ディスプレイのハンドル取得・・・
GetMonitorInfo( hMon , &mInfo ) で、ディスプレイハンドルからサイズ
情報を取得。

と言う流れになります。

お試し下さい。

※  各種APIの詳細は、ちゃんと調べて下さい。
    ちゃんと書いてありますヨ!

以上。


メグロ  2007-08-22 23:23:32  No: 66073

subaruさん、ありがとうございました。
解決しました。

BOOL CTestDlg::OnInitDialog()
{
//Append Start
    long    x, y;
    HMONITOR  MonitorHandle;
    MONITORINFO  MonitorInfo;
    x = 1280;
    y = 0;
    POINT Point = {x, y};
    MonitorHandle = ::MonitorFromPoint(Point, MONITOR_DEFAULTTOPRIMARY);
    MonitorInfo.cbSize = sizeof(MonitorInfo);
    ::GetMonitorInfo(MonitorHandle, &MonitorInfo);
//Append End
}


メグロ  2007-08-22 23:28:30  No: 66074

オショウさん、ご指導ありがとうございます。
勉強させていただきます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加