📄 userslistview.cpp
字号:
// UsersListView.cpp : implementation file
//
#include "stdafx.h"
#include "INhabitants.h"
#include "UsersListView.h"
#include "INhabitantsDoc.h"
#include "MainFrm.h"
#include "UserinfoView.h"
#include "LeftTreeView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CUsersListView
IMPLEMENT_DYNCREATE(CUsersListView, CListView)
CUsersListView::CUsersListView()
{
}
CUsersListView::~CUsersListView()
{
}
BEGIN_MESSAGE_MAP(CUsersListView, CListView)
//{{AFX_MSG_MAP(CUsersListView)
ON_WM_LBUTTONDBLCLK()
ON_COMMAND(ID_OPERATE_DELETE, OnOperateDelete)
ON_UPDATE_COMMAND_UI(ID_OPERATE_DELETE, OnUpdateOperateDelete)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CUsersListView drawing
void CUsersListView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CUsersListView diagnostics
#ifdef _DEBUG
void CUsersListView::AssertValid() const
{
CListView::AssertValid();
}
void CUsersListView::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CUsersListView message handlers
void CUsersListView::SetListCtrlStyle()
{
DWORD dwStyle = GetWindowLong(m_hWnd, GWL_STYLE);
dwStyle &= ~(LVS_TYPEMASK);
dwStyle &= ~(LVS_EDITLABELS);
SetWindowLong(m_hWnd, GWL_STYLE,
dwStyle | LVS_REPORT | LVS_NOLABELWRAP | LVS_SHOWSELALWAYS);
DWORD styles = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
ListView_SetExtendedListViewStyleEx(m_hWnd, styles, styles);
}
void CUsersListView::SetTitle()
{
TCHAR rgtsz[5][10] = {
_T("户主"), _T("所属小区"), _T("所属楼号"),
_T("所属单元"), _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.Width() / 5;
GetListCtrl().InsertColumn(i, &lvcolumn);
}
}
void CUsersListView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
SetListCtrlStyle();
SetTitle();
}
void CUsersListView::ShowUsers(CString strSql)
{
CListCtrl * p = &GetListCtrl();
p->DeleteAllItems();
if(strSql == "")
return;
CINhabitantsDoc * pDoc = (CINhabitantsDoc *)GetDocument();
CCommand<CAccessor<ChouseAccessor> > dbHouse;
long * pCount = new long;
if(dbHouse.Open(pDoc->m_dbHouse.m_session, strSql, NULL, pCount) != S_OK){
AfxMessageBox("error");
delete pCount;
return;
}
delete pCount;
int iItem = 0;
LV_ITEM lvitem;
int iActualItem = 0;
if(dbHouse.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 = dbHouse.m_housemaster;
lvitem.pszText = (LPTSTR)(LPCTSTR)str;
break;
}
case 1:
{
str = dbHouse.m_sectionname;
lvitem.pszText = (LPTSTR)(LPCTSTR)str;
break;
}
case 2:
{
str.Format("%d", dbHouse.m_buildingnum);
lvitem.pszText = (LPTSTR)(LPCTSTR)str;
break;
}
case 3:
{
str.Format("%d", dbHouse.m_cellnum);
lvitem.pszText = (LPTSTR)(LPCTSTR)str;
break;
}
case 4:
{
str.Format("%d", dbHouse.m_roomnum);
lvitem.pszText = (LPTSTR)(LPCTSTR)str;
break;
}
}
if(iSubItem == 0)
iActualItem = GetListCtrl().InsertItem(&lvitem);
else
GetListCtrl().SetItem(&lvitem);
}
iItem++;
}while(dbHouse.MoveNext() == S_OK);
}
dbHouse.Close();
}
void CUsersListView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CListView::OnLButtonDblClk(nFlags, point);
CListCtrl * pCtrl = &GetListCtrl();
int nHitItem = pCtrl->HitTest(point, NULL);
if(nHitItem < 0)
return;
CString strSectionName = pCtrl->GetItemText(nHitItem, 1);
CString strBuildingNum = pCtrl->GetItemText(nHitItem, 2);
CString strCellNum = pCtrl->GetItemText(nHitItem, 3);
CString strRoomNum = pCtrl->GetItemText(nHitItem, 4);
CMainFrame * pFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;
CINhabitantsDoc * pDoc = (CINhabitantsDoc *)GetDocument();
pFrame->SwitchToView(USERINFOVIEW);
pFrame->m_pUserinfoView->UpdateUserInfo(strSectionName,
atoi(strBuildingNum.GetBuffer(0)),
atoi(strCellNum.GetBuffer(0)),
atoi(strRoomNum.GetBuffer(0)));
}
void CUsersListView::OnOperateDelete()
{
// 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 strSectionName = pCtrl->GetItemText(nHitItem, 1);
CString strBuildingNum = pCtrl->GetItemText(nHitItem, 2);
CString strCellNum = pCtrl->GetItemText(nHitItem, 3);
CString strRoomNum = pCtrl->GetItemText(nHitItem, 4);
CString strSql;
strSql.Format("delete * from house where sectionname = '%s' \
and buildingnum = %s and cellnum = %s and roomnum = %s",
strSectionName, strBuildingNum, strCellNum, strRoomNum);
CINhabitantsDoc * pDoc = (CINhabitantsDoc *)GetDocument();
pDoc->DeleteUser(strSql);
}
CMainFrame * pFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;
pFrame->m_pLeftView->AddUsersToTree();
}
void CUsersListView::OnUpdateOperateDelete(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 + -