龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC6.0下利用消息实现内部进程通讯(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
CString str="Receiver"; CWnd *pWnd=CWnd::FindWindow(NULL,str); if(pWnd) pWnd-〉SendMessage(WM_COMM,0,1); } OnSendComm3() { CString str="Receiver"; CWnd *pWnd=CWnd::FindWindow(NULL,str); if(pWnd)
 CString str="Receiver";
 CWnd *pWnd=CWnd::FindWindow(NULL,str);
 if(pWnd)
  pWnd-〉SendMessage(WM_COMM,0,1);
}
OnSendComm3()
{
 CString str="Receiver";
 CWnd *pWnd=CWnd::FindWindow(NULL,str);
 if(pWnd)
  pWnd-〉SendMessage(WM_COMM,1,0);
}

  这里,WM_COMM是自定义消息,用于在主控程序和底层通信程序之间进行联系,为了能够使用该消息,必须首先添加预定义语句:

#define WM_COMM WM_USER + 100 


  上述几个函数的结构没有什么区别,首先通过FindWindow()返回由str变量指定窗口标题的应用程序主窗口句柄并将其保存到pWnd。然后再通过该句柄调用SendMessage()函数并发送刚才定义的WM_COMM消息及其消息参数。如果函数被正确执行,底层程序将收到来发自主控程序的WM_COMM消息并可在消息响应函数中完成对消息参数的判断处理以及进一步的操作。

 底层工作程序的实现

  最后,来介绍一下底层工作程序的实现过程。底层工作程序也是一个单文档应用程序(当然,对于多文档应用程序也是一样)。由于主控程序是通过对应用程序主窗口标题的捕获来得到底层程序主窗口句柄的。因此需要在底层工作程序应用类的初始化应用函数InitInstance()中添加(在函数末尾添加)下面语句:

m_pMainWnd-〉SetWindowText("Receiver");

  以设置底层工作程序的窗口标题。同时还要在主框架类的头文件MainFrm.h中添加与主控程序一样的自定义消息定义:

#define WM_COMM WM_USER+100

  由于底层程序需要接收并响应主控程序发出的通知消息,因此还要在底层工作程序中添加对自定义消息WM_COMM的响应处理:

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code !
ON_WM_CREATE()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_COMM,OnSendMsg)
END_MESSAGE_MAP()
……
void CMainFrame::OnSendMsg(WPARAM wParam, LPARAM lParam)
{
 if(wParam==0 && lParam==0)
  AfxMessageBox("主控程序发送命令一!");
 if(wParam==0 && lParam==1)
  AfxMessageBox("主控程序发送命令二!");
 if(wParam==1 && lParam==0)
  AfxMessageBox("主控程序发送命令三!");
}

  此后就可以通过辨别消息的两个消息参数来区分主控程序发送的是哪一个命令从而可以执行相应的操作。执行主控程序和底层工作程序由于本程序采用的是SendMessage()所以当主控程序发送消息给底层工作程序时,底层工作程序弹出响应的模式对话框,在没有关闭对话框前此消息未处理完,SendMessage()也就没有执行完,所以主控程序呈阻塞状态,如改用PoseMessage()则不会发生阻塞,具体选用哪个函数还应根据实际要求灵活掌握。

  结论:

  通过上面的实例可以看出利用消息进行进程间通信不失为一种便捷的方法,进程间的数据交换量不大却能完成相当的功能,上下层次有着明显的接口,上层和底层只通过这个接口进行通讯,因此只要对上下层程序制定好规范详尽的协议便可编制出协调性很好的软件控制系统。

精彩图集

赞助商链接