本人在做一个仪器操作软件的二次开发,但需要先把原来的软件功能实现。厂家提供一个demo,我依照demo来,创建一个对话框类CSettingDialog,包含二次开发包dll头文件,
在CSettingDialog.h的protected下:
afx_msg LRESULT DataReceived(WPARAM wParam, LPARAM lParam);//自定义消息响应函数 在CSettingDialog.cpp文件中:
BEGIN_MESSAGE_MAP(CSettingDialog, CDialog)
//{{AFX_MSG_MAP(CSettingDialog)
ON_MESSAGE(WM_MEAS_READY, DataReceived)//关联消息WM_MEAS_READY,这个在二次开发包dll文件中有定义
......
//}}AFX_MSG_MAP
END_MESSAGE_MAP()LRESULT CSettingDialog::DataReceived(WPARAM wParam, LPARAM lParam)
{
MessageBox("");
return LRESULT();在二次开发包dll文件中:
#define WM_MEAS_READY (WM_USER + 1)//自定义消息好像都是这么定义的,这里不能动在MainFrame.cpp中:
void CMainFrame::OnSetting()
{
CSettingDialog dialog13;
dialog13.DoModal();
}然后运行,每次从仪器通过USB传过来数据时,都会弹出MessageBox,也就是触发DataReceived函数。但是如果没有打开这个对话框,则无法响应函数。
现在我需要接收数据后把数据用图表形式呈现在主界面上,而且是动态的,每接收一次数据图表就变化一次。由于没有打开对话框就不响应DataReceived函数(我试过在View类里创建一个CSettingDialog对象但没有DoMoal,结果也不响应),所以我打算直接在View类里面弄这个消息响应。于是我把原来的消息响应删除掉,
在091209View.h的protected下:
afx_msg LRESULT ViewDataReceived(WPARAM wParam, LPARAM lParam);//自定义消息响应函数 在091209View.cpp文件中:
BEGIN_MESSAGE_MAP(CSettingDialog, CDialog)
//{{AFX_MSG_MAP(CSettingDialog)
ON_MESSAGE(WM_MEAS_READY, ViewDataReceived)//关联消息WM_MEAS_READY,这个在二次开发包dll文件中有定义
......
//}}AFX_MSG_MAP
END_MESSAGE_MAP()LRESULT CSettingDialog::ViewDataReceived(WPARAM wParam, LPARAM lParam)
{
MessageBox("");
return LRESULT()
然后运行,无论我怎么试,就是不弹出MessageBox("")。同样的方法,用在不同的类里,一个对话框类,一个View类,怎么就不行了呢?我该从哪里找原因,是View类的问题还是开发包的问题?厂家说用TChart来做图形显示的,但如果没接收数据用什么做都没用吧?请求高人指点,谢谢!
在CSettingDialog.h的protected下:
afx_msg LRESULT DataReceived(WPARAM wParam, LPARAM lParam);//自定义消息响应函数 在CSettingDialog.cpp文件中:
BEGIN_MESSAGE_MAP(CSettingDialog, CDialog)
//{{AFX_MSG_MAP(CSettingDialog)
ON_MESSAGE(WM_MEAS_READY, DataReceived)//关联消息WM_MEAS_READY,这个在二次开发包dll文件中有定义
......
//}}AFX_MSG_MAP
END_MESSAGE_MAP()LRESULT CSettingDialog::DataReceived(WPARAM wParam, LPARAM lParam)
{
MessageBox("");
return LRESULT();在二次开发包dll文件中:
#define WM_MEAS_READY (WM_USER + 1)//自定义消息好像都是这么定义的,这里不能动在MainFrame.cpp中:
void CMainFrame::OnSetting()
{
CSettingDialog dialog13;
dialog13.DoModal();
}然后运行,每次从仪器通过USB传过来数据时,都会弹出MessageBox,也就是触发DataReceived函数。但是如果没有打开这个对话框,则无法响应函数。
现在我需要接收数据后把数据用图表形式呈现在主界面上,而且是动态的,每接收一次数据图表就变化一次。由于没有打开对话框就不响应DataReceived函数(我试过在View类里创建一个CSettingDialog对象但没有DoMoal,结果也不响应),所以我打算直接在View类里面弄这个消息响应。于是我把原来的消息响应删除掉,
在091209View.h的protected下:
afx_msg LRESULT ViewDataReceived(WPARAM wParam, LPARAM lParam);//自定义消息响应函数 在091209View.cpp文件中:
BEGIN_MESSAGE_MAP(CSettingDialog, CDialog)
//{{AFX_MSG_MAP(CSettingDialog)
ON_MESSAGE(WM_MEAS_READY, ViewDataReceived)//关联消息WM_MEAS_READY,这个在二次开发包dll文件中有定义
......
//}}AFX_MSG_MAP
END_MESSAGE_MAP()LRESULT CSettingDialog::ViewDataReceived(WPARAM wParam, LPARAM lParam)
{
MessageBox("");
return LRESULT()
然后运行,无论我怎么试,就是不弹出MessageBox("")。同样的方法,用在不同的类里,一个对话框类,一个View类,怎么就不行了呢?我该从哪里找原因,是View类的问题还是开发包的问题?厂家说用TChart来做图形显示的,但如果没接收数据用什么做都没用吧?请求高人指点,谢谢!
解决方案 »
- 求高手啊, 真正的高手来啊, 懂Release版calloc问题的来。
- getchar()会使线程死锁么
- 调用IE显示本地网页弹出个安全警告,请问怎么解决?谢了
- 各位大虾出手相救了!!如何可以得到webbrowser控件的滚动条!!!!急
- 我的CTreeView怎么不显"+""-"
- 100分请高手,最小化对话框的消息在那里呢?
- 关于MapViewOfFile和OpenViewOfFile的问题,高手请入
- 如何做一个像计算器那样的按钮?
- 求身份证第18位的算法!!!
- 有英文版的OICQ吗?
- 菜鸟提问:关于校验和算法checksum中的datasize计算问题
- C++或MFC中怎样进行bit级操作
消息发给谁,当然由谁响应消息,要搞清楚你用的dll开发包通信的机制,WM_MEAS_READY消息是如何传递出来的,由哪个窗口负责接收这个消息。另外要保证你没有自定义消息的值也是wm_user+1
谢谢。我意思是在View类某个函数里写“CSettingDialog dialog13;”没有写“dialog13.DoModal();”,我希望在没有弹出dialog13的情况下仍然能在接收数据时触发DataReceived,实际上没有。
另外,必须由一个窗口来接收消息的吗?View和MainFrame一定不可以?我刚才试了下,用在MainFrame也不可以,不知道为什么。
#define WM_MEAS_READY (WM_USER + 1)
第二个是ON_MESSAGE(WM_MEAS_READY, DataReceived)所以,我只能知道它接收到WM_MEAS_READY这个消息就触发DataReceived函数,而不知道这个消息从哪里来,这个消息的类型是什么。我用CString的Format方法把WM_MEAS_READY转换成整型,值是1025。
请问有什么方法可以知道它从哪里来吗?来一次数据就触发一次,那消息是不是从仪器那里来的啊?我是菜鸟,对这个问题好茫然,谢谢!
你在include里面怎么操作的就全搬到view里面来啊