多角形や線をマウスで選択して、識別できるようにするには?


Tom  2003-09-26 19:11:42  No: 79566

PictureBoxに、多角形や線を描いた後、それをマウスで選択すると、
識別(色を変化させるなど)できるようにしたいのですが、
どうも上手くいきません。
何か良い方法がありましたら、お教え願えないでしょうか?


岡田 之仁  2003-09-26 19:37:10  No: 79567

随分昔にやったので、記憶の遠いのですが・・・

まず現在は、どんな方法で、オブジェクトのヒットテストを行っておら
れるのでしょうか?

そこが解らないので、なんともコメントができないのですが・・・

確か、GDI のAPIで、クリッピングとかリージョンとかでマウスのある
ポイント下に、ヒットするオブジェクトがあるかないかを調べれたと思
います。

PtVisible()なら・・・
指定された点が、指定されたデバイスコンテキストのクリッピングリー
ジョン内にあるかどうかを調べます

ヒットするクリップやパスが発見できれば、そのオブジェクトが取得でき
ますので、そのハンドルめがけて、いろいろなGDI命令が可能になるはず
です。

その辺の単語でヘルプを検索してみて下さい。

以上。


Tom  2003-09-26 19:50:19  No: 79568

早速のご回答ありがとうございました。
現在、識別する方法として、PictureBoxに描いた多角形、線等の座標を
覚えておき、マウスの座標との関係から識別しようと考えていました。
そうなると、
内部の処理でかなり複雑な計算式を組み立てなくてはならなくて、
悩んでいたところです。
内分、VisualBasicでのグラフィック操作については初心者なもので、
ご回答にあります「クリップ」等で検索してみます。

どうもありがとうございました。


Tom  2003-09-26 20:52:59  No: 79569

度々、申し訳ありません。
「クリッピング」について、ちょっと疑問があります。
クリッピングできるようにするためには、PictureBoxに、
Polygon、Polyline、LineToのように多角形や、線等を描画するのではなく、
CreatePolygonRgnのようなリージョンを作成しなければならないのでしょうか?
そうなると、
線(Line)や、折れ線(Polyline)のようなリージョンは作成できるのでしょうか?

よろしくお願いします。


岡田 之仁  2003-09-27 00:26:11  No: 79570

私がやった折には、C言語で全て書きましたので、VBのPictureBoxで
どうなのかと言うことについては、答えられません。

が、Picture1.hDC や、Picture1.hWnd 等でハンドルを取得し、GetWidowDC
等のWin32 API(GDI)等で、デバイスコンテキストハンドルに変換してやれば
そのハンドルめがけて、全ての描画命令が実行できます。

あとは、Picture1_MouseMoveイベント中に、マウスポインタの位置での、
ヒットテストを行えば良いはずです。

実際にコードが書ければよいのですが・・・ちょっと時間が無いので、ご自身
でチャレンジしてみて下さい。

以上。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加