在对话框上创建了两个属性页,这两个属性页之间怎么通讯
在对话框上创建了两个属性页,这两个属性页之间如何通讯?
主对话框 CTabDlg.h
#include "Pag1.h"
#include "Pag2.h"
CPag1 m_Page1Dlg;
CPag2 m_Page2Dlg;
主对话框 CTabDlg.cpp
BOOL CTabDlg::OnInitDialog()
{
...
m_Page1Dlg.Create(IDD_PAG1_DIALOG, this);
m_Page2Dlg.Create(IDD_PAG2_DIALOG, this);
CRect rcDlgs;
GetDlgItem(IDC_DLG_AREA)->GetWindowRect(rcDlgs);
ScreenToClient(rcDlgs);
rcDlgs.top = 50;
rcDlgs.left = 350;
rcDlgs.bottom = rect.bottom -50;
rcDlgs.right = 775;
m_Page1Dlg.MoveWindow(rcDlgs); //第1个属性页
m_Page1Dlg.ShowWindow(SW_SHOW);
rcDlgs.top = 50;
rcDlgs.left = 780;
rcDlgs.bottom = rect.bottom -50; //第2个属性页
rcDlgs.right = rect.right-60;
m_Page2Dlg.MoveWindow(rcDlgs);
m_Page2Dlg.ShowWindow(SW_SHOW);
////两个属性页都显示出来了,
class CPag1 : public CPropertyPage
{
DECLARE_DYNCREATE(CPag2)
class CPag2 : public CPropertyPage
{
DECLARE_DYNCREATE(CPag2)
public:
void SetData(CString str)
{
m_Edit1.SetWindowText(str);
}
在 CPag2上有个m_Edit1
现在CPag1, 与CPage2两个属性页之间通信
在CPag1.cpp
CTabDlg* MainDlg=(CTabDlg*) GetParent()->GetParent(); //获取主对话窗 指针
框CPag2* View2=(CPag2*) MainDlg->GetParent(); //在主对话窗获取属性2指针
View2->SetData("发送成功."); // 调用CPag2的函数SetData()将数据传给CPag2属性页
但执行有问题,不成功啥问题呀?????
------解决方案--------------------
MainDlg->GetParent(); 主对话框的父窗口怎么会是属性页呢
------解决方案--------------------
CTabDlg* MainDlg=(CTabDlg*) GetParent()->GetParent(); //获取主对话窗 指针
主对话框里有成员m_Page1Dlg和 m_Page2Dlg
直接 MainDlg->m_Page1Dlg....操作就可以了
------解决方案--------------------
通过该他们公共的父窗口来中转即可
主对话框 CTabDlg.h
#include "Pag1.h"
#include "Pag2.h"
CPag1 m_Page1Dlg;
CPag2 m_Page2Dlg;
主对话框 CTabDlg.cpp
BOOL CTabDlg::OnInitDialog()
{
...
m_Page1Dlg.Create(IDD_PAG1_DIALOG, this);
m_Page2Dlg.Create(IDD_PAG2_DIALOG, this);
CRect rcDlgs;
GetDlgItem(IDC_DLG_AREA)->GetWindowRect(rcDlgs);
ScreenToClient(rcDlgs);
rcDlgs.top = 50;
rcDlgs.left = 350;
rcDlgs.bottom = rect.bottom -50;
rcDlgs.right = 775;
m_Page1Dlg.MoveWindow(rcDlgs); //第1个属性页
m_Page1Dlg.ShowWindow(SW_SHOW);
rcDlgs.top = 50;
rcDlgs.left = 780;
rcDlgs.bottom = rect.bottom -50; //第2个属性页
rcDlgs.right = rect.right-60;
m_Page2Dlg.MoveWindow(rcDlgs);
m_Page2Dlg.ShowWindow(SW_SHOW);
////两个属性页都显示出来了,
class CPag1 : public CPropertyPage
{
DECLARE_DYNCREATE(CPag2)
class CPag2 : public CPropertyPage
{
DECLARE_DYNCREATE(CPag2)
public:
void SetData(CString str)
{
m_Edit1.SetWindowText(str);
}
在 CPag2上有个m_Edit1
现在CPag1, 与CPage2两个属性页之间通信
在CPag1.cpp
CTabDlg* MainDlg=(CTabDlg*) GetParent()->GetParent(); //获取主对话窗 指针
框CPag2* View2=(CPag2*) MainDlg->GetParent(); //在主对话窗获取属性2指针
View2->SetData("发送成功."); // 调用CPag2的函数SetData()将数据传给CPag2属性页
但执行有问题,不成功啥问题呀?????
------解决方案--------------------
MainDlg->GetParent(); 主对话框的父窗口怎么会是属性页呢
------解决方案--------------------
CTabDlg* MainDlg=(CTabDlg*) GetParent()->GetParent(); //获取主对话窗 指针
主对话框里有成员m_Page1Dlg和 m_Page2Dlg
直接 MainDlg->m_Page1Dlg....操作就可以了
------解决方案--------------------
通过该他们公共的父窗口来中转即可