網址,鼠標點擊我添加了豐富的只讀編輯2.0控制,以我的對話框如何實現在豐富的編輯控制
在(代碼是用C窗戶API,通過使用功能DialogBox創建對話框)對話框回調,在WM_INITDIALOG,我添加以下代碼,使URL檢測,也使ENM_LINK被髮送到父對話,而不是豐富的編輯控件本身的事件:
LRESULT mask = SendMessage(hWndText, EM_GETEVENTMASK, 0, 0); //hWndText is rich edit control
SendMessage(hWndText, EM_SETEVENTMASK, 0, mask | ENM_LINK);
::SendMessage(hWndText, EM_AUTOURLDETECT, TRUE, NULL);
我有一個小麻煩啓用對話框初始啓動時的URL檢測(這似乎是一個已知問題或行爲,因爲富編輯控件只會啓用修改後的文本的網址檢測)。不過,我通過在每個WM_PAINT事件上再次設置對話框文本來解決此問題。
該代碼一般工作。我也實施了下面的代碼在瀏覽器中啓動URL當鼠標懸停在鏈接:
case WM_NOTIFY:
plink = (ENLINK *) lParam;
switch(LOWORD(wParam))
{
case IDC_DISPLAY_TEXT_2: //this is ID for my rich edit control
szURL =m_strDisplay.Mid(plink->chrg.cpMin, plink->chrg.cpMax - plink->chrg.cpMin);
LaunchURL(szURL); //function to launch the url with default browser
break;
default:
break;
}
看來,我會每次都獲得WM_NOTIFY事件,當我徘徊在鼠標的URL。但是,當我點擊它時,我總是得到與鼠標懸停在同一事件。
根據ENLINK的結構,我應該在NMHDR結構中得到更詳細的NM事件,但是plink-> nmhdr.code始終爲1803,甚至不是NM_HOVER(其定義值爲(NM_FIRST-13)和NM_FIRST是(0U-0U),所以我的64位機器上的NM_HOVER值是4294967283)。我知道我在這裏失去了一些東西。有人可以在這裏點亮一些燈嗎?如何獲得豐富的編輯控件的鼠標點擊事件?
另請參閱[在RichEdit中檢測URL的檢測](http://stackoverflow.com/q/2480173/850848)。 – 2016-01-16 08:44:05