RichEdit... Problem mit EN_LINK (URL anklickbar machen im RichEdit)
-
Hallo. ich wollte progrmmieren, dass wenn im RichEdit eine URL auftaucht, man sie auch gleich anklicken kann. Hier mal meine codeausschnitte:
... // DLL laden HINSTANCE hRichEd20 = LoadLibrary("RICHED20.DLL"); ... ENLINK *penlk; switch (message) { ..... ... // RichEdit erstellen pNewWindow->hRichEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "RICHEDIT", "", WS_BORDER | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VISIBLE | WS_CHILD, 0, 0, 0, 0, hWnd, (HMENU)IDC_RICHEDIT, hInst, NULL); // AUTOURL Erkennung einstellen SendMessage(pNewWindow->hRichEdit, EM_AUTOURLDETECT, (WPARAM)true, (LPARAM)0l); ... ... // EIGENTLICHER CODE ZUM LINK ABFRAGEN!! case WM_NOTIFY: { int i = 0; if(wParam == (WPARAM)IDC_RICHEDIT) { NMHDR *lpN = (LPNMHDR)lParam; switch(lpN->code) { case EN_LINK: { penlk = (ENLINK *)lParam; if(penlk->msg == WM_LBUTTONDOWN) { char szURL[MAX_PATH]; HWND hCurrentWnd = (HWND)SendMessage(hWndFrame, WM_MDIGETACTIVE, 0, 0); CHANNEL_WINDOW_DATA *pData = (CHANNEL_WINDOW_DATA *)GetWindowLongPtr(hCurrentWnd, GWLP_USERDATA); SendMessage(pData->hRichEdit, EM_EXSETSEL, 0, (LPARAM)(&(penlk->chrg))); SendMessage(pData->hRichEdit, EM_GETSELTEXT, 0, (LPARAM)szURL); ShellExecute(hMainWnd, "open", szURL, NULL, NULL, SW_SHOWNORMAL); } break; } break; } } break; } ...
so... ich habs mehr oder weniger nach einem tutorial geschrieben aber es fuktioniert nicht. die links werden zwar AUTOMATISCH blau und unterstricken geschrieben... aber wenn man draufklickt KOMMT KEINE WM_NOTIFY AN... wird also garnicht erst aufgerufen ...... was ist da los??
-
hat sisch erledigt........ ich musste dem richedit einfach noch ein flag zuweisen.
-
Und welches?
-
und zwat musst ich nch folgendes machen:
SendMessage(pNewWindow->hRichEdit, EM_SETEVENTMASK, (WPARAM)0l , (LPARAM)ENM_LINK | ENM_MOUSEEVENTS);