問題背景: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()是同步函數,因此此時仍是至關於子線程給外部拋事件,那確定就成功不了。