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); // 调用基类处理函数
}