PictureBoxに、多角形や線を描いた後、それをマウスで選択すると、
識別(色を変化させるなど)できるようにしたいのですが、
どうも上手くいきません。
何か良い方法がありましたら、お教え願えないでしょうか?
随分昔にやったので、記憶の遠いのですが・・・
まず現在は、どんな方法で、オブジェクトのヒットテストを行っておら
れるのでしょうか?
そこが解らないので、なんともコメントができないのですが・・・
確か、GDI のAPIで、クリッピングとかリージョンとかでマウスのある
ポイント下に、ヒットするオブジェクトがあるかないかを調べれたと思
います。
PtVisible()なら・・・
指定された点が、指定されたデバイスコンテキストのクリッピングリー
ジョン内にあるかどうかを調べます
ヒットするクリップやパスが発見できれば、そのオブジェクトが取得でき
ますので、そのハンドルめがけて、いろいろなGDI命令が可能になるはず
です。
その辺の単語でヘルプを検索してみて下さい。
以上。
早速のご回答ありがとうございました。
現在、識別する方法として、PictureBoxに描いた多角形、線等の座標を
覚えておき、マウスの座標との関係から識別しようと考えていました。
そうなると、
内部の処理でかなり複雑な計算式を組み立てなくてはならなくて、
悩んでいたところです。
内分、VisualBasicでのグラフィック操作については初心者なもので、
ご回答にあります「クリップ」等で検索してみます。
どうもありがとうございました。
度々、申し訳ありません。
「クリッピング」について、ちょっと疑問があります。
クリッピングできるようにするためには、PictureBoxに、
Polygon、Polyline、LineToのように多角形や、線等を描画するのではなく、
CreatePolygonRgnのようなリージョンを作成しなければならないのでしょうか?
そうなると、
線(Line)や、折れ線(Polyline)のようなリージョンは作成できるのでしょうか?
よろしくお願いします。
私がやった折には、C言語で全て書きましたので、VBのPictureBoxで
どうなのかと言うことについては、答えられません。
が、Picture1.hDC や、Picture1.hWnd 等でハンドルを取得し、GetWidowDC
等のWin32 API(GDI)等で、デバイスコンテキストハンドルに変換してやれば
そのハンドルめがけて、全ての描画命令が実行できます。
あとは、Picture1_MouseMoveイベント中に、マウスポインタの位置での、
ヒットテストを行えば良いはずです。
実際にコードが書ければよいのですが・・・ちょっと時間が無いので、ご自身
でチャレンジしてみて下さい。
以上。
ツイート | ![]() |