有了子属性窗,接下来就是解决子属性窗的参数如何传递到主对话框。若参数较少,可以通过在子属性窗中添加GetXX之类的函数并由主对话框调用实现,但若参数较多时, GetXX之类的函数和调用也会增加,因此,本篇消息传递方法实现:
1) 在stadfx.h中添加代码;
#defineWM_FDM_MESSAGE (WM_USER+100) //自定义信息
struct cmddata{ //传递数据打包结构体
UCHAR m_ucCmd;
USHORT m_usData;
};
2) 在子对话框中添加按钮控件并添加其响应函数代码:
cmddatam_cmddata;
m_cmddata.m_ucCmd = 5;
m_cmddata.m_usData = 10;
::SendMessage(this->GetParent()->m_hWnd,WM_FDM_MESSAGE, DWORD(&m_cmddata), DWORD(0));
3) 在主对话框.h中添加消息接收函数:
afx_msgLRESULT OnRecvMessage(WPARAM wParam, LPARAM lParam);
4) 在主对话框.cpp的MESSAGE_MAP中添加消息映射:
ON_MESSAGE(WM_FDM_MESSAGE,&CMyCtrlSysDlg::OnRecvMessage)
5) 添加消息接收函数OnRecvMessage代码:
CString str;
str.Format(L"%d,%d",m_cmddata->m_ucCmd, m_cmddata->m_usData);
MessageBox(str);
6) 测试效果:点击子对话框按钮后,弹出显示对话框: