« 基板設計の見積もり失敗の研究 | トップページ | HyperFADCの開発を再開します »

2021.11.01

C#のオシロアプリでマウスで範囲選択などができるようにした

C#を勉強しながら開発中のオシロアプリに右クリックのポップアップメニューを実装して、かなり良い操作性になってきました。

右クリックするとプルダウンが出て、

Mouse1

マウスの左ボタンを押すとカーソル1が置かれ、そのままドラッグして、離すとカーソル2が置かれます。このカーソルで時間が測れます。

Mouse2

また、複雑に込み入った波形の場合、範囲を選択して拡大を選んでおけば、

Mouse3

見たいところが見えます。

Mouse4

昔の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を使うかもしれません。

|

« 基板設計の見積もり失敗の研究 | トップページ | HyperFADCの開発を再開します »

コメント

Graphics.GetHdc();
ができるので、WindowsのDLLから関数を全部引っ張ってくれば使うことができますよ。

投稿: d | 2021.11.03 11:46

コメントを書く



(ウェブ上には掲載しません)




« 基板設計の見積もり失敗の研究 | トップページ | HyperFADCの開発を再開します »