トップページ > 記事閲覧
GetMousePointの原点
名前:こう 日時: 2017/10/13 20:23

いつもお世話になっています GetMousePoint関数でカーソルのクライアント座標を取得しているのですが、デフォルトのウィンドウの位置から、 ウィンドウを移動させても最初の原点の位置が変わらず、元の場所から、ウィンドウをずらすと、クライアント領域の同じところをクリックしても 座標が変わってしまいます。 これの対策があれば教えてほしいです。 お願いします DxLib ver3.18e VisualStudio 2017 C++ で使用しています。
メンテ

Page: 1 |

Re: GetMousePointの原点 ( No.1 )
名前:管理人 日時:2017/10/14 01:36

以下のようなプログラムを組んで実行してみたのですが、ウィンドウをずらしても GetMousePoint で得られる座標はクライアント座標となっていました #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int mouseX, mouseY ; // ウィンドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; SetDrawScreen( DX_SCREEN_BACK ) ; while( ProcessMessage() == 0 ) { ClearDrawScreen() ; // マウスカーソルの座標を取得 GetMousePoint( &mouseX, &mouseY ) ; // マウスカーソルの座標を描画 DrawFormatString( 0, 0, GetColor( 255,255,255 ), "x:%d y:%d", mouseX, mouseY ) ; ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } こうさんの環境でも↑こちらのプログラムであればウィンドウをずらしても正常な座標が得られますでしょうか?
メンテ
Re: GetMousePointの原点 ( No.2 )
名前:こう 日時:2017/10/14 12:44

回答ありがとうございます。 上のプログラムであれば、正常に座標を取得できました。 いろいろ試してみると、自分で作ったウィンドウをSetUserWindow関数でセットすると、ウィンドウ移動時に 座標の原点が移動し無いようでした。 何か対策はありますでしょうか?
メンテ
Re: GetMousePointの原点 ( No.3 )
名前:管理人 日時:2017/10/15 15:44

SetUserWindow で設定されたウィンドウについてはDXライブラリは管理していないので GetCursorPos と ScreenToClient という二つの API を使用してマウスのクライアント領域での座標を 取得するようにしてください m(_ _)m POINT MousePoint ; // マウスカーソルのスクリーン座標を取得 GetCursorPos( &MousePoint ) ; // スクリーン座標を指定のウインドウのクライアント領域での座標に変換 ScreenToClient( ウィンドウハンドル, &MousePoint ) ; MousePoint.x // X座標 MousePoint.y // Y座標
メンテ
Re: GetMousePointの原点 ( No.4 )
名前:こう(解決) 日時:2017/10/15 18:02

わかりました ありがとうございました WindowsAPIを使用してみます
メンテ

Page: 1 |

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

   クッキー保存