ラベル マウスカーソル の投稿を表示しています。 すべての投稿を表示
ラベル マウスカーソル の投稿を表示しています。 すべての投稿を表示

2018年5月8日火曜日

マウスカーソルを変える 〜 使いやすさを求めて

前回で、輪切り画像の描画処理は一通り開発を終わりました。

ただ、輪切りをする場所を指定する画面の使いやすさを、もう少し向上したいと思ったんです。要するに、どこで切るのかを操作している人がわかりやすい仕掛けを入れたいと思った、ということです。

一番簡単な方法は、必要なときにマウスカーソルの形状を縦棒もしくは横棒に変えると言うものだと思います。マウスカーソルのライブラリーにはVSplit、HSplitという名前のカーソルがあるので、これを使います。

プログラムの中に、輪切り画像作成モードを設定する処理、checkBox1_CheckedChanged()、checkBox2_CheckedChanged()という2つのメソッドがあります。輪切り画像作成モードに入る為のボタンを押したときに呼び出されるイベントハンドラです。この中で、マウスカーソルの切替をします。


         /* X軸に垂直な平面で輪切りにする場合の処理 */
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox2.Checked && !event_by_inner1)
            {
                event_by_inner1 = true;
                checkBox2.Checked = false;
            }

            event_by_inner1 = false;

            if (checkBox1.Checked)
            {
                checkBox1.Text = "Push Button to stop getting mouse position X-axis";
                button1_on = true;
                mouse_x = mouse_y = 0; // マウス座標データ初期化
                // マウスカーソルを、縦向きに分割するようなものに変更
                this.pictureBox1.Cursor = System.Windows.Forms.Cursors.VSplit;
                // マウスイベント有効
                ctrlEvent(true);
            }
            else
            {
                checkBox1.Text = "Push Button to start getting mouse position X-axis";
                button1_on = false;
                // マウスカーソルを元に戻す
                this.pictureBox1.Cursor = System.Windows.Forms.Cursors.Default;
                // マウスイベント削除
                ctrlEvent(false);
            }
        }

X軸に垂直な平面で輪切りにするモードに遷移したら、pictureBox1.CursorプロパティをSystem.Windows.Forms.Cursors.VSplitに書き換えて縦向きの直線に変更し、輪切りモードから通常モードに遷移したらSystem.Windows.Forms.Cursors.Defaultに書き換えてデフォルトのマウスカーソルに戻します。

         /* Y軸に垂直な平面で輪切りにする場合の処理 */
        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked && !event_by_inner1)
            {
                event_by_inner1 = true;
                checkBox1.Checked = false;
            }

            event_by_inner1 = false;

            if (checkBox2.Checked)
            {
                checkBox2.Text = "Push Button to stop getting mouse position Y-axis";
                button2_on = true;
                mouse_x = mouse_y = 0; // マウス座標データ初期化
                // マウスイベント有効
                // マウスカーソルを水平の向きに分割するものに変更
                this.pictureBox1.Cursor = System.Windows.Forms.Cursors.HSplit; 
                ctrlEvent(true);
            }
            else
            {
                checkBox2.Text = "Push Button to start getting mouse position Y-axis";
                button2_on = false;
                // マウスカーソルを元に戻す
                this.pictureBox1.Cursor = System.Windows.Forms.Cursors.Default; 
                // マウスイベント削除
                ctrlEvent(false);
            }
        }
Y軸に垂直な平面で輪切りにするモードに遷移したら、pictureBox1.CursorプロパティをSystem.Windows.Forms.Cursors.HSplitに書き換えて横向きの直線に変更し、輪切りモードから通常モードに遷移したらSystem.Windows.Forms.Cursors.Defaultに書き換えてデフォルトのマウスカーソルに戻します。

動作の様子をアニメーションgifにしてみました。下に貼り付けます。


今回はここまでです。