📖 wpf-mouse-operation-practice - Git hub に上げたもの
「 マウスカーソルの座標、使えるマウスボタンの認識、ボタンの押下状態、
マウスの状態のキャプチャー中にマウスカーソルが Window の外に出ていってしまったときの挙動、などなどがあるわね」
「 1990年代の Windows プログラミングみたいだな」
📖 Mouse.GetPosition(IInputElement) メソッド
「 👆 Windowタグをクリックして 雷マークから MouseMove のテキストボックスをダブルクリックしろだぜ」
Trace.WriteLine($"Window_MouseMove x={e.GetPosition((IInputElement)sender).X}");
「 👆 デバッグ中のコンソール画面に X 座標を出してみようぜ?」
「 👆 ちなみに Gridタグで同じことやったが 働かなかった」
「 Grid が マウスカーソルの位置をキャプチャーしてくれないんじゃ、計算が大変じゃないか?」
「 MouseMove のイベントが Grid に降りてきてないの?」
📖 WPF Grid MouseUp Event(s) not working
「 👆 背景が透明なものは 無い ものと扱われるのでは? という話しも出てるな」
「 透明でも マウスカーソルの位置をキャプチャーしたいことは 山ほど あるのに」
「 じゃあ 画面上に 丸を描いて、 丸の中で MouseMove イベントが働いて、丸の外で MouseMove イベントが働かないか
調べてちょうだい」
<Grid>
<Ellipse Width="300" Height="200" Fill="BlanchedAlmond" MouseMove="Ellipse_MouseMove"/>
</Grid>
private void Ellipse_MouseMove(object sender, MouseEventArgs e)
{
Trace.WriteLine($"Ellipse_MouseMove x={e.GetPosition((IInputElement)sender).X}");
}
「 👆 背景色が付いているところは MouseMove をキャプチャーできてそうだぜ」
「 デスクトップ画面上でウィンドウを動かしたいのよ。スクリーン上の座標で示してちょうだい」
📖 Windows Forms Coordinates
📖 Control.PointToScreen(Point) Method
「 👆 PointToScreen(...)
というのがあるようだぜ」
📖 WPF: Converting between screen coordinates and WPF coordinates
「 👆 うーん こんなクソ長いコード書いてる連中は 劣化した又聞きの情報を劣化して又聞きしたような情報を集めるような 最末端だぜ」
📖 Visual.PointToScreen(Point) Method
「 👆 情報の出元を調べることが 一番 手短だったりするぜ」
private void Ellipse_MouseMove(object sender, MouseEventArgs e)
{
var itsObject = (Visual)sender;
var coord = itsObject.PointToScreen(e.GetPosition((IInputElement)sender));
Trace.WriteLine($"Ellipse_MouseMove scx={coord.X:0.0f} scy={coord.Y:0.0f}");
}
「 👆 なんか 二度手間になってるコードだが これで動きそう」
var coord = ((Visual)sender).PointToScreen(e.GetPosition((IInputElement)sender));
Trace.WriteLine($"Ellipse_MouseMove scx={coord.X:0.0f} scy={coord.Y:0.0f}");
「 Visual と IInputElement は全く異なるインターフェースなのね」
「 👆 ウィンドウの中の座標も 楕円の中の座標も揃ってるから 多分 スクリーン座標をうまく取れてるんだろ。これで行こうぜ」
Crieitは個人で開発中です。
興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!