在ActiveX控件中使用多线程后Fire事件的问题 由于种种原因,在控件中使用了多线程但是当使用子线程Fire事件时遇到了问题.如果控件容器(VB)处理了该事件那么必然会unhandle,而不处理或者在接口调用的地方直接返回事件则没有问题.那么问题是,当我不得不在子线程中触发事件的话,应该如何处理??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1. Marshall隐藏接口,在接口中fire事件2. 向控件的窗口发消息,在消息处理中fire事件 我也试过向窗口投递消息来解决,但是问题每次通过AfxGetMainWnd()->GetSaveHwnd()得出的句柄都是空,所以postmessage都无法收到处理.这个窗口问题又如何解决呢? ATL: 要是用Marshal的话简单就简单一点,增加一个接口(A),并在接口里面调用控件的fire event,然后marshal到一个IStream里,做为参数传递给子线程就可以了,子线程收到事件调用A的方法就可以正常fire event了;如果是要用事件,又没有窗口的话,就自己定义一个窗口类的友元,将container设为控件,并将该窗口类的hwnd传给子线程,子线程收到事件,就给这个窗口类发消息,窗口类再个别处理fire event就ok了MFC: 直接对控件postmessage就可以了 我在ActiveX control test container 测试都可以pCtrl->Fire();pCtrl->Postmessage();听说在IE中,前者不行,不知道是不是 http://support.microsoft.com/kb/q280512/#appliesto看看这篇文章,你就知道怎么做了。记得,在线程中要调用 HRESULT hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED);。::CoUninitialize (); 大家是如何解决跨网段远程调试的问题的 请问做EVC的大侠,怎么样控制界面的象素点 散分了! 线程函数是不是必须为全局型的线程函数——————? 在线疾呼:为什么我的HOOK程序没有捕捉到SETCURSOR的信息?? 请问在函数AfxSocketInit()中如何从1。1 升级到2。0 谁知道金山词霸的这种取词的窗体是怎么弄出来的? (const _variant_t &)这个是什么意思? 求兼职工作(人在南京,精VC,了解VB、PB) 怎样把两个8 bit的16进制数据转成一个16bit的十进制数据? 动态改变工具栏上某个按钮的表面颜色 如何删除已添加的对话框资源和其类文件等?
2. 向控件的窗口发消息,在消息处理中fire事件
MFC: 直接对控件postmessage就可以了
pCtrl->Fire();
pCtrl->Postmessage();听说在IE中,前者不行,不知道是不是
看看这篇文章,你就知道怎么做了。
记得,在线程中要调用 HRESULT hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED);。
::CoUninitialize ();