C++通讯录程序

1.新建基于对话框的MFC程序
2.添加list control、5个button和1个editcontrol
3.为IDC_LIST1 添加m_list变量 IDC_EDIT1添加m_edit变量
4.在C…Dlg的OnInitDialog()函数中添加
DWORD dwStyle = m_list.GetExtendedStyle();
dwStyle |=LVS_EX_FULLROWSELECT;// 网格线
m_edit.ShowWindow(SW_HIDE);
m_list.ModifyStyle (0,LVS_REPORT);
m_list.InsertColumn(0,_T(“序号”),LVCFMT_CENTER,40,NULL);
m_list.InsertColumn(1,_T(“姓名”),LVCFMT_CENTER,70,NULL);
m_list.InsertColumn(2,_T(“电话”),LVCFMT_CENTER,150,NULL);
m_list.InsertColumn(3,_T(“地址”),LVCFMT_CENTER,150,NULL);
m_list.SetExtendedStyle(dwStyle)
5.为5个按钮添加事件处理程序
导入中写
try
{
char szFilters[] =
“Text File(.txt)\\0.txt\\0”
“C++ source file(.h;,hpp;.cpp)\\0.h;.hpp;.cpp\\0”
“All Typle(.)\\0*.\\0\"
\"Lua source file(
.lua)\\0*.lua\\0”
“\\0”;

CFileDialog OpenDlg(TRUE);  
OpenDlg.m_ofn.lpstr  = \"Open File\";  
OpenDlg.m_ofn.lpstrFilter = szFilters;  

if (IDOK == OpenDlg.DoModal())  
{  
    CFile file;  
    CFileException e;  
    //构造文件,同时增加异常处理  
    if(!file.Open(OpenDlg.GetPathName(), CFile::modeRead,&e))  
    {  
        CString strErr;  
        strErr.Format(_T(\"File could not be opened %d\\n\"), e.m_cause);  
        MessageBox(strErr);  
    }
    ULONGLONG nSize = file.GetLength();
    char* pBuf = new char[nSize + 1];
    memset(pBuf, 0, sizeof(char) * (nSize + 1));
    file.Read(pBuf, nSize);
    file.Close();

    CString strText(pBuf);       
    LPCTSTR lpszToken1 = _T(\"\\r\\n\");
    LPCTSTR lpszToken2 = _T(\"\\t \");
    int curPos1 = 0;
    int curPos2 = 0;
    CString strLine(_T(\"\"));
    CString strCol(_T(\"\"));
    int nRow = 0;
    int nCol = 0;
    while(_T(\"\") != (strLine = strText.Tokenize(lpszToken1, curPos1)))
    {
        m_list.InsertItem(nRow, _T(\"\"));
        curPos2 = 0;
        nCol = 0;
        while(_T(\"\") != (strCol = strLine.Tokenize(lpszToken2, curPos2)))
        {
            m_list.SetItemText(nRow, nCol, strCol);
            ++nCol;
        }
        ++nRow;
    }

    delete[] pBuf;
    pBuf = NULL;
}
}
catch(CException* e)
{
    e->ReportError();
    e->Delete();
}

保存中写
char szFilters[] =
“Text File(.txt)\\0.txt\\0”
“C++ source file(.h;,hpp;.cpp)\\0.h;.hpp;.cpp\\0”
“All Typle(.)\\0*.\\0\"
\"Lua source file(
.lua)\\0*.lua\\0”
“\\0”;
//当过滤器或者默认构造参数赋值较少情况下,
//使用构造函数修改对话框初始状态可能更好,这过滤器较多
CFileDialog FileDlg(FALSE, “txt”, _T(“Test”));
FileDlg.m_ofn.lpstr = “Save File”;
FileDlg.m_ofn.lpstrFilter = szFilters;
if (IDOK == FileDlg.DoModal())
{
CFile file(FileDlg.GetPathName(),CFile::modeCreate|CFile::modeReadWrite);
const int COL_NUM = 4;

    //得到表头文字
    LVCOLUMNA column;
    char szCol[50];
    column.pszText=szCol;
    column.cchTextMax=50;
    column.mask=LVCF_TEXT;
    for(int i=0;i<COL_NUM;i++)
    {
            m_list.GetColumn(i,&column);
            file.Write(szCol,strlen(szCol));
            file.Write(\"\\t\",1);
    }
    file.Write(\"\\r\\n\",2);
    //得到每一行数据
for(int i=0;i<m_list.GetItemCount();i++)
    {
            for(int j=0;j<COL_NUM;j++)
            {
                    CString text = m_list.GetItemText(i,j);
                    text+=\"\\t\";
                    file.Write(text,text.GetLength());
            }
            file.Write(\"\\r\\n\",2);
    }
    file.Close();
}

删除中写
if(!m_list.GetItemCount())
{
MessageBox(_T(“没有记录可删除”),_T(“Error”),MB_IC |MB_OKCANCEL);
return;
}
int index=0;
index=m_list.GetNextItem(0,LVNI_SELECTED);
if(-1index)
{
if(IDOK
MessageBox(_T(“确定删除”),_T(“Information”),MB_OKCANCEL))
{
m_list.DeleteItem(0);
}
}
else
{
if(IDOKMessageBox(_T(“确定删除”),_T(“Information”),MB_OKCANCEL))
{
m_list.DeleteItem(index);
}
}
编辑中写
if(!m_list.GetItemCount())
{
MessageBox(_T(“没有记录可以修改”));
return;
}
CInputdlg dlg;
dlg.m_number=m_list.GetItemText(0,0);
dlg.m_name=m_list.GetItemText(0,1);
dlg.m_phone=m_list.GetItemText(0,2);
dlg.m_adress=m_list.GetItemText(0,3);
int index=0;
index=m_list.GetNextItem(0,LVNI_SELECTED);
if(-1
index)
{
dlg.m_number=m_list.GetItemText(0,0);
dlg.m_name=m_list.GetItemText(0,1);
dlg.m_phone=m_list.GetItemText(0,2);
dlg.m_adress=m_list.GetItemText(0,3);
if(dlg.DoModal())
{
m_list.SetItemText(0,0,dlg.m_number);
m_list.SetItemText(0,1,dlg.m_name);
m_list.SetItemText(0,2,dlg.m_phone);
m_list.SetItemText(0,3,dlg.m_adress);
}

}
else
{
	dlg.m_number=m_list.GetItemText(index,0);
	dlg.m_name=m_list.GetItemText(index,1);
    dlg.m_phone=m_list.GetItemText(index,2);
    dlg.m_adress=m_list.GetItemText(index,3);
	if(dlg.DoModal())
	{
		m_list.SetItemText(index,0,dlg.m_number);
		m_list.SetItemText(index,1,dlg.m_name);
		m_list.SetItemText(index,2,dlg.m_phone);
		m_list.SetItemText(index,3,dlg.m_adress);
	}
}

添加中写
CInputdlg dlg;
if(IDOK==dlg.DoModal())
{
m_list.InsertItem(0,dlg.m_number);
m_list.SetItemText(0,1,dlg.m_name);
m_list.SetItemText(0,2,dlg.m_phone);
m_list.SetItemText(0,3,dlg.m_adress);
}
6.新建一个对话框为其添加CInputdlg类
为CInputdlg类添加WM_SHOWWINDOW消息相应函数
为新建的对话框添加4个静态文本和四个编辑控件
CInputdlg类头文件中写
afx_msg void OnOK();
CString m_name;
CString m_phone;
CString m_adress;
CString m_number;
源文件中写
void CInputdlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_name);
DDX_Text(pDX, IDC_EDIT2, m_phone);
DDX_Text(pDX, IDC_EDIT3, m_adress);
DDX_Text(pDX, IDC_EDIT4, m_number);
}

void CInputdlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialogEx::OnShowWindow(bShow, nStatus);

// TODO: 在此处添加消息处理程序代码
GetDlgItem(IDC_EDIT4)->SetFocus();

}
void CInputdlg::OnOK()
{
//TODO:在此添加程序代码
UpdateData(TRUE);
GetDlgItem(IDC_EDIT4)->SetFocus();
CDialog::OnOK();
}

收藏 打印