版权声明:本文为博主原创文章,未经博主允许不得转载。 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
在需要发送消息的地方,发送该消息即可
在这里发现了个问题:
使用sendmessage和postmessage发送字符串消息时,需要用不用的方式传送。
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控件显示出来。