Доброго времени суток всем знающим, ищущим, и просто праздношатающимся
Значится проблема: имеем некий COM объект, написанный на ATL, и представляющий собой обертку вокруг RichEdit. ну вот так примерно:
class ATL_NO_VTABLE CAnRichEditCtl :
public CComObjectRootEx<CComSingleThreadModel>,
public CComControl<CAnRichEditCtl>,
...
{
CContainedWindow m_ctlRichEdit;
CAnRichEditCtl() : m_ctlRichEdit(RICHEDIT_CLASS, this, 1)
{
...
}
...
}
И вот если его захостить в html страничке, все хорошо, но невозможно отловить нажатие BackSpace в нашем объекте.
Вот так например:
<html><body><script>
function fnDetectKeyInActiveX()
{
alert("Editor Down " + event.type +" : "+ event.keyCode );
}
</script>
<object id="AnRichEditObject" onkeydown="fnDetectKeyInActiveX();" style="LEFT: 0px; TOP: 0px" height="300" width="650"
classid="clsid:????????-????-????-????-????????????">
</object><br>
<object id="ListView" onkeydown="fnDetectKeyInActiveX();" style="LEFT: 0px; TOP: 0px" height="300" width="650"
classid="clsid:58DA8D8A-9D6A-101B-AFC0-4210102A8DA7">
</object><br>
<div>
<textarea height="300" width="650" onkeydown="fnDetectKeyInActiveX();"></textarea>
</div></body></html>
Что интересно, его также невозможно отловить и с других COM объектов, как например в приведенном в страничке.
А в html объекте textarea — всё ловится.
Собственно вопрос: как это побороть, или, если нельзя побороть, почему так сделано ?