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(IDOKMessageBox(_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(-1index)
{
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();
}
继续阅读与本文标签相同的文章
传感器的基本原理是什么
-
小白学Python | 最简单的Django 简明教程
2026-05-18栏目: 教程
-
Jvm-Sandbox源码分析--模块刷新和卸载
2026-05-18栏目: 教程
-
MyCat数据库的基础配置及使用
2026-05-18栏目: 教程
-
阿里巴巴资深技术专家雷卷:值得开发者关注的 Java 8 后时代的语言特性
2026-05-18栏目: 教程
-
java注解
2026-05-18栏目: 教程
