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: 右クリックでテキストをドロップしたときにメニューを...」をご覧ください。