MFC 初始化以及操作点击按钮弹出的对话框解决办法

MFC 初始化以及操作点击按钮弹出的对话框
在主对话框上点击一个按钮弹出新的模态对话框  新对话框上有List  Control (显示数据) 
 Edit Control(编辑输入信息)  以及三个按钮 分别添加增加  修改  删除信息处理事件
对话框类及实现文件如下:

/ DlgGroupInfo 对话框 头文件

class DlgGroupInfo : public CDialog
{
DECLARE_DYNAMIC(DlgGroupInfo)

public:
DlgGroupInfo(CWnd* pParent = NULL);   // 标准构造函数
virtual ~DlgGroupInfo();

// 对话框数据
enum { IDD = IDD_DIALOG_GROUP };

protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

DECLARE_MESSAGE_MAP()
public:

CListCtrl m_ListGroupInfo;  
CEdit m_EditGroupName;
std::vector<CString> m_vtGroup;   //保存数据

int m_index;  // list  control 数据下标
CString m_strGpName; //Edit 控件数据

afx_msg void OnBnClickedButtonGroupAdd();
afx_msg void OnBnClickedButtonGroupUpdate();
afx_msg void OnBnClickedButtonGroupDelete();
afx_msg void OnNMClickListGroupInfo(NMHDR *pNMHDR, LRESULT *pResult);
};

// DlgGroupInfo 对话框实现文件

IMPLEMENT_DYNAMIC(DlgGroupInfo, CDialog)

DlgGroupInfo::DlgGroupInfo(CWnd* pParent /*=NULL*/)
: CDialog(DlgGroupInfo::IDD, pParent),m_index(-1)
{

//CRect rect;   
//m_ListGroupInfo.GetClientRect(&rect);   
//m_ListGroupInfo.SetExtendedStyle(m_ListGroupInfo.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); 
//m_ListGroupInfo.InsertColumn(0,"班组",LVCFMT_CENTER, 10, 0); //list中第一列

//CStdioFile Rfile("pz.txt",CFile::modeCreate|CFile::modeRead);
//CString str;
//while(Rfile.ReadString(str))
//{
// m_vtGroup.push_back(str);
//}
//Rfile.Close();

//int index = 0;
//for (int i = 0; i < m_vtGroup.size(); i++)
//{
// m_ListGroupInfo.InsertItem(index, "");
// m_ListGroupInfo.SetItemText(index,0, m_vtGroup.at(i));
// index++;
//}
}

DlgGroupInfo::~DlgGroupInfo()
{
}

void DlgGroupInfo::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
/*DDX_Control(pDX, IDC_LIST_GROUP_INFO, m_ListGroupInfo);
DDX_Control(pDX, IDC_EDIT_GROUP_NAME, m_EditGroupName);
DDX_Control(pDX, IDC_COMBO_GROUP, m_cbGroup);*/

}


BEGIN_MESSAGE_MAP(DlgGroupInfo, CDialog)
ON_BN_CLICKED(IDC_BUTTON_GROUP_ADD, &DlgGroupInfo::OnBnClickedButtonGroupAdd)
ON_BN_CLICKED(IDC_BUTTON_GROUP_UPDATE, &DlgGroupInfo::OnBnClickedButtonGroupUpdate)
ON_BN_CLICKED(IDC_BUTTON_GROUP_DELETE, &DlgGroupInfo::OnBnClickedButtonGroupDelete)
ON_NOTIFY(NM_CLICK, IDC_LIST_GROUP_INFO, &DlgGroupInfo::OnNMClickListGroupInfo)
END_MESSAGE_MAP()


// DlgGroupInfo 消息处理程序

void DlgGroupInfo::OnBnClickedButtonGroupAdd()
{
// TODO: 在此添加控件通知处理程序代码
CString strValue;
m_EditGroupName.GetWindowText(strValue);
if (strValue.IsEmpty())
{
AfxMessageBox("班组名称不能为空");
return;
}
for(int i = 0; i < m_vtGroup.size(); i++)
{
if(strcmp(strValue,m_vtGroup.at(i)) == 0)
{
AfxMessageBox("有相同记录");
return;
}
}


//在班组配置文件尾部追加信息
m_vtGroup.push_back(strValue);

CFile fGroupPZ;
fGroupPZ.Open("pz.txt", CFile::modeCreate | CFile::modeReadWrite);
for (int i=0; i<m_vtGroup.size(); i++)
{
fGroupPZ.Write(m_vtGroup.at(i), strlen(m_vtGroup.at(i)));
fGroupPZ.Write("\r\n", strlen("\r\n"));
}
fGroupPZ.Close();

//list 控件添加班组信息
int rowNo = m_ListGroupInfo.GetItemCount();
m_ListGroupInfo.InsertItem(rowNo, "");
m_ListGroupInfo.SetItemText(rowNo,0, strValue);
m_EditGroupName.SetWindowText("");

}

void DlgGroupInfo::OnBnClickedButtonGroupUpdate()
{
// TODO: 在此添加控件通知处理程序代码
CString strValue;
m_EditGroupName.GetWindowText(strValue);
if (strValue.IsEmpty())
{
AfxMessageBox("班组名称不能为空");
return;
}
for(int i = 0; i < m_vtGroup.size(); i++)
{
if(strcmp(strValue,m_vtGroup.at(i)) == 0)
{
AfxMessageBox("有相同记录");
return;
}
}

m_vtGroup.at(m_index) = strValue;

//更新配置文件
CFile fGroupPZ;
fGroupPZ.Open("pz.txt", CFile::modeCreate | CFile::modeReadWrite);
for (int i = 0; i < m_vtGroup.size(); i++)
{
fGroupPZ.Write(m_vtGroup.at(i), strlen(m_vtGroup.at(i)));
fGroupPZ.Write("\r\n", strlen("\r\n"));
}
fGroupPZ.Close();

//显示更新的班组信息
m_EditGroupName.SetWindowText("");
m_ListGroupInfo.SetItemText(m_index, 0, strValue);

}

void DlgGroupInfo::OnBnClickedButtonGroupDelete()
{
// TODO: 在此添加控件通知处理程序代码
CString strValue;
m_EditGroupName.GetWindowText(strValue);

m_vtGroup.erase(m_vtGroup.begin() + m_index);

//更新配置文件
CFile fGroupPZ;
fGroupPZ.Open("pz.txt", CFile::modeCreate | CFile::modeReadWrite);
for (int i = 0; i < m_vtGroup.size(); i++)
{
fGroupPZ.Write(m_vtGroup.at(i), strlen(m_vtGroup.at(i)));
fGroupPZ.Write("\r\n", strlen("\r\n"));
}
fGroupPZ.Close();

m_EditGroupName.SetWindowText("");
m_ListGroupInfo.DeleteItem(m_index);
}

void DlgGroupInfo::OnNMClickListGroupInfo(NMHDR *pNMHDR, LRESULT *pResult)
{
//LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
m_index = pNMLV->iItem;
if ( m_index != -1)
{
m_strGpName = m_ListGroupInfo.GetItemText(m_index, 0);
m_EditGroupName.SetWindowText(m_strGpName);
}
else
{

}
*pResult = 0;
}





类写好后,点击主对话框的按钮以弹出新对话框,此时若DlgGroupInfo类构造函数的内容(初始化List Control控件)以及DoDataExchange函数的内容不注释  新对话框的创建就会有失败 求大神指教如何修改
------解决思路----------------------
向你的DlgGroupInfo类中添加虚函数OnInitDialog()(在“属性栏”操作),然后将你的那一坨初始化操作放到OnInitDialog()函数里面实现即可。楼主需要琢磨下“类”和“对象”的区别。