Programming Field - プログラミング Tips

RichEdit: IRichEditOleCallback::GetContextMenu で GCM_RIGHTMOUSEDROP を利用する方法

リッチテキストコントロールの IRichEditOleCallback::GetContextMenu を実装(やり方は、IRichEditOleCallback をインプリメントして、EM_SETOLECALLBACK メッセージで渡す)するとき、メソッドは普通以下の定義になります。

    STDMETHOD(GetContextMenu)(WORD seltype, LPOLEOBJECT lpoleobj,
        CHARRANGE FAR* lpchrg, HMENU FAR* lphMenu) PURE;

ここで、引数 seltype が GCM_RIGHTMOUSEDROP のときは、右クリックによるドラッグで、何かがコントロール内にドロップされた瞬間というタイミングを示していて、このタイミングで表示するメニューのハンドルを尋ねられます (lphMenu に設定)。したがって、メニューを表示してドロップの動作を変えることが出来ます。

このときの lpchrg の値は、現在選択されているテキストではなく、何かをドロップしたテキストのカーソル位置を示しています。つまり、この値を保存しておけばドロップ位置にデータを挿入する際に役に立ちます。

もっと楽にしたい、またはオリジナルメニューを利用したい(HMENU を使わない)場合は、「RichEdit: 右クリックでテキストをドロップしたときにメニューを...」をご覧ください。