一、需求
MFC程序可能有许多个对话框,有主对话框,有子对话框,本文介绍父子对话框之间的消息传递。适用于外部事件、外部通知等事件。为简单起见,只针对父窗口传递消息到子窗口。
二、界面
主界面为对话框,上有一Button,点击进入子对话框(使用非模态方式)。对话框界面有Static控件输出信息。过程省略。
三、原理
自定义消息ID。在子窗口中响应该消息,事件发起者使用SendMessage
函数发送消息。发送时可以指定子窗口句柄。
四、编码
定义消息ID,必须大于WM_USER,为方便起见,可在stdafx.h中定义:
#define WM_MY_EVENT (WM_USER + 1086)
在子对话框头文件声明消息响应函数:
afx_msg LRESULT OnMyEvent(WPARAM wParam, LPARAM lParam);
在子对话框实现文件,添加消息与响应函数的关联:
BEGIN_MESSAGE_MAP(CDlgChild, CDialogEx)
// ...
ON_MESSAGE(WM_MY_EVENT, OnMyEvent)
END_MESSAGE_MAP()
同一文件,实现响应函数:
// 父窗口发来的消息,进行响应
LRESULT CDlgChild::OnMyEvent(WPARAM wParam, LPARAM lParam)
{
int* type = (int*)wParam;
if (*type == 1)
{
GetDlgItem(IDC_STC_SET_TIPS)->SetWindowTextW(L"消息类型1");
m_nWaitReconnect = 1;
}
else if (*type == 2)
{
GetDlgItem(IDC_STC_SET_TIPS)->SetWindowTextW(L"消息类型2");
}
return 0;
}
在其主界面实现代码中发送消息:
int sendtype = 2;
HWND hWnd = m_pDlgChild->GetSafeHwnd(); // 指定子窗口
::SendMessage(hWnd, WM_MY_EVENT, (WPARAM)&sendtype, NULL);
本文只是简单使用,复杂场合暂未有使用。
转载:https://blog.csdn.net/subfate/article/details/103651152
查看评论