www.gusucode.com > VC++毕业设计_高校宿舍管理系统附论文源码程序 > VC++毕业设计_高校宿舍管理系统附论文源码程序/code/源代码/UsersListView.cpp
// UsersListView.cpp : implementation file // Download by http://www.NewXing.com #include "stdafx.h" #include "Inhabitants.h" #include "UsersListView.h" #include "InhabitantsDoc.h" #include "MainFrm.h" #include "House.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_WM_RBUTTONDOWN() 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); // 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 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.Height()/3; GetListCtrl().InsertColumn(i, &lvcolumn); } } void CUsersListView::OnInitialUpdate() { CListView::OnInitialUpdate(); 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; //按照strSql查询符合条件的学生 if(dbHouse.Open(pDoc->m_dbHouse.m_session,strSql,NULL,pCount) != S_OK) { AfxMessageBox("error"); delete pCount; return; } 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_studentname; lvitem.pszText =(LPTSTR)(LPCTSTR)str; break; case 1://宿舍类型 { str = dbHouse.m_roomtype; 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_roomnum); lvitem.pszText = (LPTSTR)(LPCTSTR)str; break; } case 4://床铺号 { str.Format("%d",dbHouse.m_bednum); lvitem.pszText = (LPTSTR)(LPCTSTR)str; } } 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 strStudentName = pCtrl->GetItemText(nHitItem,1); CString strBuildingNum = pCtrl->GetItemText(nHitItem,2); CString strRoomNum = pCtrl->GetItemText(nHitItem,3); CString strBedNum = pCtrl->GetItemText(nHitItem,4); CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument(); pFrame->SwitchToView(USERINFOVIEW); pFrame->m_pUserinfoView->UpdateUserInfo(strStudentName,atoi(strBuildingNum.GetBuffer(0)), atoi(strRoomNum.GetBuffer(0)),atoi(strBedNum.GetBuffer(0))); } void CUsersListView::OnOperateDelete() { 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 strStudentName = pCtrl->GetItemText(nHitItem,1); CString strBuildingNum = pCtrl->GetItemText(nHitItem,2); CString strRoomNum = pCtrl->GetItemText(nHitItem,3); CString strBedNum = pCtrl->GetItemText(nHitItem,4); CString strSql; strSql.Format("delete * from house where roomtype = '%s' and buildingnum = %s and roomnum = %s and bednum = %s", strStudentName,strBuildingNum,strRoomNum,strBedNum); CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument(); pDoc->DeleteUser(strSql); } CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; pFrame->m_pLeftView->AddUsersToTree(); } void CUsersListView::OnUpdateOperateDelete(CCmdUI* pCmdUI) { pCmdUI->Enable(GetListCtrl().GetFirstSelectedItemPosition() != NULL); }