代码之家  ›  专栏  ›  技术社区  ›  Alex Jenter

如何在richedit 2.0中自动检测url?

  •  0
  • Alex Jenter  · 技术社区  · 16 年前

    当我们有一个richedit控件并将其发送给 EM_AUTOURLDETECT wparam设置为true的消息,它很好地高亮显示检测到的url并发送 EN_LINK 通知。 但它只对输入到控件中的文本执行此操作。对于加载到控件中的文本,我还没有找到方法 SetWindowText EM_STREAMIN . 请帮忙!谢谢

    Upd: 我从头开始创建了一个测试应用程序,它在那里工作得很好。我认为问题可能是我已经超类了控件,也就是说,创建了一个新的窗口类,只使用了原始类的窗口过程。我将尝试将控件子类化。

    3 回复  |  直到 16 年前
        1
  •  1
  •   Rob    16 年前

    我刚刚开发了一个基本的基于wtl对话框的应用程序,其中包含一个riched20控件,下面的操作很好:

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

    我有一些老的mfc代码,做了一些类似的事情,虽然与es_流,它也可以工作。

    WTL CRichEditCtrl 包装纸很薄。 SetAutoURLDetect 简单呼叫 SendMessage 通过它 EM_AUTOURLDETECT .

    我正在编译 _RICHEDIT_VER 设置为 0x0200 FWW。

        2
  •  0
  •   Kevin Loney    16 年前

    在不知道您试图用setwindowtext和em_streamin添加到控件的文本格式的情况下,我将猜测并说这可能与控件的文本模式有关。设置控件内容后,尝试发送 EM_GETTEXTMODE 消息并查看是否设置了TM U明文位。如果是这样,请尝试发送 EM_SETTEXTMODE 消息后跟em_autourldetest。您的代码应该如下所示:

    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);
    
        3
  •  0
  •   veefu    16 年前

    您可能只需将文本重写到控件,就可以重新解析它。