C#のオシロアプリでマウスで範囲選択などができるようにした
C#を勉強しながら開発中のオシロアプリに右クリックのポップアップメニューを実装して、かなり良い操作性になってきました。
右クリックするとプルダウンが出て、
マウスの左ボタンを押すとカーソル1が置かれ、そのままドラッグして、離すとカーソル2が置かれます。このカーソルで時間が測れます。
また、複雑に込み入った波形の場合、範囲を選択して拡大を選んでおけば、
見たいところが見えます。
昔のWindowsのプログラミングでは正方形を描きながらXORでビット演算するということができたのですが、.NET FrameWorkではできないようです。
アプリのBitmapにはXORで描くことはできないのですが、調べたところControlPaint.DrawReversibleFrameというメソッドがあるようで、下のコードのようにするとデスクトップに白い線を描くことができるようです。
ControlPaint.DrawReversibleFrame(theRectangle, this.BackColor, FrameStyle.Dashed);
Point endPoint = ((Control)sender).PointToScreen(new Point(e.X, e.Y));
int width = endPoint.X - startPoint.X;
int height = endPoint.Y - startPoint.Y;
theRectangle = new Rectangle(startPoint.X,
startPoint.Y, width, height);
ControlPaint.DrawReversibleFrame(theRectangle, this.BackColor, FrameStyle.Dashed);
上のコードはMicrosoftの解説ページにあったものなので、詳しくはググってみてください。
よくわからないので結局は使いませんでした。CPUが十分に速く、Bitmapに波形を描く時間は10ms以下なので、毎回毎回波形を全部描きながら長方形を描いても体感速度的には落ちなかったためです。マウスで範囲選択をすると毎回毎回波形を全部描きなおしていますが、全くスピード的には問題ありませんでした。
今後、機能が増えてきて遅いなと感じたらControlPaint.DrawReversibleFrameを使うかもしれません。
| 固定リンク
コメント
Graphics.GetHdc();
ができるので、WindowsのDLLから関数を全部引っ張ってくれば使うことができますよ。
投稿: d | 2021.11.03 11:46