?? ipcclient.cpp
字號(hào):
// IPCClient.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "IPCClient.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CIPCClient
/*
*構(gòu)造函數(shù)
*/
CIPCClient::CIPCClient()
{
m_ServerWinHwnd = 0;
m_SessionHandle = 0;
m_Active = false;
//注冊(cè)消息常量
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
/*
*函數(shù)介紹:建立同服務(wù)器的連接
*入口參數(shù):parentWnd指定創(chuàng)建此類的窗口指針
*出口參數(shù):(無(wú))
*返回值:(無(wú))
*/
void CIPCClient::Open(CWnd *parentWnd)
{
if (!m_Active)
{
m_ParentWnd = parentWnd;
//注冊(cè)連接會(huì)話的消息標(biāo)識(shí)符
m_SessionHandle = RegisterWindowMessage(m_SessionName);
::SendMessage(HWND_BROADCAST, m_ConnectRequestHwnd, WPARAM(m_hWnd), LPARAM(m_SessionHandle));
}
}
/*
*函數(shù)介紹:關(guān)閉同服務(wù)器的連接
*入口參數(shù):parentWnd指定創(chuàng)建此類的窗口指針
*出口參數(shù):(無(wú))
*返回值:(無(wú))
*/
void CIPCClient::Close()
{
if (m_Active)
{
//廣播消息,客戶端斷開
::SendMessage(HWND_BROADCAST, m_ClientDisconnectHwnd, WPARAM(m_hWnd), LPARAM(m_SessionHandle));
m_Active = false;
}
}
/*
*函數(shù)介紹:發(fā)送數(shù)據(jù)到服務(wù)器
*入口參數(shù):MsgPointer : 發(fā)送的數(shù)據(jù)指針
ASize : 發(fā)送的數(shù)據(jù)大小
*出口參數(shù):(無(wú))
*返回值:(無(wú))
*/
void CIPCClient::SendMsg(LPVOID MsgPointer, DWORD ASize)
{
COPYDATASTRUCT copyDataStruct;
if (m_ServerWinHwnd != 0)
{
copyDataStruct.dwData = DWORD(m_hWnd);
copyDataStruct.cbData = ASize;
copyDataStruct.lpData = MsgPointer;
//向服務(wù)器端窗口發(fā)送WM_COPYDATA消息
::SendMessage(m_ServerWinHwnd, WM_COPYDATA, m_SessionHandle, LPARAM(©DataStruct));
}
}
LRESULT CIPCClient::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
LPVOID MsgPointer;
DWORD bufLen;
//根據(jù)消息種類,分別執(zhí)行
//WM_CopyData消息
if (message == WM_COPYDATA)
{
bufLen = ((PCOPYDATASTRUCT)lParam)->cbData;
MsgPointer = ((PCOPYDATASTRUCT)lParam)->lpData;
m_ClientDataArrive(m_ParentWnd,MsgPointer,bufLen);
//處理客戶端接收數(shù)據(jù)事件
}
//連接響應(yīng)消息
else if (message == m_ConnectResposeHwnd)
{
if (!m_Active)
{
m_ServerWinHwnd = HWND(wParam);
//連接響應(yīng)事件
m_ClientConnected(m_ParentWnd,m_ServerWinHwnd);
m_Active = true;
}
}
//服務(wù)器端斷開連接消息
else if (message == m_ServerDisconnectHwnd)
{
if (m_Active)
{
if (wParam = DWORD(m_ServerWinHwnd))
{
//觸發(fā)斷開事件
m_ClientDisConnected(m_ParentWnd,m_ServerWinHwnd);
m_ServerWinHwnd = 0;
m_Active = false;
}
}
}
return CWnd::WindowProc(message, wParam, lParam);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -