https://blog.csdn.net/weixin_38452552/article/details/79415275看了这个博主的方法,这个时js调用,想请教各位,在MFC里这种方法是否可行,可行的话如何实现。
我的实现:
在QTActive中:
int FindDialog:: AttachEvent(const QString& eventName, IDispatch* dispFunc)
{
QMessageBox::information(NULL, "Title","[ActiveQtServerCallBack::AttachEvent]->eventName[" +eventName +"]");
if (NULL == dispFunc)
{
QMessageBox::information(NULL, "Title", "[ActiveQtServerCallBack::AttachEvent]->dispFunc is NULL!!!");
return -1;
}
QMessageBox::information(NULL, "Title", "3"); dispFunc->AddRef();
m_pDispatch = dispFunc;
// ui.btn_transmit->setEnabled(true);
// this->m_strCallBackContent = eventName;
// QMessageBox::information(NULL, "Title", "4"); return 0;
}
在MFC中:
这个时生成的类中方法:
long AttachEvent(LPCTSTR p_eventName, LPDISPATCH p_dispFunc(int&, int&, int &, CString &))
{
long result;
static BYTE parms[] = VTS_BSTR VTS_DISPATCH;
InvokeHelper(0x39, DISPATCH_METHOD, VT_I4, (void*)&result, parms, p_eventName, p_dispFunc);
return result;
}
调用:
void CMFCTestCOMDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
fdtest.AttachEvent(callbackContent, ActiveQtServerCallBackTrainsmitTest);
}
static LPDISPATCH ActiveQtServerCallBackTrainsmitTest(int &x, int &y, int &z, CString &strEvent)
{
CString str;
str.Format(_T("ActiveQtServerCallBackTrainsmitTest:\r\nx[%d]\r\ny[%d]\r\nz[%d]\r\nstrEvent[%s]"), x, y, z, strEvent);
AfxMessageBox(str);
return 0;
}
我的实现:
在QTActive中:
int FindDialog:: AttachEvent(const QString& eventName, IDispatch* dispFunc)
{
QMessageBox::information(NULL, "Title","[ActiveQtServerCallBack::AttachEvent]->eventName[" +eventName +"]");
if (NULL == dispFunc)
{
QMessageBox::information(NULL, "Title", "[ActiveQtServerCallBack::AttachEvent]->dispFunc is NULL!!!");
return -1;
}
QMessageBox::information(NULL, "Title", "3"); dispFunc->AddRef();
m_pDispatch = dispFunc;
// ui.btn_transmit->setEnabled(true);
// this->m_strCallBackContent = eventName;
// QMessageBox::information(NULL, "Title", "4"); return 0;
}
在MFC中:
这个时生成的类中方法:
long AttachEvent(LPCTSTR p_eventName, LPDISPATCH p_dispFunc(int&, int&, int &, CString &))
{
long result;
static BYTE parms[] = VTS_BSTR VTS_DISPATCH;
InvokeHelper(0x39, DISPATCH_METHOD, VT_I4, (void*)&result, parms, p_eventName, p_dispFunc);
return result;
}
调用:
void CMFCTestCOMDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
fdtest.AttachEvent(callbackContent, ActiveQtServerCallBackTrainsmitTest);
}
static LPDISPATCH ActiveQtServerCallBackTrainsmitTest(int &x, int &y, int &z, CString &strEvent)
{
CString str;
str.Format(_T("ActiveQtServerCallBackTrainsmitTest:\r\nx[%d]\r\ny[%d]\r\nz[%d]\r\nstrEvent[%s]"), x, y, z, strEvent);
AfxMessageBox(str);
return 0;
}
解决方案 »
- 在公网上如何做CS架构程序
- 怎么使文本控件显示聊天内容时发送方和接受方字体颜色不同
- 原来还可以输入这个符号啊
- 大家如果要派生这样一些类怎么做的???
- 得到IE地址栏内容的代码,为什么不好使?
- 菜鸟问题 第一次用ms studio 2005
- 请教如何编程实现Task Manager的Shut Down菜单中Ctrl + Restart的快速重启效果,来者必有分相送!
- 有SQL语句更改ACCESS数据表 一个字段的长度,为什么出错?idispach error #3092
- 求大家帮帮忙,编写线程。郁闷了。总是不成功。
- 求助MDI中,类似这种界面导航的工具条
- 找个大神帮忙做H5网页 有偿的
- 请教各位大佬一个WM_MOUSELEAVE触发问题
BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CContainerDlg)
ON_EVENT(CContainerDlg, IDC_CIRC2CTRL1, 1 /*
ClickIn */, OnClickInCirc2ctrl, VTS_I4 VTS_I4)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()BOOL CContainerDlg::OnClickInCirc2ctrl1(OLE_XPOS_PIXELS nX, OLE_YPOS_PIXELS nY)
{
// use nX and nY here
}