?? ipcserver.cpp
字號:
// IPCServer.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "IPCServer.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CIPCServer
/*
*構造函數
*/
CIPCServer::CIPCServer()
{
m_SessionHandle = 0;
m_Active = false;
//注冊消息常量
m_ServerDisConnectHwnd = RegisterWindowMessage(IPCServerDisconnecting);
m_ConnectRequestHwnd = RegisterWindowMessage(IPCConnectRequest);
m_ConnectResposeHwnd = RegisterWindowMessage(IPCConnectRespose);
m_ClientDisConnectHwnd = RegisterWindowMessage(IPCClientDisconnecting);
}
CIPCServer::~CIPCServer()
{
}
BEGIN_MESSAGE_MAP(CIPCServer, CWnd)
//{{AFX_MSG_MAP(CIPCServer)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CIPCServer message handlers
/*
*函數介紹:打開服務器,處于監聽狀態
*入口參數:parentWnd指定創建此類的窗口指針
*出口參數:(無)
*返回值:(無)
*/
void CIPCServer::Open(CWnd* parentWnd)
{
if (!m_Active)
{
//注冊連接會話的消息標識符
m_SessionHandle = RegisterWindowMessage(m_SessionName);
m_ParentWnd = parentWnd;
m_Active = true;
}
}
/*
*函數介紹:關閉服務器
*入口參數:(無)
*出口參數:(無)
*返回值:(無)
*/
void CIPCServer::Close()
{
if (m_Active)
{
//廣播服務器斷開的消息
::SendMessage(HWND_BROADCAST, m_ServerDisConnectHwnd, WPARAM(m_hWnd), LPARAM(m_SessionHandle));
m_Active = false;
}
}
/*
*函數介紹:向客戶端進程發送數據
*入口參數:MsgPointer:數據指針
AWinHwnd : 客戶端窗口句柄
ASize : 數據大小
*出口參數:(無)
*返回值:(無)
*/
void CIPCServer::SendMsg(LPVOID MsgPointer, HWND AWinHwnd, DWORD ASize)
{
COPYDATASTRUCT copyDataStruct;
copyDataStruct.dwData = 0;
copyDataStruct.cbData = ASize;
copyDataStruct.lpData = MsgPointer;
//向客戶端窗口發送WM_COPYDATA消息
::SendMessage(AWinHwnd, WM_COPYDATA, m_SessionHandle, LPARAM(©DataStruct));
}
LRESULT CIPCServer::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
LPVOID MsgPointer;
HWND ClientHwnd;
DWORD bufLen;
//根據消息種類,分別處理
if ((message == WM_COPYDATA) && (wParam = m_SessionHandle))
{
//如果是WM_CopyData消息
MsgPointer = ((PCOPYDATASTRUCT)lParam)->lpData;
ClientHwnd = HWND(((PCOPYDATASTRUCT)lParam)->dwData);
bufLen = ((PCOPYDATASTRUCT)lParam)->cbData;
//此時,處理接收事件
m_ServerDataArrive(m_ParentWnd,MsgPointer,bufLen,ClientHwnd);
}
else if ((message == m_ConnectRequestHwnd) && (lParam = m_SessionHandle))
{
//如果是客戶端連接請求消息時
if (m_Active)
{
//得到客戶端窗口句柄
ClientHwnd = (HWND)wParam;
if (ClientHwnd != 0)
{
::SendMessage(ClientHwnd, m_ConnectResposeHwnd, WPARAM(m_hWnd), 0);
//觸發連接事件
m_ServerConnected(m_ParentWnd,ClientHwnd);
}
}
}
else if ((message == m_ClientDisConnectHwnd) && (lParam = m_SessionHandle))
{
//如果是客戶端斷開連接時
ClientHwnd = (HWND)wParam;
::SendMessage(ClientHwnd, m_ServerDisConnectHwnd, WPARAM(m_hWnd), 0);
//觸發斷開事件
m_ServerDisConnected(m_ParentWnd,ClientHwnd);
}
return CWnd::WindowProc(message, wParam, lParam);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -