2011-06-01 133 views
1

我在對話框中有一個RichEdit控件。 RichEdit控件顯示RTF文本。 EM_AUTOURLDETECT導致RichEdit控件正確格式化並識別超鏈接。當鼠標懸停在鏈接上時,指針變成一隻手,但是一旦鏈接被點擊,瀏覽器就不會啓動。RichEdit的EM_AUTOURLDETECT消息識別鏈接,但我無法點擊它

我是否缺少某種事件處理程序代碼?

case WM_INITDIALOG: 
{ 
    // Create Richedit 
    HWND hwndRE = CreateWindowA("RichEdit20A", "", WS_CHILD | WS_BORDER | WS_VSCROLL | ES_READONLY | ES_MULTILINE, 10, 10, 480, 220, hDlgWnd, 0, hInst, 0); 

    SendMessage(hwndRE ,EM_AUTOURLDETECT,(WPARAM)TRUE,(LPARAM)0); 
    //SendMessage(hwndRE ,EM_SETEVENTMASK, 1, ENM_LINK | ENM_CHANGE); 

    ShowWindow(hwndRE, SW_SHOWNORMAL); 
    SETTEXTEX SetTextEx; 
    char* aboutdata = "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Verdana;}}\\viewkind4\\uc1\\pard\\qc\\b\\f0\\fs20 www.whateverdomain.com} "); 
    SendMessage(hwndRE, EM_SETTEXTEX,(WPARAM)&SetTextEx, (LPARAM)(LPCTSTR)aboutdata); 
    return TRUE; 
} 

回答

3

你可以嘗試這樣的事情:

case WM_NOTIFY: 
    switch (((LPNMHDR)lParam)->code) 
    { 
     case EN_LINK: 
      ENLINK * enLinkInfo = (ENLINK *)lParam; 

      if (enLinkInfo->msg == WM_LBUTTONUP) 
      { 
       // code which gets clicked URL using enLinkInfo->chrg and saves it in 
       // "urlString" 

       ShellExecute(NULL, "open", urlString, NULL, NULL, SW_SHOWNORMAL); 
      } 
      break; 

     .... // More cases on WM_NOTIFY switch. 
    } 
    break; 

基本上,當WM_NOTIFY代碼EN_LINK,你得到的點擊網址並使用ShellExecute啓動它。

+0

我設置了:SendMessage(hwndRE,EM_SETEVENTMASK,0,ENM_LINK);這使得能夠發送EN_LINK消息。但是現在,當我將鼠標懸停在鏈接上(甚至不必點擊),瀏覽器就會打開網站?而且你盤旋的時間越長,它打開的網站實例就越多...... – 2011-06-01 15:55:46

+0

EM_AUTOURLDETECT會自動修改豐富的編輯控件,以便它可以發送EN_LINK通知。您是否嘗試調試代碼以查看會發生什麼?您的對話框是否收到來自富編輯控件的任何通知? – 2011-06-01 15:56:09

+0

對不起,如果這個雙重職位,我正在編輯,而你打字。我設置了:SendMessage(hwndRE,EM_SETEVENTMASK,0,ENM_LINK);這使得能夠發送EN_LINK消息。但是現在,當我將鼠標懸停在鏈接上(甚至不必點擊),瀏覽器就會打開網站?而且你盤旋的時間越長,它打開的網站越多... – 2011-06-01 15:57:34