wxListBox 内のアイテムの位置を動的に変更する方法 (ドラッグ & ドロップなど) をお聞きしたいのですが、dnd と呼ばれる wxWidget サンプル (wxWidgets でダウンロード) から wxListBox にアイテムを挿入する方法しか見つけられませんでした。
2 に答える
ユーザーがリストボックス内の項目を並べ替えられるようにしたい場合は、wxEditableListBoxの使用を検討してください。ドラッグ アンド ドロップが本当に必要な場合は、ravenspoint の回答で説明されているように実装できるはずですが、それはより困難です。
正確に記述された要件から始めるのが常に最善です。
- ユーザーがリストボックスで移動するアイテムを選択します
- ユーザーがアイテムを新しい位置にドラッグしたいことを示した
- ユーザーがリストボックス内のアイテムを選択して、ドラッグされたアイテムに置き換えます
- アプリケーションは、要求に応じてリストボックス内の項目を再配置します。
ステップ1は簡単に思えます。私はあなたがそれで助けを必要としないと思いますか?
ステップ2は最もトリッキーです。ユーザーがアイテム内でマウスをドラッグしていることを検出するために、マウスイベントを処理する必要があります。これがマウスイベントクラスのドキュメントですhttp://docs.wxwidgets.org/trunk/classwx_mouse_event.html このトリックをやってのけるために、これのほとんどを理解する必要があります!
ステップ3も注意が必要です。ユーザーがドラッグ後にボタンを離すと、イベントからマウスの位置を取得し、ボタンが離されたときにマウスの下にあったアイテムを計算する必要があります。HitTestメソッドが必要です。wxListBoxには1つありますか?私は疑わない!おそらく、独自に作成するのではなく、wxListCtrlの使用を検討する必要があります。 http://docs.wxwidgets.org/trunk/classwx_list_ctrl.html#ac346d7aa18722fb54580d4c4ed5cf113
ステップ4.これで、すべてのマウス処理が完了したら、移動したアイテムと挿入するアイテム(呼び出し)の前または後に挿入する必要があります。リストボックスをクリアしてから、新しい順序でアイテムを挿入します。
これはすべて大変な問題のようです。この機能はそれほど重要ですか?これに必要なコーディングとテストおよびデバッグの一部で作業を完了する、より単純なユーザーインターフェイスを受け入れることができますか?
このようなもの:
- ユーザーが移動するアイテムを選択します
- ユーザーはアイテムを上下に移動することを選択します(上/下矢印キー、左/右マウスボタン、スクロールホイールはすべて可能です)
- アプリケーションは選択したアイテムを上下に移動します
- アイテムが必要な位置に来るまでユーザーは繰り返します