Как подключить слушатели событий мыши к встроенному nsIWebBrowser в C ++ - PullRequest
1 голос
/ 28 августа 2009

Я встроил nsIWebBrowser в свое приложение. Поскольку я просто генерирую HTML для него на лету, я использую OpenStream, AppendToStream и CloseStream для добавления контента. Что мне нужно, это добавить слушателей событий для перемещения мыши по веб-браузеру, а также щелчков мыши. Я прочитал документацию и перепробовал много разных вещей, но ничего, что я пробовал, не сработало. Например, приведенный ниже код может показаться правильным, но он ничего не делает:

    nsCOMPtr<nsIDOMWindow> domWindow;
    mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));

    if (!mEventTarget) {
    mEventTarget = do_QueryInterface(domWindow);

    if (mEventTarget)
        mEventTarget->AddEventListener(NS_LITERAL_STRING("mouseover"), (nsIDOMEventListener *)mEventListener, PR_FALSE);
}

Возможно, это не работает, потому что это выполняется во время инициализации, но до того, как какой-либо контент действительно добавляется. Однако, если я добавлю его во время AppendStream или CloseStream, это приведет к ошибкам.

Пожалуйста, скажите мне простой способ сделать это.

1 Ответ

2 голосов
/ 28 августа 2009

Ну, вот ответ:

nsCOMPtr<nsIDOMEventTarget> cpEventTarget;
nsCOMPtr<nsIDOMWindow> cpDomWin;
m_pWebBrowser->GetContentDOMWindow (getter_AddRefs(cpDomWin));
nsCOMPtr<nsIDOMWindow2> cpDomWin2 (do_QueryInterface (cpDomWin));
cpDomWin2->GetWindowRoot(getter_AddRefs(cpEventTarget));

rv = cpEventTarget->AddEventListener(NS_LITERAL_STRING("mousedown"),
                m_pBrowserImpl, PR_FALSE); 
...