系统相关功能开发(八)-消息


 1.自定义消息

// 21.8.1(OK)
#define WM_MY_MESSAGE	WM_USER + 66			// 自定义消息


void CMessageSendSampleDlg::OnButtonSendMymessage()		// 发送自定义消息函数
{
	SendMessage(WM_MY_MESSAGE, NULL, NULL);		// 发送自定义消息
}


LRESULT CMessageSendSampleDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) // 程序处理函数
{
	switch (message)			// 判断消息类型
	{
	case WM_MY_MESSAGE:
		WriteLog("接收到WM_MY_MESSAGE消息");	// 接收到用户自定义消息,输出
		break;
	default:
		break;
	}
	return CDialog::WindowProc(message, wParam, lParam);
}


2.注册消息

发送
void CMessageSendSampleDlg::OnButtonRegmessage()			// 注册消息函数	
{
	UINT myMsg = RegisterWindowMessage("LLN's Message Test");	// 注册消息
	::SendMessage(HWND_BROADCAST, myMsg, NULL, NULL);		// 发送广播消息
}

接收
BOOL CMessageReceiveSampleDlg::OnInitDialog()
{	...
	myMsg = RegisterWindowMessage("LLN's Message Test");
	...
}
LRESULT CMessageReceiveSampleDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	if (message == myMsg)	
		WriteLog("接收到使用RegisterWindowMessage函数注册的消息");
	return CDialog::WindowProc(message, wParam, lParam);
}



3.PostMessage()函数与SendMessage()函数的区别

LRESULT SendMessage/ PostMessage(
HWND hWnd,//指定接收消息的对话框的句柄
UINT Msg,//指定发送的消息类型
WPARAM wParam,//消息参数
LPARAM lParam);//消息参数


wParam=(WPARAM) (HWND)hwnd;//发送对话框句柄
lParam=(LPARAM) ( PCOPYDATASTRUCT) pcds;//结构数据指针


typedef struct tagCOPYDATASTRUCT{
DWORD dwData;//指定发送给接收程序的32位数据
DWORD cbData;//指定lpData参数中指定的数据的长度
PVOID lpData;//指向要传递的数据的指针
} PCOPYDATASTRUCT;


发送
struct MESCONTENT				// 消息内容结构
{
	char	sender[50];			// 消息发送者
	char	content[500];		// 消息内容
};


void CMessageSendSampleDlg::OnButtonSendCopydata()	// 通过WM_COPYDATA消息发送数据
{
	UpdateData(TRUE);								// 获取发送数据
	CWnd *pWnd=CWnd::FindWindow(NULL, _T("接收WM_COPYDATA消息测试"));	// 获取接收对话框
    if(pWnd==NULL)									// 如果没有检索到接收对话框,则
	{
        WriteLog("接收消息数据的进程未运行");		// 输出错误信息,并
        return;										// 返回
    }


	MESCONTENT msData={0};								// 定义消息结构变量
	strcpy(msData.sender, m_sender.GetBuffer(50));		// 赋值消息发送者
	strcpy(msData.content,m_content.GetBuffer(500));	// 赋值消息内容


	COPYDATASTRUCT cpd;									// 定义发送结构变量
    cpd.dwData = 0;										// 发送整数值为0
	cpd.cbData = sizeof(msData);							// 发送数据的长度
	cpd.lpData = &msData;									// 发送数据内容
    
    pWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&cpd);		// 发送WM_COPYDATA消息
}


接收
struct MESCONTENT				// 消息内容结构
{
	char	sender[50];			// 消息发送者
	char	content[500];		// 消息内容
};
BOOL CMessageReceiveSampleDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) // WM_COPYDATA消息处理函数
{
	MESCONTENT* msData = (MESCONTENT*)pCopyDataStruct->lpData;	// 获取消息数据
	// 输出消息数据
	WriteLog("接收到WM_COPYDATA消息。\r\n发送者=%s;\r\n内容=%s", msData->sender, msData->content);
	return CDialog::OnCopyData(pWnd, pCopyDataStruct);	// 调用基类处理函数
}

















































猜你喜欢

转载自blog.csdn.net/greless/article/details/77581517