自定义消息与进程间通信
窗口程序可以接收自定义的消息类型,前提是通信的进程声明了这种消息类型,声明的方法很简单,WM_USER加一个值就可以了,一般加的值从0x400开始,其他的值已经被系统使用了。
实现一个完整的自定义消息需要进行以下步骤:
1.声明自定义消息类型:
WM_UMSG+0x400
2.添加消息映射:
BEGIN_MESSAGE_MAP(CUserWMDlg,CDialog)
…
ON_MESSAGE(WM_UMSG,RevcMsg)
…
END_MESSAGE_MAP()
3.实现自定义响应函数:
VOID
CUserWMDlg::RecvMsg(WPARAM wParam,LPARAM lParam)
{
…
}
WM_COPYDATA与进程间通信
这种通信方式跟自定义消息类似,只不过它是系统定义的。由于使用SendMessage()函数在发送消息时的阻塞机制,传递的消息不宜过多。
SendMessage((HWND)hWnd,WM_COPYDATA,(WPARAM)wParam,(LPARAM)lParam);
第一个参数是接收消息的窗口句柄,第二个参数填上WM_COPYDATA,第三个参数是发送消息的窗口句柄,可以为空,第四个参数需要传递下面的结构体:
typedef struct tagCOPYDATASTRUCT{
ULONG_PTR dwData;// 自定义的数据,一般为0
DWORD cbData;// lpData指向的数据大小
PVOID lpData;// 指向数据的指针
}COPYDATASTRUCT,*PCOPYDATASTRUCT;
如果是MFC程序,直接在要进行通信的窗口中添加WM_COPYDATA消息,程序会自动生成WM_COPYDATA发送消息所需要的一切。