如何在属性页之间交换数据?

时间:2014-08-27 07:09:09

标签: visual-c++ mfc

我有一个属性表,它包含4个页面。在第二个页面,我有一个列表控件,它被一些值枚举。在第三页我有一个listbox.w值列表控件是什么获取第二页的枚举,应该添加到第三页的列表框中。 //第二页listcontrol的DDX例程如下。

void DoDataExchange(CDataExchange* pDX)
{
   CPropertyPage::DoDataExchange(pDX);
   DDX_Control(pDX, IDC_LIST_MODEL, m_listCtrl);
}

//第三页lisbox的DDX例程如下。

void DoDataExchange(CDataExchange* pDX)
{
   CPropertyPage::DoDataExchange(pDX);
   DDX_Control(pDX, IDC_LIST_BOX, m_listBoxCtrl);
}

在第二页OnWizardNext()中,我添加了以下代码,将第二页listcontrol值分配给第三页成员变量。

LRESULT OnWizardNext()

{
  UpdateData(TRUE);
  int nListItemCount = m_listCtrl.GetItemCount();
  m_str = m_listCtrl.GetItemText(0,1);
  m_str1 = m_listCtrl.GetItemText(0,2);
  m_str2 = m_listCtrl.GetItemText(0,3);
  //assigning the second page data member values to the third page member variables.
  CConfirmationView dlg;//third page class
  dlg.m_szItemData.Format(L"  %s",m_str);
  dlg.m_szItemData1.Format(L"  %s",m_str1);
  dlg.m_szItemData2.Format(L"  %s",m_str2);
  UpdateData(FALSE);
  return CPropertyPage::OnWizardNext();
}

在第三页OnInitDialog()中,我添加了这段代码,将从第二页listcontrol中检索到的值添加到第三页列表框中,如下所示。

BOOL OnInitDialog()
{
  CPropertyPage::OnInitDialog();
  Updatedata(FALSE);
  m_ListBoxCtrl.AddString(m_szItemData);
  m_ListBoxCtrl.AddString(m_szItemData1);
  m_ListBoxCtrl.AddString(m_szItemData2);
  return TRUE;
}

//从InitInstance()

调用向导
#include "firstpage.h"
#include "secondpage.h"
#include "thirdpage.h"
#include "fourthpage.h"
#include "myapp.h"
BOOL InitInstance()
{
CMyWizardSheet mysheet;
CFirstPage pg1;
CSecondPage pg2;
CThirdPage pg3;
CFourthPage pg4;
mysheeet.AddPage(&pg1);
mysheeet.AddPage(&pg2);
mysheeet.AddPage(&pg3);
mysheeet.AddPage(&pg4);
}

这就是我正在做的事情。我想将listcontrol(第二页)的项目数据添加到列表框(第三页)。 任何人都可以告诉我们如何在页面之间交换数据。

2 个答案:

答案 0 :(得分:0)

CConfirmationView dlg;//third page class不起作用,您需要在创建对话框时指向对话框的ACTUAL实例(通常在您的应用程序的InitInstance()方法中);您可以将指向对话框的指针存储为app类中的成员变量。

// add member variable in myapp class (myapp.h)
public:
CThirdPage *m_pThirdPage;


// in myapp InitInstance(), after all the AddPage() calls
m_pThirdPage = &pg3;

第二页的OnWizardNext()将具有类似

的逻辑
//assigning the second page data member values to the third page member variables.
myapp *pApp = (myapp *) AfxGetApp();
pApp->m_pThirdPage->m_szItemData.Format(L"  %s",m_str);
pApp->m_pThirdPage->m_szItemData1.Format(L"  %s",m_str1);
pApp->m_pThirdPage->m_szItemData2.Format(L"  %s",m_str2);

答案 1 :(得分:0)

通过构造函数(this)将指针传递给CProperySheet到每个CPropertyPages,这样您就可以访问父表中定义的所有页面,然后将页面声明为友元类到其他关注页面,以便您可以访问所需的成员并致电他们的UpdateData()

相关问题