4 返信 最新の回答 日時: Mar 17, 2006 2:21 PM ユーザー:(なや)

    パネル上のセル列幅を変更したい

    Level 1
      皆様、お世話になります。

      SDKサンプル"CellPanel"を手本にして、簡単な表を組み込んだパネルを作成しています。
      ここで、クリック&ドラッグで列幅を変更したいのですが、どうにも行き詰ってしまいました。

      まずカーソル、列の境界にマウスがきた時にリサイズ中であることを示すカーソルを表示させたいのですが、どのようにしたら良いのでしょう?。カーソルの変更方法がわかりません。

      次に実際のリサイズ方法ですが、MouseMoveイベントをオーバーライドしてその中で列幅サイズを計算して、再表示をかけるしかないのかな、と思っています。
      このような方法しかないのでしょうか?。もっと簡単に実装する方法はないのでしょうか?

      実現イメージに近いのは、タグパネルのオプションメニュー"タグをスタイルにマップ"ボックスです。
      ボックス内のリストヘッダで行っているようなことを実現したいのですが、どのような仕組みなのか解析できませんでした。

      大きく2点について質問させていただきました。
      アドバイスよろしくお願いします。
        • 1. Re: パネル上のセル列幅を変更したい
          *マウスオーバーのカーソル変更について:
          widgetのボスにIMouseRollOverの実装を集約させ、MouseEnterまたはMouseOverメソッド実装内にて、渡されるマウスの位置がIControlViewのバ ウンディングボックス内にある場合、AcquireModalDialogCursorクラスをnewで生成してCursorSpec(カーソルID)を指定します。クラスのデストラクタまた MouseLeaveメソッドにてオブジェクトをdeleteします。Deleteした段階で元のカーソルに戻ります。
          アプリケーションが提供するカーソルIDはCursorDefs.hをご覧ください。また、プラグイン内に独自のカーソルを提供したい場合は、リソースIDで指定できます。CursorSpe c.hをご覧ください。

          *リサイズについて:
          widgetのボスにCEventHandlerから派生したIEventHandlerの実装を集約させ、任意のメソッドを実装ください。XMLのタグ・スタイルマッピングのパネルはさらに ITrackerFactory::QueryTrackerを用いてクエリーしたITrackerでマウスのトラッキングもしているのではないかと思います。このときにクエリーされるITr ackerはITrackerRegisterによりあらかじめITrackerFactory::InstallTrackerを登録しておく必要があります。

          詳細は、ASNを通してディベロッパーサポートのインシデントをあけて質問してみるとよいのではないかと思います。
          • 2. Re: パネル上のセル列幅を変更したい
            Level 1
            ご回答ありがとうございました。

            おかげ様でマウスオーバーのカーソル変更は成功しました。
            列の境界線にマウスがきた時にkCrsrVerticalSplitterに変更するようにしました。

            もう一件のリサイズについてですが、IEventHandlerにて任意のメソッドを実装するということは、やはりMouseMoveが呼ばれるたびに列幅を設定し続ける方法しかないのでしょ うか?

            あと、お恥ずかしい話ですがTrackerの仕様がよくわかりません。
            Trackerとは、例えば図形の編集範囲を指定する矩形のことと思っていましたが、どうも異なるようですね。

            さらに質問して申し訳ありませんが、よろしくお願いします。
            • 3. Re: パネル上のセル列幅を変更したい
              Level 1
              > Trackerの仕様がよくわかりません。

              Trackerとは基本的にマウスの動きを追い(トラッキング)しながら何かを行うためのオブジェクトです。SDKのSnapshotサンプルプラグインにレイアウトビューに対するTrack erの実装がありますので、ご覧ください。
              • 4. Re: パネル上のセル列幅を変更したい
                Level 1
                Trackerについての回答ありがとうございました。
                試してみたのですが、どうもBeginTrackerが上手く呼び出せなかったので、Trackerを使わずに、MouseDragイベントに列幅を変更する処理を入れることにしました。

                これにて、当タイトルの問題は解決しました。
                ありがとうございました。