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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32716885/article/details/83413999

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

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

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

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

方案一:

可以设定一个全局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控件显示出来。

猜你喜欢

转载自blog.csdn.net/qq_32716885/article/details/83413999
今日推荐