none
貼り付けたイメージのリサイズについて RRS feed

  • 質問

  • リッチテキストコントロールにイメージを貼り付けて、D&Dやリサイズをしようとするとき、

    マウスのポインタが変化しません。IBeamのままです。

    D&Dなら手の形なりsizeAllなりになってほしいのですが、

    なにか設定するプロパティなどがあるのでしょうか。それともオブジェクトの位置・サイズから自前で変える必要があるのでしょうか。

    C#で現象を見てますが、VBでも同じだと思います。

     

    よろしくおねがいします。

    2010年10月16日 1:31

回答

  • 標準のリッチエディットコントロールでは、

    • 画像をクリックしてアクティブにすれば、四隅および四辺にリサイズ用のドットが現れ、それにマウスカーソルを当てると位置に応じたカーソルに変化する。
    • 一旦アクティブにしなくても、直接リサイズ可能。この場合マウスのボタンダウン時点でリサイズ用ドットが現れるがカーソルは変化しない。

    という動作を示すようです(Vista のワードパッドで確認)。

    前者は .NET の RichTextBox の実装で無効化されているようです(というか、一瞬変わった後に元のカーソルに戻される。結果、凄くカーソルがちらつく)。RichTextBox の派生クラスを作り、WndProc をオーバーライドして WM_SETCURSOR メッセージに対し DefWndProc を呼び出すだけで base.WndProc を呼ばないようにすれば、この問題は回避できるようです。ただし、UseWaitCursor によって待機カーソルを一元指定することができなくなります。

    後者をどうにかするには恐らく地道な作業が必要でしょう。私は詳しくないですが、IRichEditOle を使うことになるかな?

    • 回答としてマーク さった 2010年10月16日 5:44
    2010年10月16日 3:03

すべての返信

  • 標準のリッチエディットコントロールでは、

    • 画像をクリックしてアクティブにすれば、四隅および四辺にリサイズ用のドットが現れ、それにマウスカーソルを当てると位置に応じたカーソルに変化する。
    • 一旦アクティブにしなくても、直接リサイズ可能。この場合マウスのボタンダウン時点でリサイズ用ドットが現れるがカーソルは変化しない。

    という動作を示すようです(Vista のワードパッドで確認)。

    前者は .NET の RichTextBox の実装で無効化されているようです(というか、一瞬変わった後に元のカーソルに戻される。結果、凄くカーソルがちらつく)。RichTextBox の派生クラスを作り、WndProc をオーバーライドして WM_SETCURSOR メッセージに対し DefWndProc を呼び出すだけで base.WndProc を呼ばないようにすれば、この問題は回避できるようです。ただし、UseWaitCursor によって待機カーソルを一元指定することができなくなります。

    後者をどうにかするには恐らく地道な作業が必要でしょう。私は詳しくないですが、IRichEditOle を使うことになるかな?

    • 回答としてマーク さった 2010年10月16日 5:44
    2010年10月16日 3:03
  • ありがとうございます

    WM_SETCURSORをフック、DefWndProcの呼び出しで件は解決しました。ありがとうございました。後半は、ゆっくり考えます。。。

    2010年10月16日 5:48