SendMessage()窗体之间发消息

SendMessage调用一个窗口的窗口函数,将一条消息发给那个窗口。
一、父窗口向子窗口发消息。
1、接收方。
1.1头文件里面声明消息。

#define  MSG_UPDATE_LEFT_CHILD WM_USER+600

1.2消息映射,在头文件里面添加响应函数。

	afx_msg LRESULT OnUpdate(WPARAM w, LPARAM l);

1.3响应响应函数。

LRESULT CDlgChild::OnUpdate(WPARAM w, LPARAM l)
{
	if (IsWindowVisible())
	{
		ShowWindow(SW_HIDE);
	}
	else
	{
		ShowWindow(SW_SHOW);
	}
	return 0;
}

1.4 【关键】在cpp文件的消息映射里面关联消息和函数。

BEGIN_MESSAGE_MAP(CDlgChild, CDialogEx)
	ON_MESSAGE(MSG_UPDATE_LEFT_CHILD, &CDlgChild::OnUpdate)
END_MESSAGE_MAP()

2、发送方。
2.1父窗口先创建子窗体。

void CSendMsgDemoDlg::OnBnClickedButtonCreate()
{
	if (m_DlgLeftChild.GetSafeHwnd())
	{
		m_DlgLeftChild.DestroyWindow();
	}
	m_DlgLeftChild.Create(CDlgChild::IDD, this);
	m_DlgLeftChild.ShowWindow(SW_SHOW);

	if (m_DlgRightChild.GetSafeHwnd())
	{
		m_DlgRightChild.DestroyWindow();
	}
	m_DlgRightChild.Create(CDlgChildRight::IDD, this);
	m_DlgRightChild.ShowWindow(SW_SHOW);
}

2.2向子窗体发消息。

void CSendMsgDemoDlg::OnBnClickedButtonSendMsg()
{
	::SendMessage(m_DlgLeftChild.m_hWnd, MSG_UPDATE_LEFT_CHILD, 0, 0);
}

二、子窗口向父窗口发消息,原理也是一样的,不同之处就在于获取到父窗口的句柄,贴出关键代码。

void CDlgChild::OnBnClickedButtonSendMsg()
{
	CWnd* pWnd = dynamic_cast(GetParent());
	HWND hWnd = pWnd->GetSafeHwnd();
	::SendMessage(hWnd, MSG_UPDATE_PARENT, 0, 0);
}

你可能感兴趣的:(MFC随笔)