您的位置:首页 > 其它

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

2017-08-25 17:03 357 查看

 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;
4000
// 发送整数值为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);	// 调用基类处理函数
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: