M7第8話 座標値入力での連続線

今回は少し戻って、座標値による2点指定直線作図を少し編集して、連続線を描かせるようにします。2点指定直線の作図は、
 始点指定→終点指定→線分作図→始点指定→終点指定→線分作図→・・・
と続けますが、連続線の場合は、
 始点指定→終点指定→線分作図→終点指定→線分作図→・・・
と続けます。2回目以降に始点の指定はありませんが、前回の終点がそのまま始点になる、という事になります。
 
なお、M7にはポリライン要素というのがありますが、ここでは、線分要素で描かせるのみとします。
 

 
前回の終点を始点にするだけでは、大した事はありませんので、前回終点からの増分入力が出来るように、ラジオボタンを付け、変数 zmode が「0」であれば座標入力モード、「1」であれば増分入力モード、となるようにし、作図する直前に判定させるようにします。
 m7CreateItem(hwnd, ITEM_RADIO , IDC_RADIO1, 190, "座標値", 1);
 m7CreateItem(hwnd, ITEM_RADIO , IDC_RADIO2, 226, "増分", 0);
 
始点と終点が同じ座標の場合には、長さ0の線分になってしまいますので、判定文を入れるようにします。
 if ( (lpos[0].x == lpos[1].x) && (lpos[0].y == lpos[1].y) ) {
  /* 始点と終点が同じ場合には作図しない */
  m7Beep();
 }
 else {
  ・・・
 

 
マウスで座標指定をした場合、その座標値を文字入力ボックスに表示させるようにします。こうしておけば、座標が少し違うだけの場合、座標値を編集しやすくなるのではなかろうか、という事です。増分入力時には、座標値ではなく、増分値を入れます。
文字入力ボックスにプログラム中、値を放り込むためには、関数「m7SetItemValues()」を利用します。この第1引数は、ON_INITDLG時のハンドルを指定せねばならない、との事なので、ON_INITDLG内で、
 hwnd1 = hwnd;
として、その時のハンドルを覚えておくようにして、この「hwnd1」を指定するようにしてあります。
 

 
C言語ソースファイルとアイコンBMPファイルを用意したら、「M7dev」で開いて、「ビルド」≫「ビルド」を行って、「ビルドは正常終了しました」と表示されたらOKです。「〜.m7p」というファイルが作成されます。これを「部品呼び出し」してみて下さい。