0

RichEditコントロールがあり、EM_AUTOURLDETECTWPARAMがTRUEに設定されたメッセージを送信すると、検出されたURLが適切に強調表示され、EN_LINK通知が送信されます。ただし、これは、コントロールに入力されたテキストに対してのみ行われます。SetWindowTextまたはを使用してコントロールにロードされたテキストに対してそれを行う方法が見つかりませんでしたEM_STREAMIN。助けてください!ありがとう

Upd: テストアプリケーションを最初から作成しましたが、そこで正常に動作します。問題は、コントロールをスーパークラス化したこと、つまり、新しいウィンドウクラスを作成し、元のクラスのウィンドウプロシージャを使用したことである可能性があると思います。代わりに、コントロールをサブクラス化してみます。

4

3 に答える 3

1

riched20 コントロールを含む基本的な WTL ダイアログ ベースのアプリを作成したところ、次のように正常に動作します。

CRichEditCtrl richedit = GetDlgItem(IDC_RICHEDIT);
richedit.SetAutoURLDetect(TRUE);
richedit.SetWindowText(_T("http://www.stackoverflow.com"));

ES_STREAM を使用しているにもかかわらず、同様のことを行う古い MFC コードがいくつかあり、それも問題なく動作します。

FWIW WTLCRichEditCtrlラッパーはかなり薄いです。 SetAutoURLDetect単にSendMessageそれを渡すことを呼び出しますEM_AUTOURLDETECT

FWIWに_RICHEDIT_VER設定してコンパイルしています。0x0200

于 2009-04-08T13:06:52.157 に答える
0

SetWindowTextとEM_STREAMINを使用してコントロールに追加しようとしているテキストの形式がわからない場合は、推測して、これがコントロールのテキストモードに関係している可能性があると言います。コントロールの内容を設定した後、EM_GETTEXTMODEメッセージを送信して、TM_PLAINTEXTビットが設定されているかどうかを確認してください。この場合は、EM_SETTEXTMODEメッセージに続いてEM_AUTOURLDETECTを送信してみてください。コードは次のようになります。

UINT textmode = (UINT)::SendMessage(handle_to_control, EM_GETTEXTMODE, 0, 0);
if(textmode & TM_PLAINTEXT) {
    textmode &= ~TM_PLAINTEXT;    // Clear the TM_PLAINTEXT bit
    textmode |= TM_RICHTEXT;      // Set the TM_RICHTEXT bit
    if(::SendMessage(handle_to_control, EM_SETTEXTMODE, textmode, 0) != 0) {
        // Failed to set the text mode
    }
}
::SendMessage(handle_to_control, EM_AUTOURLDETECT, TRUE, 0);
于 2009-01-25T21:27:57.790 に答える
0

再解析するには、テキストをコントロールに書き直す必要がある場合があります。

于 2009-04-08T04:32:48.443 に答える