程序布置如下:有两个类,一个类派A生于对话框,另一个类B手动添加。B类的作用是向外设发送和接受信息,B类接收信息是通过消息映射(不是我要问的消息映射)。程序本设想:当B类接收一个信息后,B类发出一个PostMessage命令,同时也发送出刚接收的数据,然后想在A类的程序中增加相应的处理函数,实现对接收数据的处理。
程序如下:
在A类的.h文件中,添加
afx_msg LRESULT ON_BCAN_Receive(WPARAM iParam1, LPARAM iParam2);
在A类的.cpp文件中添加了
ON_MESSAGE(WM_BCAN_ONReceive, ON_BCAN_Receive) // 在MESSAGE_MAP()中
和消息响应函数
LRESULT CSMKTESTERView::ON_BCAN_Receive(WPARAM wParam, LPARAM lParam)
{
MessageBox(_T("WM OK"));
return 0;}在B类的.cpp程序中,添加了:
PostMessage(WM_BCAN_ONReceive,0,0); //如果该条命令添加在A类的.cpp文件中,消息映射可以运作。补充:使用的开发工具为vs2008
请问达人,不能实现消息传递的问题在哪里?
谢谢!
程序如下:
在A类的.h文件中,添加
afx_msg LRESULT ON_BCAN_Receive(WPARAM iParam1, LPARAM iParam2);
在A类的.cpp文件中添加了
ON_MESSAGE(WM_BCAN_ONReceive, ON_BCAN_Receive) // 在MESSAGE_MAP()中
和消息响应函数
LRESULT CSMKTESTERView::ON_BCAN_Receive(WPARAM wParam, LPARAM lParam)
{
MessageBox(_T("WM OK"));
return 0;}在B类的.cpp程序中,添加了:
PostMessage(WM_BCAN_ONReceive,0,0); //如果该条命令添加在A类的.cpp文件中,消息映射可以运作。补充:使用的开发工具为vs2008
请问达人,不能实现消息传递的问题在哪里?
谢谢!
解决方案 »
- 交换机远程管理网管原理
- 关于mschart的散点排列问题
- 如何读取USB的数据
- 哪位兄弟知道如何在单文档中显示多幅位图啊?
- 在网页上使用了一个cab包的控件,无法显示
- 我想在listview中加入combox支持,不知道该怎么实现? 不够再加!来者有分!
- 100分寻找控件在窗体中最大最小化时变化的类或其他方法~
- 关于window下光驱锁,编程问题!高手请进!
- 如何知道一个目录中有多少个文件和子目录??
- 在VC 论坛第一次提问,用VC 配置DB2 的客户端, 如IP,端口号等, 我现在利用原来程序编译正确, build 时报dbcat.obj : error LNK2001: unresolved external
- VC线程问题
- 高人求救:静态成员函数内部调用回调函数
可以传入a的指针
HWND hWnd, // handle of destination window
UINT Msg, // message to post
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
你要发消息给A类对应的窗口,需要指定A的窗口句柄
用API函数PostMessage();第一个参数指定为A窗口的HWND窗口句柄
你可以考虑在B类中定义一个成员函数(变量),将A的句柄传进去
如果A类是主窗口,也可以AfxGetMainWnd()->m_hWnd获得A的窗口句柄
构造函数参数传递
首先创建A A a;
然后创建B B b(&a) //构造参数传递,B中保存A对象指针,这是最常用的
能否在详细一些。 B b(&a)是什么意思?
我确实要在A类中创建 B b;这样一个对象。
你直接在B中定义一个public类型的句柄参数HWND HWND_A;
将A的句柄直接赋值给它
B对象.HWND_A = m_hWnd;
#include "A.h"class B{
B(); //这是默认构造函数
B(A *pa); //带参数构造函数
~B(); //析构函数
}
B(A *pa); //带参数构造函数
这样操作的话,是不是逻辑混乱了。
报错如下:
error C2660: 'CWnd::PostMessageW' : function does not take 4 arguments
是什么原因?
BOOL PostMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 )
你这个是CWnd::PostMessage
BOOL PostMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );现在要用的是系统的API
::PostMessage
还可以afxGetApp()->GetMainWind()...