MFC中 两个对话框之间发送消息(一个是父窗口的子窗口,一个是父窗口的兄弟窗口。这两个窗口之间消息传递)

本文详细介绍了在Windows应用程序中,如何实现在多个窗口间高效、实时地传递消息。通过具体的步骤和代码示例,展示了不使用全局HWND变量,而是通过父窗口与子窗口之间的消息传递机制,实现消息从一个子窗口发送到另一个独立窗口的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在需要实现如图的消息发送。

父窗口显示的时候,与父窗口并行的窗口 也要显示出来。

对子窗口操作同时,实时给 另一个绿色窗口发送消息

两个绿色的窗口进行消息发送。需要把 子窗口的消息  发送到 另一个窗口上。

方案一:

可以设定一个全局HWND 变量,每个类中都可以访问。

但是,我的目的不是讲解这个。

方案二:

我主要是以这种方式实现的,不需要定义全局HWnd。

第一步:

在父窗口中,显示 “父窗口 并行窗口”

伪代码如下:

CBortherDlg    *m_dlg;
m_dlg = new  CBortherDlg();
m_dlg->Create(IDD_DIALOG_ShowMessage);
m_dDlg->ShowWindow(SW_SHOW);

此时,需要保存该窗口的HWND

HWND   m_hWnd = m_dlg->GetSafeHwnd();

第二步:

将该HWND传给父窗口的子窗口中。

在这里,需要注意的是,创建子窗口时,一定要在Create(IDD)之后,将这个变量传入子窗口中。

m_buttonDlg->GetMessageCWnd(m_ShowMessageDlg->GetSafeHwnd());

类似上述代码情况。

第三步:

子窗口中定义需要发送的消息

#define   WM_MY_MESSAGE   WM_USER+100

在需要发送消息的地方,发送该消息即可

在这里发现了个问题:

使用sendmessagepostmessage发送字符串消息时,需要用不用的方式传送。

A:如果使用sendmessage发送消息时,因为该发送机制是阻塞的,可以使用临时的CString字符串发送。

B:如果使用postmessage发送消息时,必须使用成员变量存储字符串

::PostMessageA(接收消息窗口句柄, WM_MY_SHOWMESSAGE , 0, (LPARAM)&m_strSendInfo);
	

第四步:

接收消息的地方

BEGIN_MESSAGE_MAP(CShowMessageDlg, CDialogEx)
	ON_MESSAGE(WM_MY_SHOWMESSAGE , OnShowMessage)
END_MESSAGE_MAP()
afx_msg	LRESULT	OnShowMessage(WPARAM  wParam , LPARAM  lParam);


LRESULT CShowMessageDlg::OnShowMessage(WPARAM wParam , LPARAM lParam)
{
	CString   *strInfo = (CString* )lParam;
	m_strReceive += *strInfo;
	m_editShow.SetWindowTextW(m_strReceive);
	m_editShow.SetSel(m_strReceive.GetLength() , m_strReceive.GetLength());
	return 0;
}

最后将消息用CEdit控件显示出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糯诺诺米团

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值