⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 通信录dlg.cpp

📁 vc 实现家庭通讯录
💻 CPP
字号:
// 通信录Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "通信录.h"
#include "通信录Dlg.h"
#include "AddUser.h"
#include "SaveData.h"
#include "HyperLink.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	CHyperLink m_Mail;
	CHyperLink m_Web; 
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	virtual BOOL OnInitDialog();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	DDX_Control(pDX, IDC_PAGEHOME, m_Web);
	DDX_Control(pDX, IDC_MAIL, m_Mail);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CAboutDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	m_Mail.SetURL(_T("mailto:totoyou@800e.net"));
	m_Mail.SetUnderline(TRUE);	
	m_Web.SetURL(_T("http://sameyou.icpcn.com"));
	m_Web.SetUnderline(TRUE);	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMyDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMyDlg)
	m_FIND = 0;
	m_FINDCONTENT = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	list=NULL;
	step=FALSE;
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMyDlg)
	DDX_Control(pDX, IDC_EXIT, m_Exit);
	DDX_Control(pDX, IDC_MODIFYUSER, m_ModifyUser);
	DDX_Control(pDX, IDC_FINDUSER, m_FindUser);
	DDX_Control(pDX, IDC_VERSION, m_Version);
	DDX_Control(pDX, IDC_SAVEBUTTON, m_SaveButton);
	DDX_Control(pDX, IDC_LOOK, m_Look);
	DDX_Control(pDX, IDC_DELUSER, m_DelUser);
	DDX_Control(pDX, IDC_ADDUSER, m_AddUser);
	DDX_Control(pDX, IDC_OPEN, m_OpenButton);
	DDX_Radio(pDX, IDC_RADIO1, m_FIND);
	DDX_Text(pDX, IDC_EDIT1, m_FINDCONTENT);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
	//{{AFX_MSG_MAP(CMyDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_ADDUSER, OnAdduser)
	ON_BN_CLICKED(IDC_DELUSER, OnDeluser)
	ON_BN_CLICKED(IDC_MODIFYUSER, OnModifyuser)
	ON_BN_CLICKED(IDC_SAVEBUTTON, OnSavebutton)
	ON_BN_CLICKED(IDC_OPEN, OnOpen)
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
	ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
	ON_BN_CLICKED(IDC_RADIO4, OnRadio4)
	ON_BN_CLICKED(IDC_LOOK, OnLook)
	ON_BN_CLICKED(IDC_FINDUSER, OnFinduser)
	ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
	ON_BN_CLICKED(IDC_VERSION, OnVersion)
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_EXIT, OnExit)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyDlg message handlers

BOOL CMyDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	m_Exit.SetIcon(IDI_EXIT);
		m_ModifyUser.SetIcon(IDI_MODIFYUSER);
		m_FindUser.SetIcon(IDI_SEARCH);
		m_Version.SetIcon(IDI_VERSION);
		m_SaveButton.SetIcon(IDI_SAVE);
		m_Look.SetIcon(IDI_INFO);
		m_DelUser.SetIcon(IDI_DELUSER);;
		m_AddUser.SetIcon(IDI_ADDUSER);
		m_OpenButton.SetIcon(IDI_OPEN);

	//
	((CButton*)CWnd::GetDlgItem(IDC_SAVEBUTTON))->EnableWindow(FALSE);
	if(m_FINDCONTENT.IsEmpty())
		(CButton*)CWnd::GetDlgItem(IDC_FINDUSER)->EnableWindow(FALSE);
	list=(CListCtrl*)CWnd::GetDlgItem(IDC_LIST1);
	list->InsertColumn(0,"姓名",LVCFMT_CENTER,50,1);
	list->InsertColumn(1,"生日",LVCFMT_CENTER,39,1);
	list->InsertColumn(2,"家中电话",LVCFMT_CENTER,63,1);
	list->InsertColumn(3,"单位电话",LVCFMT_CENTER,63,1);
	list->InsertColumn(4,"手机",LVCFMT_CENTER,39,1);
	list->InsertColumn(5,"BP机",LVCFMT_CENTER,39,1);
	list->InsertColumn(6,"QQ",LVCFMT_CENTER,25,1);
	list->InsertColumn(7,"信箱",LVCFMT_CENTER,40,1);
	list->InsertColumn(8,"家庭地址",LVCFMT_CENTER,175,1);
	list->InsertColumn(9,"单位地址",LVCFMT_CENTER,175,1);		
	list->InsertColumn(10,"备注",LVCFMT_CENTER,52,1);	
	{
		FILE  *mailfile=fopen("008321.add","rb");
		if(mailfile==NULL)goto label;		
		char temp[4];
		CString  mailadd="";	
		list->DeleteAllItems();
		memset(temp,0,4);
		fread(temp,3,1,mailfile);
		if(strcmp(temp,"zxy")!=0){
		//	MessageBox("文件格式出错","出错",MB_OK|MB_ICONSTOP);
			fclose(mailfile);
			goto label;
		}
		memset(temp,0,4);
		for(;!feof(mailfile);){	
			do{
				fread(temp,1,1,mailfile);
				if(temp[0]!='~')mailadd+=temp;
			}while(temp[0]!='~'&&!feof(mailfile));
			if(feof(mailfile))break;
			list->InsertItem(0,mailadd);			
			mailadd="";
			for(int iLoop=1;iLoop<11&&!feof(mailfile);iLoop++){
				do{
					fread(temp,1,1,mailfile);
					if(temp[0]!='~')mailadd+=temp;
				}while(temp[0]!='~'&&!feof(mailfile));
				list->SetItemText(0,iLoop,mailadd);
				mailadd="";
			}
		}
		fclose(mailfile);
	}
label:
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMyDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMyDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CMyDlg::OnAdduser() 
{
	CAddUser newUser;
	newUser.operate=ADD;
	if(newUser.DoModal()==IDOK){
		step=TRUE;
		list->InsertItem(0,newUser.m_NAME);
		list->SetItemText(0,1,newUser.m_BIRTHDAY);	
		list->SetItemText(0,2,newUser.m_HOMEPHONE);		
		list->SetItemText(0,3,newUser.m_WORKINGTELPHONE);
		list->SetItemText(0,4,newUser.m_MOBILEPHONE);		
		list->SetItemText(0,5,newUser.m_CALL);		
		list->SetItemText(0,6,newUser.m_QQNUMBER);
		list->SetItemText(0,7,newUser.m_EAMIL);
		list->SetItemText(0,8,newUser.m_HOMEADDRESS);
		list->SetItemText(0,9,newUser.m_WORKINGADDRESS);							
		list->SetItemText(0,10,newUser.m_BACK);
		((CButton*)CWnd::GetDlgItem(IDC_SAVEBUTTON))->EnableWindow(TRUE);
	}
	else{
	}
}
void CMyDlg::OnDeluser() 
{
	if(list->GetSelectionMark()!=-1){		
		if(MessageBox("真的要删除朋友["+list->GetItemText(list->GetSelectionMark(),0)+"]吗?","确认",MB_YESNO|MB_ICONINFORMATION)==IDYES){		
			list->DeleteItem(list->GetSelectionMark());
			step=TRUE;
			((CButton*)CWnd::GetDlgItem(IDC_SAVEBUTTON))->EnableWindow(TRUE);
		}
	}
	else
		MessageBox("Same提醒你:\n请选择一个朋友","出错",MB_OK|MB_ICONSTOP);
}

void CMyDlg::OnModifyuser() 
{
	// TODO: Add your control notification handler code here
	int site;
	if((site=list->GetSelectionMark())!=-1){
		CAddUser newUser;
		newUser.m_NAME=list->GetItemText(list->GetSelectionMark(),0);
		newUser.m_BIRTHDAY=list->GetItemText(list->GetSelectionMark(),1);	
		newUser.m_HOMEPHONE=list->GetItemText(list->GetSelectionMark(),2);
		newUser.m_WORKINGTELPHONE=list->GetItemText(list->GetSelectionMark(),3);
		newUser.m_MOBILEPHONE=list->GetItemText(list->GetSelectionMark(),4);		
		newUser.m_CALL=list->GetItemText(list->GetSelectionMark(),5);		
		newUser.m_QQNUMBER=list->GetItemText(list->GetSelectionMark(),6);
		newUser.m_EAMIL=list->GetItemText(list->GetSelectionMark(),7);
		newUser.m_HOMEADDRESS=list->GetItemText(list->GetSelectionMark(),8);
		newUser.m_WORKINGADDRESS=list->GetItemText(list->GetSelectionMark(),9);				
		newUser.m_BACK=list->GetItemText(list->GetSelectionMark(),10);
		UpdateData(FALSE);
		newUser.operate=MODI;
		if(newUser.DoModal()==IDOK){
			step=TRUE;
			list->DeleteItem(site);
			list->InsertItem(site,newUser.m_NAME);
			list->SetItemText(site,1,newUser.m_BIRTHDAY);	
			list->SetItemText(site,2,newUser.m_HOMEPHONE);
			list->SetItemText(site,3,newUser.m_WORKINGTELPHONE);
			list->SetItemText(site,4,newUser.m_MOBILEPHONE);		
			list->SetItemText(site,5,newUser.m_CALL);		
			list->SetItemText(site,6,newUser.m_QQNUMBER);
			list->SetItemText(site,7,newUser.m_EAMIL);
			list->SetItemText(site,8,newUser.m_HOMEADDRESS);
			list->SetItemText(site,9,newUser.m_WORKINGADDRESS);					
			list->SetItemText(site,10,newUser.m_BACK);
			step=TRUE;
			((CButton*)CWnd::GetDlgItem(IDC_SAVEBUTTON))->EnableWindow(TRUE);
		}
	}
	else
		MessageBox("Same提醒你:\n请选择一个朋友","出错",MB_OK|MB_ICONSTOP);
}

void CMyDlg::OnOpen() 
{
	static char BASED_CODE szFilter[] = "地址文件(*.add)|*.add|所有文件 (*.*)|*.*||";
    CFileDialog file(true,NULL,"008321.add",
		OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL);	
	int result=file.DoModal();	
	if(result==IDOK)
	{	
		CString fileName=file.GetFileName();	
		if(fileName.Find(".add")==-1){MessageBox("文件格式出错","出错",MB_OK|MB_ICONSTOP);return;}
		FILE  *mailfile=fopen(file.GetFileName(),"rb");
		if(mailfile==NULL)return;		
		char temp[4];
		CString  mailadd="";	
		list->DeleteAllItems();
		memset(temp,0,4);
		fread(temp,3,1,mailfile);
		if(strcmp(temp,"zxy")!=0){
			MessageBox("文件格式出错","出错",MB_OK|MB_ICONSTOP);
			fclose(mailfile);
			return ;
		}
		memset(temp,0,4);
		for(;!feof(mailfile);){	
			do{
				fread(temp,1,1,mailfile);
				if(temp[0]!='~')mailadd+=temp;
			}while(temp[0]!='~'&&!feof(mailfile));
			if(feof(mailfile))break;
			list->InsertItem(0,mailadd);			
			mailadd="";
			for(int iLoop=1;iLoop<11&&!feof(mailfile);iLoop++){
				do{
					fread(temp,1,1,mailfile);
					if(temp[0]!='~')mailadd+=temp;
				}while(temp[0]!='~'&&!feof(mailfile));
				list->SetItemText(0,iLoop,mailadd);
				mailadd="";
			}
		}
		fclose(mailfile);		
	}		
}

void CMyDlg::OnRadio1() 
{
	m_FIND=0;
	
}
void CMyDlg::OnRadio2() 
{
	m_FIND=1;	
}

void CMyDlg::OnRadio3() 
{
	m_FIND=2;
}
void CMyDlg::OnRadio4() 
{
	m_FIND=3;	
}

void CMyDlg::OnLook() 
{
	if((list->GetSelectionMark())!=-1){
		CAddUser newUser;
		newUser.m_NAME=list->GetItemText(list->GetSelectionMark(),0);
		newUser.m_BIRTHDAY=list->GetItemText(list->GetSelectionMark(),1);	
		newUser.m_HOMEPHONE=list->GetItemText(list->GetSelectionMark(),2);		
		newUser.m_WORKINGTELPHONE=list->GetItemText(list->GetSelectionMark(),3);
		newUser.m_MOBILEPHONE=list->GetItemText(list->GetSelectionMark(),4);		
		newUser.m_CALL=list->GetItemText(list->GetSelectionMark(),5);		
		newUser.m_QQNUMBER=list->GetItemText(list->GetSelectionMark(),6);
		newUser.m_EAMIL=list->GetItemText(list->GetSelectionMark(),7);
		newUser.m_HOMEADDRESS=list->GetItemText(list->GetSelectionMark(),8);
		newUser.m_WORKINGADDRESS=list->GetItemText(list->GetSelectionMark(),9);						
		newUser.m_BACK=list->GetItemText(list->GetSelectionMark(),10);		
		UpdateData(FALSE);
	//	(CButton*)newUser.GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
		newUser.operate=LOOK;
		newUser.DoModal();
	}
	else
		MessageBox("Same提醒你:\n请选择一个朋友","出错",MB_OK|MB_ICONSTOP);
}

void CMyDlg::OnFinduser() 
{
	{
		CAddUser findUser;
		findUser.operate=FIND;
		findUser.FindCount(list,m_FIND,m_FINDCONTENT);
		findUser.DoModal();
	}
	return ;
}

void CMyDlg::OnChangeEdit1() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	UpdateData(TRUE);
	if(m_FINDCONTENT.IsEmpty())
		((CButton*)CWnd::GetDlgItem(IDC_FINDUSER))->EnableWindow(FALSE);
	else
		((CButton*)CWnd::GetDlgItem(IDC_FINDUSER))->EnableWindow(TRUE);
	// TODO: Add your control notification handler code here
	
}
void CMyDlg::OnSavebutton()
{
	if(step){		
	CSaveData save(list);
	if(save.Save()){
		step=FALSE;
		((CButton*)CWnd::GetDlgItem(IDC_SAVEBUTTON))->EnableWindow(FALSE);
	}
	}
}
void CMyDlg::OnVersion() 
{
	CAboutDlg  dlg;
	dlg.DoModal();	
}

void CMyDlg::OnClose() 
{
	SaveModiFile();
	CDialog::OnClose();
}

void CMyDlg::SaveModiFile()
{
	if(step){
lable:
		if(MessageBox("当前信息已修改,存盘吗?","存盘",MB_ICONINFORMATION|MB_YESNO)==IDYES){
			CSaveData save(list);
			if(!save.Save())goto lable;
		}		
	}
}

void CMyDlg::OnExit() 
{
	SaveModiFile();
	this->PostMessage(WM_CLOSE);	
}

void CMyDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	if((list->GetSelectionMark())!=-1)OnLook() ;
	*pResult = 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -