現在の選択範囲を操作する方法

ユーザーは、マウスまたはキーボードを使用すると、リッチ エディット コントロール内のテキストを選択できます。 現在の選択は、文字が選択されていない場合は、選択した文字の範囲または挿入ポイントの位置です。 アプリケーションは、現在の選択範囲に関する情報を取得し、設定し、変更されるタイミングを判断し、選択範囲の強調表示を表示または非表示にすることができます。

知っておくべきこと

テクノロジ

前提条件

  • C/C++
  • Windows ユーザー インターフェイス プログラミング

手順

現在の選択範囲の操作

リッチ エディット コントロールで現在の選択内容を確認するには、EM_EXGETSEL メッセージを使用します。 現在の選択範囲を設定するには、EM_EXSETSEL メッセージを使用します。 CHARRANGE 構造体は両方のメッセージで使用され、文字の範囲を指定します。 現在の選択内容に関する情報を取得するには、EM_SELECTIONTYPE メッセージを使用します。

アプリケーションは、EN_SELCHANGE 通知コードを処理することで、現在の選択が変更されたことを検出できます。 通知コードは、新しい選択に関する情報を含む SELCHANGE 構造体を指定します。 リッチ エディット コントロールは、EM_SETEVENTMASK メッセージを使用して有効にした場合にのみ、この通知コードを送信します。

既定では、リッチ エディット コントロールは、フォーカスを得たり失ったりするときに、選択の強調表示を表示したり非表示にしたりします。 選択範囲の強調表示は、EM_HIDESELECTION メッセージを使用していつでも表示または非表示にできます。 たとえば、アプリケーションはリッチ エディット コントロール内のテキストを検索する [検索] ダイアログ ボックスを提供する場合があります。 アプリケーションは、ダイアログ ボックスを閉じずに一致するテキストを選択する場合があり、その場合は、EM_HIDESELECTION メッセージを使用して選択範囲を強調表示する必要があります。

編集コントロールと同様に、フォーカスを失った際に、ES_NOHIDESEL ウィンドウ スタイルを指定すると、リッチ エディット コントロールで選択範囲の強調表示が非表示にならないようにすることができます。

EM_EXGETSELEM_EXSETSEL メッセージを使用する代わりにEM_GETSELEM_SETSEL エディット コントロール メッセージを使用すると現在の選択範囲を取得、設定できます。 EM_GETSEL メッセージは、2 つの 16 ビット文字インデックスを 32 ビットの戻り値にパックするため、最初の 64K 内の選択範囲にのみ機能します。 EM_LIMITTEXT または EM_EXLIMITTEXT メッセージを使用してこの制限を拡張しない限り、リッチエディット コントロールに 32,000 文字を超えるテキストが含まれることはありません。 テキストの最初の 64 KB を超える選択範囲の場合、EM_GETSEL は、–1 を返します。 このような場合でも、wParamlParam で返される値を使用して、選択範囲の開始文字と終了文字を検索できます。

リッチ エディット コントロールの使用

Windows コモン コントロールのデモ (CppWindowsCommonControls)