IWEBBROWSER2 und die Eingabetaste
-
Hallo,
ich habe einen ActiveX Webbrowser in meinem MFC Dialog implementiert.
Soweit alles ok, jedoch wenn ich ein Login in Javascript eingebe dann muss ich den Login Button drücken weil die Return Taste (Enter) nicht funktioniert.
In einem normalen Windows iExplorer Fenster würde sie funktionieren.Kennt jemand das Problem und hat eine Lösung?
Grüße
TheNoName
-
Hallo,
versuch mal folgendes in PreTranslateMessage():
if (pMsg->message == WM_KEYDOWN) { IOleInPlaceActiveObject* pIOIPAO = NULL; LPDISPATCH lpDispatch = m_Browser.GetApplication(); lpDispatch->QueryInterface(IID_IOleInPlaceActiveObject, (void**)&pIOIPAO); lpDispatch->Release(); HRESULT hr = pIOIPAO->TranslateAccelerator(pMsg); pIOIPAO->Release(); } // ...
Gruss
foo
-
Hi,
werd ich heute abend versuchen.
Ich versteh nur nicht so ganz was das macht.
Es snifft nach einer windows key down message und schickt sich selbst diese Meldung?Grüße
TheNoName
-
Nein. Der snifft nichts, sondern erbietet eine WM_KEYDOWN Nachricht dem ActiveX Control zur Behandlung an.
Lies:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms693360(v=vs.85).aspxWichtig ist, dass man bei Rückgabe von S_OK auch mit return TRUE aus PreTranslateMesaage rausgeht.
Das ist hier nicht in em Code zu sehen!
-
Hmmm, das Pretranslate ist keine Unterfunktion des Webbrowser2 bei mir.
Wozu gehört das?
-
Ok, hab nun den Maindialog über den Objectwizard das Pretranslate hinzugefügt.
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) { if(lastfrontdialog==CHAT_DIALOG) { if (pMsg->message == WM_KEYDOWN) { IOleInPlaceActiveObject* pIOIPAO = NULL; LPDISPATCH lpDispatch = m_webbrowserchat.get_Application(); if(lpDispatch) { lpDispatch->QueryInterface(IID_IOleInPlaceActiveObject, (void**)&pIOIPAO); lpDispatch->Release(); HRESULT hr = pIOIPAO->TranslateAccelerator(pMsg); if(pIOIPAO != NULL){pIOIPAO->Release();} if(hr==S_OK){return TRUE;} } } } return CDialog::PreTranslateMessage(pMsg); }
Ist das dann so korrekt?
hr ist immer FALSE
-
FALSE == 0 == S_OK
-
Sorry, meinte S_FALSE.
-
Soso.
Und das ist schlimm weil .... ?
-
Weil ich gerne meine return Taste im Webbrowser2 verwenden will.
Alle anderen Tasten funktionieren.
Nur wenn ich eine Java Chatprogramm Eingabezeile mit Return abschliesse dann gelangt der Return nicht ans Java wie es unter einem normalen IE Webbrowser der Fall ist.
Dazu gibt es viele Google Threads die dieses Problem bestätigen, auch in HTML Edit Boxen aber keine Lösung.
-
Meinst Du wirklich Java oder Javascript?
Bei HTML/CSS sollte es so wie oben beschrieben funktionieren.Wie das mit einem Java-Applet im Browser ausschaut kann ich Dir nicht sagen. Da hast Du noch die Java VM zwischen den Welten.
Gruß
foo
-
Hast Du mal nachgesehen wer die Eingabetaste bearbeitet?
Ist es der Dialoghandler?
Wird PreTranslateMessage überhaupt angelaufen?
-
Es ist ein vorkompiliertes Java Programm mit .js Endung?
k.a. wie man das bezeichnen kann, liegt jedenfalls auf meinem Apache Server und ist als Vollbild im iWebbrowser2 engebettet. Während ein iExplorer das Return als Eingabe erkennt und die Chatnachricht sendet ist im iWebbrowser2 keine ReaktionDas CDialog Prestranslate funktioniert, ich kann es debuggen und wie schon geschrieben kommt leider nur ein S_FALSE zurück.
Was ich nicht verstehe ist der Unterschied zwischen dem Browser und dem eingebetteten Browser.
HTML und CSS hat schon vorher mit return funktioniert, da hab ich jetzt nochmal nachgecheckt gegen meine vorige Aussage.