📄 maindlg.cpp
字号:
#include "stdafx.h"
#include "Address.h"
#include "MainDlg.h"
#include "PersonSet.h"
#include "ChangePswDlg.h"
#include "AddInfoDlg.h"
#include "Aboutdlg.h"
#include "ModifyDlg.h"
#include "SearchDlg1.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainDlg dialog
//////////////////////////////////////////////////////////////////////
//名称:构造函数
//功能:对象产生则调用此函数
//////////////////////////////////////////////////////////////////////
CMainDlg::CMainDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMainDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMainDlg)
m_input = _T("");
//}}AFX_DATA_INIT
}
//////////////////////////////////////////////////////////////////////
//功能:实现数据交换
//////////////////////////////////////////////////////////////////////
void CMainDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMainDlg)
DDX_Control(pDX, IDC_LIST1, m_ctrlperson);
//DDX_Text(pDX, IDC_INPUT_EDIT, m_input);
//}}AFX_DATA_MAP
}
//////////////////////////////////////////////////////////////////////
//功能:消息映射
//////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CMainDlg, CDialog)
//{{AFX_MSG_MAP(CMainDlg)
ON_COMMAND(ID_MENU_MODPSW, OnMenuModpsw)
ON_COMMAND(ID_MENU_ABOUT, OnMenuAbout)
ON_COMMAND(ID_MENU_DEL, OnMenuDel)
ON_COMMAND(ID_MENU_ADD, OnMenuAdd)
ON_COMMAND(ID_MENU_HELP, OnMenuHelp)
ON_COMMAND(ID_MENU_EXIT, OnMenuExit)
ON_COMMAND(ID_MENU_MOD, OnMenuMod)
ON_COMMAND(ID_MENU_SAVE, OnMenuSave)
ON_COMMAND(ID_MENU_SEARCH, OnMenuSearch)
ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickList1)
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_EDIT, OnEdit)
ON_BN_CLICKED(IDC_DELETE, OnDelete)
ON_BN_CLICKED(IDC_SEARCH, OnSearch)
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)
ON_BN_CLICKED(IDC_SHOW, OnShow)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMainDlg message handlers
//////////////////////////////////////////////////////////////////////
//名称:OnInitDialog
//功能:初始化对话框图
BOOL CMainDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
//让窗口出现时居中
CenterWindow();
//为标题栏加图标
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
this->SetIcon(m_hIcon,TRUE);
//设定列的颜色
m_ctrlperson.SetTextColor(RGB(100,0,100));
m_ctrlperson.SetTextBkColor(RGB(240,247,233));
//确定列名
m_ctrlperson.InsertColumn(0,"序号");
m_ctrlperson.InsertColumn(1,"姓名");
m_ctrlperson.InsertColumn(2,"性别");
m_ctrlperson.InsertColumn(3,"关系");
m_ctrlperson.InsertColumn(4,"联系电话");
m_ctrlperson.InsertColumn(5,"手机号码");
m_ctrlperson.InsertColumn(6,"家庭住址");
m_ctrlperson.InsertColumn(7,"工作单位");
m_ctrlperson.InsertColumn(8,"E_mail地址");
m_ctrlperson.InsertColumn(9,"OICQ号码");
//重新分配列宽
m_ctrlperson.SetColumnWidth(0,40);
m_ctrlperson.SetColumnWidth(1,60);
m_ctrlperson.SetColumnWidth(2,40);
m_ctrlperson.SetColumnWidth(3,80);
m_ctrlperson.SetColumnWidth(4,100);
m_ctrlperson.SetColumnWidth(5,100);
m_ctrlperson.SetColumnWidth(6,150);
m_ctrlperson.SetColumnWidth(7,150);
m_ctrlperson.SetColumnWidth(8,150);
m_ctrlperson.SetColumnWidth(9,80);
//扩展风格
m_ctrlperson.SetExtendedStyle(LVS_EX_FULLROWSELECT| LVS_EX_GRIDLINES);//|LVS_SHOWSELALWAYS);
//查找记录并按ID升序排列
m_query.Format("select * from person order by ID ASC");
RefreshData();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//////////////////////////////////////////////////////////////////////
//名称:RefreshData
//功能:刷新数据显示
//////////////////////////////////////////////////////////////////////
void CMainDlg::RefreshData()
{
//首先确保数据库打开
if(!m_database.IsOpen())
{
m_database.Open(_T("addresslist"));
}
//对列表控件的内容更新,清空原来的内容
m_ctrlperson.DeleteAllItems();
//创建记录集
CPersonSet m_personset(&m_database);
m_personset.Open(AFX_DB_USE_DEFAULT_TYPE,m_query);
CDBVariant varValue;
char buf[20];
//用来记录当前记录的序号
int i=0;
//如果表中有记录,打开后将游标定在第一位,使记录集中的第一条记录成为当前记录
if(m_personset.GetRecordCount()!=0) m_personset.MoveFirst();
while(!m_personset.IsEOF())
{
int temp=0;
//对整型数字的处理
m_personset.GetFieldValue(temp,varValue);
sprintf(buf,"%d",varValue.m_lVal);m_ctrlperson.InsertItem(i,buf);
//对字符串显示处理
m_personset.GetFieldValue(1,varValue);
m_ctrlperson.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(2,varValue);
m_ctrlperson.SetItemText(i,2,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(3,varValue);
m_ctrlperson.SetItemText(i,3,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(4,varValue);
m_ctrlperson.SetItemText(i,4,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(5,varValue);
m_ctrlperson.SetItemText(i,5,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(6,varValue);
m_ctrlperson.SetItemText(i,6,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(7,varValue);
m_ctrlperson.SetItemText(i,7,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(8,varValue);
m_ctrlperson.SetItemText(i,8,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(9,varValue);
m_ctrlperson.SetItemText(i,9,varValue.m_pstring->GetBuffer(1));
m_personset.MoveNext();
i++;
}
//在标题栏中显示共有记录条数
int counts=m_personset.GetRecordCount();
CString str;
str.Format("通讯录 V1.0 目前共有记录数: %d",counts);
this->SetWindowText(str);
}
//////////////////////////////////////////////////////////////////////
//功能:弹出更改口令窗口
void CMainDlg::OnMenuModpsw()
{
// TODO: Add your command handler code here
CChangePswDlg dlg;
dlg.DoModal();
}
//////////////////////////////////////////////////////////////////////
//功能:弹出"关于"窗口
void CMainDlg::OnMenuAbout()
{
// TODO: Add your command handler code here
CAboutdlg dlg;
dlg.DoModal();
}
//////////////////////////////////////////////////////////////////////
//功能:弹出删除记录窗口
//////////////////////////////////////////////////////////////////////
void CMainDlg::OnMenuDel()
{
// TODO: Add your command handler code here
//i是记录中所选的记录号,如果没有则返回
int i=m_ctrlperson.GetSelectionMark();
CString strSQL,msg,strname;
strname=m_ctrlperson.GetItemText(i,1);
msg.Format("第 %d 项,姓名为“%s”的记录将被删除!是否继续?",i+1,strname);
//如果用户没有选择记录,则提示选取一条记录
if(i==-1)
{
MessageBox("请选择一条要删除的记录!","提示",MB_OK|MB_ICONINFORMATION);
}
else
{
if(MessageBox(msg,"提示",MB_YESNO|MB_ICONINFORMATION)==IDYES)
{
CString strname=m_ctrlperson.GetItemText(i,1);
//从表中删除对应的记录
strSQL.Format("delete from person where NAME='%s'",strname);
m_database.ExecuteSQL(strSQL);
m_database.Close();
RefreshData();
}
}
}
//////////////////////////////////////////////////////////////////////
//功能:弹出增加数据窗口
//////////////////////////////////////////////////////////////////////
void CMainDlg::OnMenuAdd()
{
// TODO: Add your command handler code here
//本对话框对应的数据库连接关闭
m_database.Close();
//新建一个CAddInfoDlg的对象
CAddInfoDlg dlg;
//新对话框建立到数据库连接
dlg.m_database.Open(_T("addresslist"));
//弹出新对话框
dlg.DoModal();
//新对话框关闭后,在原对话框中刷新数据显示
RefreshData();
}
//////////////////////////////////////////////////////////////////////
//功能:弹出help窗口
//////////////////////////////////////////////////////////////////////
void CMainDlg::OnMenuHelp()
{
// TODO: Add your command handler code here
}
//////////////////////////////////////////////////////////////////////
//功能:退出系统
//////////////////////////////////////////////////////////////////////
void CMainDlg::OnMenuExit()
{
// TODO: Add your command handler code here
CMainDlg::OnCancel();
}
//////////////////////////////////////////////////////////////////////
//功能:弹出修改记录窗口
//////////////////////////////////////////////////////////////////////
void CMainDlg::OnMenuMod()
{
// TODO: Add your command handler code here
m_database.Close();//本对话框断开与数据库的连接
CModifyDlg dlg;
dlg.m_database.Open(_T("addresslist"));
int i=m_ctrlperson.GetSelectionMark();
CString strSQL;
int id=atoi(m_ctrlperson.GetItemText(i,0));
CPersonSet m_recordset;
CDBVariant varValue;
if(i==-1)
{
MessageBox("请选择一条要修改的记录!","提示",MB_OK|MB_ICONINFORMATION);
}
else
{
int temp=0;
strSQL.Format("select * from person where ID=%d",id);
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
m_recordset.GetFieldValue(temp,varValue);
dlg.m_modid=varValue.m_lVal;
m_recordset.GetFieldValue(1,varValue);
dlg.m_modname=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(2,varValue);
dlg.m_modsex=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(3,varValue);
dlg.m_modtelephone=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(4,varValue);
dlg.m_modtelephone=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(5,varValue);
dlg.m_modhandphone=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(6,varValue);
dlg.m_modaddress=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(7,varValue);
dlg.m_modworkplace=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(8,varValue);
dlg.m_modemail=varValue.m_pstring->GetBuffer(1);
m_recordset.GetFieldValue(9,varValue);
dlg.m_modoicq=varValue.m_pstring->GetBuffer(1);
//m_database.Close();//此处不能断开与数据库的连接
dlg.DoModal();
RefreshData();
}
}
//////////////////////////////////////////////////////////////////////
//功能:以文本格式保存记录
//////////////////////////////////////////////////////////////////////
void CMainDlg::OnMenuSave()
{
// TODO: Add your command handler code here
CFileDialog filedlg(FALSE,_T("txt"),_T("*.txt"));
filedlg.DoModal();
}
//////////////////////////////////////////////////////////////////////
//功能:展开查询窗口
//////////////////////////////////////////////////////////////////////
void CMainDlg::OnMenuSearch()
{
// TODO: Add your command handler code here
OnSearch();
}
BOOL CMainDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
return CDialog::PreTranslateMessage(pMsg);
}
//////////////////////////////////////////////////////////////////////
//功能:单击列表时显示高亮
//////////////////////////////////////////////////////////////////////
void CMainDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
//得到所选取项的标号
int i=m_ctrlperson.GetSelectionMark();
//为所选的项设为高亮
m_ctrlperson.SetHotItem(i);
*pResult = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -