私がする時:
SendMessage(editControlHWND, EM_EXGETSEL, 0, (LPARAM)&charRange);
選択した範囲のテキストを取得します。ただし、キャレットがこの選択のどこにあるか、つまり最後か最初かを知りたいです。
つまり、右から左にドラッグするなどのように、ユーザーがテキストを「後方」に選択しました。
EM_EXGETSEL
は常に の小さい方の数にcpMin
なるため、明らかに選択順序とは関係ありません。
EM_EXGETSEL
かなりの量が既に選択されているため、この状況では比較のためにキャレットの位置を取得できません。
キャレットの現在の個々の位置を取得する方法はありますか (それを cpMin/cpMax と比較できるようにするため)? または、選択したテキストのブロック内でキャレットがどこにあるかを判断する方法はありますか?
編集:
これを行う理由についての私の説明: ユーザーがテキストを選択できる読み取り専用の RichEdit コントロールにプログラムでテキストを挿入します。ただし、テキストが最後に追加されると、キャレットを最後に移動してテキストを挿入する必要があります。これは、テキストが選択されている/ユーザーが現在テキストを選択しているときに発生する可能性があります。
面倒なのはこの最後のものです。テキストがプログラムによって入力される前後に、選択したテキストを取得および設定するために andEM_EXGETSEL
を使用します。EM_EXSETSEL
デフォルトでは、EM_EXGETSEL
は常に小さい方の数値を に配置します。cpMin
つまり、ユーザーが現在テキストを後方 (右から左) に選択しており、テキストがコントロールに追加されている場合、選択領域のキャレットの位置が最初から最後に、これらの数値を に直接フィードするためEM_EXSETSEL
です。が逆方向に選択できることはわかっています ( の大きな数字と の小さなEM_EXSETSEL
数字でこれをテストしました) が、ユーザーがテキストを逆方向に選択したことを示すものは何もありません。cpMin
cpMax
EM_EXGETSEL
したがって、キャレットの位置を比較したり、選択の最初または最後にあるかどうcpMin
かcpMax
を確認したり、それに応じて行動する必要があります。