(1)在stdafx.h中,定义如下消息:
#define LOGINMSG WM_USER+200
(2)比如你要将消息传到login界面,则在login.cpp中定义窗口句柄全局变量
HWND login_hwnd;
然后在login.cpp的初始化方法中给窗口句柄全赋值:
BOOL Login::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
login_hwnd = m_hWnd;
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
(3)在你要发起消息的界面,比如clientSock.cpp中:
导入句柄
extern HWND login_hwnd;
若要发送消息:
::PostMessage(login_hwnd, LOGINMSG, 0, (LPARAM)recvData);//自定义消息,用于将内容传到对话框
(4)再回到login.cpp中,实现LOGINMSG消息收到后对应的处理函数:
BEGIN_MESSAGE_MAP(Login, CDialogEx)
ON_BN_CLICKED(IDOK, &Login::OnBnClickedOk)
ON_BN_CLICKED(IDCREGISTER, &Login::OnBnClickedCregister)
ON_MESSAGE(LOGINMSG, loginFun)
END_MESSAGE_MAP()
如上,绑定loginFun方法,并在这段代码下实现loginFun函数:
// Login 消息处理程序
LRESULT Login::loginFun(WPARAM parm1, LPARAM parm2)
{
char *recvData = (char*)parm2;
LOGIN_RESULT loginMsg;
memset(&loginMsg, 0, sizeof(LOGIN_RESULT));
memcpy(&loginMsg, recvData, sizeof(loginMsg));//注意sizeof中要是转换的结构体大小
//AfxMessageBox(loginMsg.result);
CStudentDlg studlg(m_sock,this->userId);
INT_PTR nResponse = studlg.DoModal();
return 0;
}
(5)最后,记得在login.h类中添加loginFun的声明:
LRESULT Login::loginFun(WPARAM parm1, LPARAM parm2);