描述:
我调用了一个DELPHI编写的OCX控件。该控件在DELPHI下调用一切正常。
现在需要在VC环境下调用此控件,此OCX内实现了一个回调事件,在监听的端口收到消息时触发。我已经在ClassWiazrd内添加了这个事件的消息和其中的要处理的代码,但是在同等条件下(跟DELPHI相比较),此事件在VC下却没有触发?请问会是什么原因呢?
BEGIN_EVENTSINK_MAP(CTTDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CTTDlg)
ON_EVENT(CTTDlg, IDC_SMSCLIENTX1, 209 /* OnReceiveInfo */, OnOnReceiveInfoSmsclientx1, VTS_PBSTR VTS_PBSTR VTS_PBSTR VTS_PBSTR VTS_PBSTR VTS_PBSTR VTS_PBSTR)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CTTDlg::OnOnReceiveInfoSmsclientx1(BSTR FAR* sTxCode, BSTR FAR* sMobileNum, BSTR FAR* sMsg, BSTR FAR* sMsgId, BSTR FAR* sInfoId, BSTR FAR* sInfoContent, BSTR FAR* sLinkID)
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_STATIC)->SetWindowText("收到消息喽");
}
解决方案1:
在GetDlgItem(IDC_STATIC)->SetWindowText("收到消息喽");
这里设置一个断点看看
如果没断下来的话去看http://support.microsoft.com/kb/q157437/
最好用别的方式来确定有没有收到消息比较好,比较设置断点等
用IDC_STATIC获得的窗口未必正确,因为Picture,GroupBox等等,ID都可以是IDC_STATIC,一般是获得tab顺序最前面的那个窗口的临时CWnd*指针的。你也可以将ID设置为其它表示如IDC_STATIC1等等
ON_EVENT这些就是了
你的控件是不是用了多线程?MFC不支持跨线程触发事件