1

C#WinForms(企業階層)で大規模でインタラクティブなツリー構造を描画する必要があります。

おそらく非常に複雑になる可能性のあるツリー内のブロックを配置するアルゴリズムを除けば、実際のキャンバスと描画コードを実装する方法についてはよくわかりません。

一見すると、巨大な画像(または大きな画像のマトリックス)を作成し、Graphicsまたはを使用BufferedGraphicsして、ユーザーがズームインする場所に指定された小さな領域をレンダリングできます。これにより、Googleマップで見られるズームパンの効果が得られます。

双方向性に関しては、ここで何ができるでしょうか?ユーザーが特定の人(特定のコストセンターの人、請負業者である人など)を強調できるようにしたいと思います。また、ユーザーがズームインするにつれて、ツリーにスタッフに関するより多くの情報が徐々に表示されると、かなりクールになります。イベントでヒットテストを行いMouseMove、キャンバス上の画像を構成するものをプログラムで追加/削除/変更する必要がありますか?

これは、GDIを使用したり、代わりにDirectDrawを使用したりすることを避けるべきものですか?やり過ぎたくない-構造を視覚的に表現し、ユーザーにそれを印刷するオプションを提供できるようにしたいだけです。

または、インタラクティブ機能を使用してズームとパンを実行できる(フリーウェア?)ライブラリはありますか?少し質問があるかもしれませんが、ツリー構造も処理できるものでしょうか。

私は個々のコンセプトを小規模に経験したことがありますが、このような大きな構造にまとめられたものはありません。私が何か間違ったことをすると、それは非常に遅く、遅れ、そして記憶を奪う何かに変わる可能性があると私は予測しています。

私はWPFに手を出しただけです。私はほぼ独占的に.NetでWinFormsを使用しています-このタスクを大幅に簡単にするWPFに何かありますか?

4

2 に答える 2

1

これが答えであるかどうかはわかりませんが、GDI+ を使用して対話型のグラフィカルな作業を数多く行っており、非常に効果的に作業できると感じています。あなたが説明したものとまったく同じツリー構造、多用途のレイアウトエディター、写真の閲覧などの両方について.

望ましくないのは、すべてを大きなビットマップにペイントすることです大きなビットマップは避けてください。:-)

したがって、フレームワークによって提供されるダブル バッファリングされたグラフィックスを使用するか、独自に設計します。ただし、アプリをリモートで実行したい場合、これは完璧ではないかもしれません: http://blogs.msdn.com/b/oldnewthing/archive/2006/01/03/508694.aspx

基本的には、描画したいものすべてをリストに入れ、OnMouseDown/OnMouseMove/OnMouseUp でヒット テストできるように、画面上の正確な位置に関する情報で更新するだけです。インタラクションの状態 (DraggingObject、MakingSelection、Scrolling など) と Point _lastMousePosition の列挙型を保持する必要があることにすぐに気付くでしょう。

ロジックは非常に単純です。ちらつきのない応答性の高いものにすることは、それほど簡単ではないかもしれません。

于 2011-11-24T12:12:37.347 に答える
1

WinForms を使用していると仮定すると、1 つのオプションは、相互作用を公開する必要がある各項目に対して独自のカスタム コントロールを作成することです。

次に、それらとマスター キャンバスを格納する別のカスタム コントロールを作成します。キャンバス (パネルなど) といくつかのスクロール バーを用意します。

スクロール バーを使用する場合は、必要に応じて子コントロールを動的に作成および削除します。特定のズーム レベルを超えると、コントロールから直接描画された非インタラクティブな画像に切り替える必要がある場合があります。

このモデルは、ユーザーが一度に複数のコントロールを操作しないことを前提としています。複数のアイテムを選択できるなげなわを提供すると、物事はすぐに難しくなります。

于 2011-11-24T01:03:29.037 に答える