1

私は CRichEditCtrl を使用してコンピューター言語を編集しています。それを変更するたびに、現在のテキスト行で SetSelectionCharFormat を呼び出して (LineFromChar(-1) で報告されているように)、構文を強調表示しています。(例: コメントは緑色、セクション見出しは大きなフォント、コンパイル エラーは赤色など) この言語には、1 行に /* を入力すると次の行の一部になる C コメントなどの複数行の機能がないことに注意してください。コメントも。特定の文字の変更については、現在の行の色を変更するだけです。

それはすべてうまくいっているように見えます。

ただし、いくつかの奇妙な問題があります。1 つは、別の場所から複数行のテキストを選択して貼り付けた場合です。私の OnUpdate() が呼び出されますが、単純に、再フォーマットが必要になる可能性のある唯一の行は、LineFromChar() によって返される行であると想定しています。ユーザーが 1 文字ずつ入力している場合はこれで十分ですが、複数行の貼り付けを受け取った後、プログラムは貼り付けられたテキストの最後の行のみを再フォーマットすることを意味します。 挿入の開始位置をどのように知ることができますか?

4

1 に答える 1

1

OnUpdate は、貼り付け操作内で呼び出されます。

RTF コントロールをサブクラス化し、WM_PASTE メッセージをインターセプトできるようにする必要があります。WM_PASTE が内部で使用されていない場合は、EM_PASTESPECIAL を使用できる可能性があります。このメッセージさえ送信されない場合は、貼り付け操作を引き起こす Ctrl+V をインターセプトする必要があります。

貼り付け操作の開始位置を決定できます。

Spy++ は、RTF コントロールのメッセージ フローを判断するのに役立つ場合があります。

于 2014-01-05T20:57:34.650 に答える