.NET TIPS

マウス・カーソルの位置を取得・設定するには?

デジタルアドバンテージ 一色 政彦
2005/11/18

 主にWindowsアプリケーションでは、マウス・カーソルの位置を調べてから何らかの処理を実行したい場合がある。例えば、クリックされた場所に対して何らかの描画をしたり、その場所に小さなウィンドウを表示したりしたいような場合だ。

 このような場合で、実際にカーソルの現在の位置を取得・設定するには、基本的にCursorクラス(System.Windows.Forms名前空間)のPositionプロパティを利用すればよい。またカーソル位置の取得のみでよければ、Controlクラス(System.Windows.Forms名前空間)のMousePositionプロパティも利用できる。

 これらはいずれも静的なプロパティで、データ型はPoint型(System.Drawing名前空間)である。なおPoint型のXプロパティを利用することでX座標軸の位置を、またYプロパティを使用することでY座標軸の位置を取得できる。

 次の画面は、これらのプロパティを利用して作成したWindowsアプリケーションである。

カーソルの位置を取得・設定するWindowsアプリケーションの例
フォームの上部にはマウス・カーソルの位置を文字列化したものが表示される。この例ではX座標として「1276」が、Y座標として「489」が表示されている(単位はピクセル)。また下部に配置されている[カーソルを画面中央に移動]ボタンをクリックすると、プライマリ・スクリーンの中央にマウス・カーソルが移動する。

 このアプリケーションは、10ミリ秒ごとにマウス・カーソルの現在位置を取得して、フォームの上部に配置したLabelコントロールに現在位置の情報を文字列化して表示する。また、[カーソルを画面中央に移動]ボタン(button1コントロール)をクリックすると、マウス・カーソルがプライマリ・スクリーン中央に移動する仕様になっている(なおプライマリ・スクリーンとは、コンピュータに複数のディスプレイが接続されている場合、そのメインとなるディスプレイのこと。ディスプレイが1つしか接続されていない場合は、そのディスプレイがプライマリ・スクリーンである)。

 なお、10ミリ秒ごとに処理を実行する方法の詳細は「TIPS:タイマにより一定時間間隔で処理を行うには?(Windowsタイマ編)」を参考に、またスクリーン中央の位置を取得する方法については「TIPS:ディスプレイの解像度を取得するには?」を参照していただきたい。

 以下はカーソルの位置を取得・設定している部分のソース・コードである。なおソース・コード全体は、このサンプル・プログラムの説明欄のリンク(下の「C#版のダウンロード」「VB.NET版のダウンロード」)からダウンロードできる。

private void timer1_Tick(object sender, System.EventArgs e)
{
  // マウス・カーソルの現在位置を
  // 10ミリ秒ごとに取得してラベルに設定
  label1.Text = Control.MousePosition.ToString();
  // Cursorクラスでも取得可能
  //label1.Text = Cursor.Position.ToString();

}

private void button1_Click(object sender, System.EventArgs e)
{
  // ボタンがクリックされたときに
  // マウス・カーソルの位置をスクリーン中央に移動させる
  int centerX = Screen.PrimaryScreen.Bounds.Right / 2;
  int centerY = Screen.PrimaryScreen.Bounds.Bottom / 2;
  Cursor.Position = new Point(centerX, centerY);
}
Private Sub timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles timer1.Tick
  ' マウス・カーソルの現在位置を
  ' 10ミリ秒ごとに取得してラベルに設定
  label1.Text = Control.MousePosition.ToString()
  ' Cursorクラスでも取得可能
  'label1.Text = Cursor.Position.ToString()

End Sub

Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
  ' ボタンがクリックされたときに
  ' マウス・カーソルの位置をスクリーン中央に移動させる
  Dim centerX As Integer = Screen.PrimaryScreen.Bounds.Right / 2
  Dim centerY As Integer = Screen.PrimaryScreen.Bounds.Bottom / 2
  Cursor.Position = New Point(centerX, centerY)
End Sub
マウス・カーソルの取得・設定を行うサンプル・プログラム(上:C#、下:VB.NET)

 マウス・カーソルの位置情報を実際に活用する際には注意する点が1つある。先に示したサンプル・プログラムの実行結果を見て分かるように、マウス・カーソルの位置情報はスクリーン全体における位置(スクリーン座標)として取得される。しかしWindowsアプリケーションの基本的な座標計算は、自分自身の領域(クライアント領域)における位置(クライアント座標)を基準に計算する。

 従って、例えばマウス・カーソルの位置がフォーム内のどこにあるのかを調べるには、その位置をいったんスクリーン座標からクライアント座標に変換する必要があるのだ。この座標変換の方法については「TIPS:スクリーン座標←→クライアント座標の変換を行うには?」で紹介している。End of Article

カテゴリ:Windowsフォーム 処理対象:カーソル
使用ライブラリ:Cursorクラス(System.Windows.Forms名前空間)
使用ライブラリ:Controlクラス(System.Windows.Forms名前空間)
使用ライブラリ:Point構造体(System.Drawing名前空間)
関連TIPS:タイマにより一定時間間隔で処理を行うには?(Windowsタイマ編)
関連TIPS:ディスプレイの解像度を取得するには?
関連TIPS:スクリーン座標←→クライアント座標の座標変換を行うには?

この記事と関連性の高い別の.NET TIPS
スクリーン座標←→クライアント座標の変換を行うには?
スクリーンやウィンドウをキャプチャするには?
クライアント領域やウィンドウ領域の座標を取得するには?
ある座標や領域がコントロールの領域内に含まれているかを確認するには?
マウス・カーソルの移動可能領域を制限するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間