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);


Anmelden zum Antworten