Съобщението EM_AUTOURLDETECT на RichEdit разпознава връзката, но не мога да щракна върху нея

Имам контрола RichEdit в диалогов прозорец. Контролата RichEdit показва RTF текст. EM_AUTOURLDETECT кара контролата RichEdit да форматира правилно и да разпознае хипервръзката. Когато мишката се задържи над връзката, показалецът се променя на ръка, но браузърът не се стартира след щракване върху връзката.

Липсва ли ми някакъв код за обработка на събития?

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

person Josh Bond    schedule 01.06.2011    source източник


Отговори (2)


Можете да опитате нещо подобно:

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, получавате кликнатия URL адрес и го стартирате с помощта на ShellExecute.

person cosmin    schedule 01.06.2011
comment
Зададох: SendMessage(hwndRE ,EM_SETEVENTMASK, 0, ENM_LINK); Това даде възможност за изпращане на EN_LINK съобщения. Но сега, когато задържа курсора на мишката върху връзката (дори не трябва да кликвам), браузърът се отваря с уебсайта? И колкото по-дълго задържате мишката, толкова повече екземпляри на уебсайта се отварят... - person Josh Bond; 01.06.2011
comment
EM_AUTOURLDETECT автоматично променя контролата за обогатено редактиране, така че да може да изпраща EN_LINK известия. Опитахте ли да отстраните грешки в кода, за да видите какво ще се случи? Вашият диалогов прозорец получава ли някакво известие от контролата за богато редактиране? - person cosmin; 01.06.2011
comment
Съжалявам, ако това е двойно публикуване, редактирах, докато вие пишете. Зададох: SendMessage(hwndRE ,EM_SETEVENTMASK, 0, ENM_LINK); Това даде възможност за изпращане на EN_LINK съобщения. Но сега, когато задържа курсора на мишката върху връзката (дори не трябва да кликвам), браузърът се отваря с уебсайта? И колкото по-дълго задържате мишката, толкова повече екземпляри на уебсайта се отварят... - person Josh Bond; 01.06.2011
comment
Трябва да проверите елемента msg от структурата ENLINK. Редактирах отговора си. - person cosmin; 01.06.2011
comment
Да, EN_LINK изпраща различни кодове за уведомяване, единият се нарича WM_LBUTTONUP. Трябва да задам това като условие за стартиране на изпълнението на обвивката. Ще работи върху това. --РЕДАКТИРАНЕ, сега виждам отговора ви, съжалявам. - person Josh Bond; 01.06.2011

Разгледайте EN_LINK:

http://msdn.microsoft.com/en-us/library/bb787970(VS.85).aspx

person PhilMY    schedule 01.06.2011
comment
Не съм сигурен как да внедря EN_LINK с моя код по-горе и как и двете взаимодействат с WM_NOTIFY. Затова питам тук... - person Josh Bond; 01.06.2011