问题背景:javascript
MFC开发ocx控件,主窗口就是ctrl类,主窗口类中调度接口和事件映射添加,执行OK,外部html容器中接收事件成功,以下:html
ctrl.h中声明事件映射函数java
void EVTPENSIGNMSG(SHORT code, LPCTSTR result)
{
FireEvent(eventidEVTPENSIGNMSG, EVENT_PARAM(VTS_I2 VTS_BSTR), code, result);
}函数
ctrl.cpp中调用事件映射函数spa
int nTmp = 1;
CString strTmp= "completeSign";
EVTPENSIGNMSG(nTmp,strTmp);线程
<!--html中接收控件事件-->
<script language=javascript for=amPenSigner event=EVTPENSIGNMSG(code,result)>
alert(code);
alert(result);
</script>code
可是我再ctrl主窗口类中建立一个子线程,而后在子线程函数中调用事件映射函数,外部html容器就收不到事件了,怎么办?htm
这是由于ocx控件只能主窗口给外部容器发事件,因此在子线程中应该先将消息发到主窗口,而后主窗口去发事件。接口
问题解决:事件
可是子线程给主窗口发送消息,还有个坑,就是要使用PoseMessage()函数。
用SendMessage()函数的话,就会显示一切正常,甚至事件映射函数执行成功,可是外部容器就是接受不到事件,这是由于SendMessage()是同步函数,因此此时仍是至关于子线程给外部抛事件,那确定就成功不了。