📄 personslistview.cpp
字号:
// PersonsListView.cpp : implementation file
//
#include "stdafx.h"
#include "ADDRESS.h"
#include "PersonsListView.h"
#include "ADDRESSDoc.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPersonsListView
IMPLEMENT_DYNCREATE(CPersonsListView, CListView)
CPersonsListView::CPersonsListView()
{
}
CPersonsListView::~CPersonsListView()
{
}
BEGIN_MESSAGE_MAP(CPersonsListView, CListView)
//{{AFX_MSG_MAP(CPersonsListView)
ON_WM_LBUTTONDBLCLK()
ON_COMMAND(ID_DEL, OnDel)
ON_UPDATE_COMMAND_UI(ID_DEL, OnUpdateDel)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPersonsListView drawing
void CPersonsListView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CPersonsListView diagnostics
#ifdef _DEBUG
void CPersonsListView::AssertValid() const
{
CListView::AssertValid();
}
void CPersonsListView::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CPersonsListView message handlers
void CPersonsListView::SetListCtrlStyle()
{
DWORD dwStyle = GetWindowLong(m_hWnd, GWL_STYLE);
dwStyle &= ~(LVS_TYPEMASK);
dwStyle &= ~(LVS_EDITLABELS);
// Make sure we have report view and send edit label messages.
SetWindowLong( m_hWnd, GWL_STYLE,
dwStyle | LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS);
// Enable the full row selection and the drag drop of headers.
DWORD styles = LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;
// Use macro since this is new and not in MFC.
ListView_SetExtendedListViewStyleEx(m_hWnd, styles, styles );
}
void CPersonsListView::SetTitle()
{
TCHAR rgtsz[5][10] = {_T("姓名"),_T("手机号"),_T("qq号"),
_T("email"),_T("分类")};
LV_COLUMN lvcolumn;
CRect rect;
this->GetWindowRect(&rect);
for(int i=0;i<5;i++)
{
lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT
| LVCF_WIDTH | LVCF_ORDER;
lvcolumn.fmt = LVCFMT_LEFT;
lvcolumn.pszText = rgtsz[i];
lvcolumn.iSubItem = i;
lvcolumn.iOrder = i;
lvcolumn.cx = rect.Height()/3;
GetListCtrl().InsertColumn(i, &lvcolumn);
}
}
void CPersonsListView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
SetListCtrlStyle();
SetTitle();
}
void CPersonsListView::ShowPersons(CString strSql)
{
CListCtrl* p = &GetListCtrl();
//清空列表
p->DeleteAllItems();
if(strSql == "")
return;
CADDRESSDoc* pDoc = (CADDRESSDoc*)GetDocument();
CCommand<CAccessor<CAddress_listAccessor> > dbaddresslist;
long* pCount = new long;
//按照strSql查询符合条件的联系人
if(dbaddresslist.Open(pDoc->m_dbaddresslist.m_session,strSql,NULL,pCount) != S_OK)
{
AfxMessageBox("error");
delete pCount;
return;
}
int iItem = 0;
LV_ITEM lvitem;
int iActualItem = 0;
//将查询得到的联系人都逐个加入列表中
if(dbaddresslist.MoveFirst() == S_OK)
{
do
{
for(int iSubItem=0;iSubItem<5;iSubItem++)
{
lvitem.mask = LVIF_TEXT|(iSubItem == 0? LVIF_IMAGE : 0);
lvitem.iItem = (iSubItem == 0)? iItem : iActualItem;
lvitem.iSubItem = iSubItem;
lvitem.iImage = (iItem%2)?0:2;
CString str = "";
switch(iSubItem)
{
case 0://姓名
str = dbaddresslist.m_name;
lvitem.pszText =(LPTSTR)(LPCTSTR)str;
break;
case 1://手机号
{
str = dbaddresslist.m_mobile;
lvitem.pszText = (LPTSTR)(LPCTSTR) str;
break;
}
case 2://qq号
{
str = dbaddresslist.m_qq;
lvitem.pszText = (LPTSTR)(LPCTSTR) str;
break;
}
case 3://email
{
str = dbaddresslist.m_email;
lvitem.pszText = (LPTSTR)(LPCTSTR)str;
break;
}
case 4://分类
{
str = dbaddresslist.m_groups;
lvitem.pszText = (LPTSTR)(LPCTSTR)str;
break;
}
}
if (iSubItem == 0)
iActualItem = GetListCtrl().InsertItem(&lvitem);
else
GetListCtrl().SetItem(&lvitem);
}
iItem ++;
}
while( dbaddresslist.MoveNext() == S_OK );
}
if(iItem==0){
AfxMessageBox("没有这个联系人");
return;
}
dbaddresslist.Close();
}
void CPersonsListView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CListView::OnLButtonDblClk(nFlags, point);
//获得双击的项
CListCtrl* pCtrl = &GetListCtrl();
int nHitItem = pCtrl->HitTest(point,NULL);
if( nHitItem < 0 )
return;
CString strGroupName = pCtrl->GetItemText(nHitItem,4);
CString strPersonName = pCtrl->GetItemText(nHitItem,0);
CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
CADDRESSDoc* pDoc = (CADDRESSDoc*)GetDocument();
pFrame->SwitchToView(PERSONINFOVIEW);
pFrame->m_pPersoninfoView->UpdatePersonInfo(strGroupName,strPersonName);
}
void CPersonsListView::OnDel()
{
// TODO: Add your command handler code here
CListCtrl* pCtrl = &GetListCtrl();
POSITION pos = pCtrl->GetFirstSelectedItemPosition();
if( pos == NULL )
{
AfxMessageBox("请选择要删除的联系人");
return;
}
if(this->MessageBox("你真的要删除选择的所有联系人吗?",
"通讯录管理系统",MB_YESNO)==IDNO)
return;
//删除选择的所有联系人
while (pos)
{
int nHitItem = pCtrl->GetNextSelectedItem(pos);
CString strGroupName = pCtrl->GetItemText(nHitItem,4);
CString strName = pCtrl->GetItemText(nHitItem,0);
CString strMobile = pCtrl->GetItemText(nHitItem,1);
CString strQQ = pCtrl->GetItemText(nHitItem,2);
CString strSql;
strSql.Format("delete * from addresslist where groups = '%s' and name = '%s' and mobile = '%s' and qq = '%s'",
strGroupName,strName,strMobile,strQQ);
CADDRESSDoc* pDoc = (CADDRESSDoc*)GetDocument();
pDoc->DeletePerson(strSql);
}
CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
pFrame->m_pLeftView->AddPersonsToTree();
}
void CPersonsListView::OnUpdateDel(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(GetListCtrl().GetFirstSelectedItemPosition() != NULL);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -