⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipcclient.cpp

📁 EVC编写的WINCE下进程通讯程序客户端
💻 CPP
字号:
// IPCClient.cpp : implementation file
//

#include "stdafx.h"
#include "IPC_MSGClient.h"
#include "IPCClient.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CIPCClient

CIPCClient::CIPCClient()
{
	m_ServerWinHwnd = 0;
	m_SessionHandle = 0;
	m_Active = false;
	//注册消息常量
	m_ServerDisconnectHwnd = RegisterWindowMessage(IPCServerDisconnecting);
	m_ConnectRequestHwnd = RegisterWindowMessage(IPCConnectRequest);
	m_ConnectResposeHwnd = RegisterWindowMessage(IPCConnectRespose);
	m_ClientDisconnectHwnd = RegisterWindowMessage(IPCClientDisconnecting);
}

CIPCClient::~CIPCClient()
{
}


BEGIN_MESSAGE_MAP(CIPCClient, CWnd)
	//{{AFX_MSG_MAP(CIPCClient)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CIPCClient message handlers


/*
*函数介绍:建立同服务器的连接
*入口参数:parentWnd 指定创建此类的窗口指针
*出口参数:无
返回值:   无
*/
void CIPCClient::Open(CWnd *parentWnd)
{
	if (!m_Active)
	{
		m_ParentWnd = parentWnd;
		//注册连接会话的消息标识符
		m_SessionHandle = RegisterWindowMessage(m_SessionName);
		::SendMessage(HWND_BROADCAST, m_ConnectRequestHwnd, WPARAM(m_hWnd), 
			LPARAM(m_SessionHandle));
	}
}


/*
*函数介绍:关闭同服务器的连接
*入口参数:parentWnd 指定创建此类的窗口指针
*出口参数:无
*返回值:  无
*/
void CIPCClient::Close()
{
	if (m_Active)
	{
		//广播消息,客户端断开
		::SendMessage(HWND_BROADCAST, m_ClientDisconnectHwnd,WPARAM(m_hWnd), 
			LPARAM(m_SessionHandle));
		m_Active = false;
	}
}

/*
*函数介绍:发送数据到服务器
*入口参数:MsgPointer: 发送的数据指针
		   ASize: 发送的数据的大小	
*出口参数:无
*返回值:  无
*/
void CIPCClient::SendMsg(LPVOID MsgPointer, DWORD ASize)
{
	COPYDATASTRUCT copyDataStruct;
	if (m_ServerWinHwnd != 0)
	{
		copyDataStruct.dwData = DWORD(m_hWnd);
		copyDataStruct.cbData = ASize;
		copyDataStruct.lpData = MsgPointer;
		//向服务器端窗口发送WM_COPYDATA消息
		::SendMessage(m_ServerWinHwnd, WM_COPYDATA, m_SessionHandle,
			LPARAM(&copyDataStruct));
	}
}

/*
*处理来自服务器端的消息
*/
LRESULT CIPCClient::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	// TODO: Add your specialized code here and/or call the base class
	LPVOID MsgPointer;
	DWORD  bufLen;
	//HWND   ServerHwnd;

	//根据消息种类分别执行
	//WM_CopyData 消息
	if (message == WM_COPYDATA)
	{
		//ServerHwnd = HWND(((PCOPYDATASTRUCT)lParam)->dwData);
		bufLen = ((PCOPYDATASTRUCT)lParam)->cbData;
		MsgPointer = ((PCOPYDATASTRUCT)lParam)->lpData;
		//
		m_ClientDataArrive(m_ParentWnd, MsgPointer, bufLen);
		//处理客户端接收数据事件
	}
	//连接响应消息
	else if (message == m_ConnectResposeHwnd)
	{
		if (!m_Active)
		{
			m_ServerWinHwnd = HWND(wParam);

			//连接响应事件
			m_ClientConnected(m_ParentWnd, m_ServerWinHwnd);
			m_Active = true;
		}
	}
	//服务器断开连接消息
	else if (message == m_ServerDisconnectHwnd)
	{
		if (m_Active)
		{	
			if (wParam = DWORD(m_ServerWinHwnd))
			{
				//触发断开事件
				m_ClientDisConnected(m_ParentWnd, m_ServerWinHwnd);
				m_ServerWinHwnd = 0;
				m_Active = false;
			}
		}
	}

	return CWnd::WindowProc(message, wParam, lParam);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -