トップページ > 記事閲覧
複数のディスプレイがある場合のウィンドウ移動
名前: 日時: 2017/06/19 18:55

マルチディスプレイの環境でのウィンドウの座標指定について質問があります。 ウィンドウの座標を設定するSetWindowPosition関数がありますが、 これを使って、ウィンドウの座標を 現在ウィンドウが表示されているディスプレイの左上点(座標(0, 0)のところ)に 指定したいのですが、どのようにすれば実現できるでしょうか。 よろしくお願いします。
メンテ

Page: 1 |

Re: 複数のディスプレイがある場合のウィンドウ移動 ( No.1 )
名前:管理人 日時:2017/06/20 00:40

Win32API の MonitorFromPoint と GetMonitorInfo を使用すると実現できるようです スペースキーを押すとウインドウがモニターの左上端に移動するというサンプルを 作成してみましたので、よろしければご覧ください m(_ _)m #include "DxLib.h" // 指定のデスクトップ座標のモニターの左上座標を取得する void GetMonitorLeftTopPos( int DesktopX, int DesktopY, int *MonitorLeftX, int *MonitorTopY ) { HMONITOR hMonitor ; MONITORINFOEX MonitorInfoEx ; POINT point ; // DesktopX, DesktopY の座標のモニターのハンドルを取得する point.x = DesktopX ; point.y = DesktopY ; hMonitor = MonitorFromPoint( point, MONITOR_DEFAULTTONEAREST ) ; // モニター情報を取得する MonitorInfoEx.cbSize = sizeof( MonitorInfoEx ) ; GetMonitorInfo( hMonitor, &MonitorInfoEx ) ; // モニターのデスクトップでの左上座標を代入する *MonitorLeftX = MonitorInfoEx.rcMonitor.left ; *MonitorTopY = MonitorInfoEx.rcMonitor.top ; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode( TRUE ) ; if( DxLib_Init() < 0 ) { return -1 ; } SetDrawScreen( DX_SCREEN_BACK ) ; while( ProcessMessage() == 0 ) { ClearDrawScreen() ; DrawString( 0, 0, "スペースキーを押すとモニターの左上座標にウインドウを移動します", GetColor( 255,255,255 ) ) ; // スペースキーが押されたら分岐 if( GetInputChar( TRUE ) == ' ' ) { int MonitorLeftX, MonitorTopY ; int WinPosX, WinPosY ; // ウインドウの座標を取得 GetWindowPosition( &WinPosX, &WinPosY ) ; // ウインドウがあるモニターの左上座標を取得 GetMonitorLeftTopPos( WinPosX, WinPosY, &MonitorLeftX, &MonitorTopY ) ; // ウインドウの位置をモニターの左上座標に移動 SetWindowPosition( MonitorLeftX, MonitorTopY ) ; } ScreenFlip() ; } DxLib_End(); return 0; }
メンテ
Re: 複数のディスプレイがある場合のウィンドウ移動 ( No.2 )
名前: 日時:2017/06/20 13:14

ありがとうございます! サンプルコードまでつけていただいて、大変感謝です! これからもよろしくお願いします。
メンテ
Re: 複数のディスプレイがある場合のウィンドウ移動 ( No.3 )
名前:花(解決) 日時:2017/06/20 13:15

名前に(解決)をつけるのを忘れてしまいましたので再投稿します。 お手数おかけしました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存