www.gusucode.com > VC++编写的SQL服务端和客户端源码程序 > VC++编写的SQL服务端和客户端源码程序\code\Server\UserView.cpp
// UserView.cpp : implementation file // Download by http://www.NewXing.com #include "stdafx.h" #include "miniSQL.h" #include "UserView.h" #include "UserDoc.h" #include "Error.h" #include "AddUserDlg.h" #include "ViewDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern CMiniSQLApp theApp; ///////////////////////////////////////////////////////////////////////////// // CUserView IMPLEMENT_DYNCREATE(CUserView, CListView) CUserView::CUserView() { ItemIndex = 0; } CUserView::~CUserView() { } BEGIN_MESSAGE_MAP(CUserView, CListView) //{{AFX_MSG_MAP(CUserView) ON_WM_RBUTTONDOWN() ON_COMMAND(ID_ADD_USER, OnAddUser) ON_COMMAND(ID_DEL_USER, OnDelUser) ON_WM_LBUTTONDBLCLK() ON_COMMAND(ID_USER_VIEW, OnUserView) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CUserView drawing void CUserView::OnDraw(CDC* pDC) { CDocument* pDoc = GetDocument(); // TODO: add draw code here } ///////////////////////////////////////////////////////////////////////////// // CUserView diagnostics #ifdef _DEBUG void CUserView::AssertValid() const { CListView::AssertValid(); } void CUserView::Dump(CDumpContext& dc) const { CListView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CUserView message handlers void CUserView::OnInitialUpdate() { CListView::OnInitialUpdate(); CListCtrl& theCtrl = GetListCtrl(); CUserDoc* pDoc = ( CUserDoc* )GetDocument(); LV_COLUMN LVColumn; DWORD dwStyle = ListView_GetExtendedListViewStyle( GetListCtrl() ); dwStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP | LVS_EX_TRACKSELECT; ListView_SetExtendedListViewStyle (GetListCtrl(),dwStyle); theCtrl.DeleteAllItems(); CString _COL_LABLE[] = { _T("用户名"), _T("授权类型"), _T("用户描述") }; int _COL_LEN[] = { 100, 100, 400 }; LVColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; for ( int column = 0; column < 3; column ++ ){ LVColumn.fmt = LVCFMT_LEFT; LVColumn.cx = _COL_LEN[ column ]; LVColumn.pszText = (LPTSTR)(LPCTSTR) _COL_LABLE[ column ]; LVColumn.iSubItem = column; theCtrl.InsertColumn( column, &LVColumn ); } int i; i = theCtrl.InsertItem( LVIF_TEXT | LVIF_PARAM, ItemIndex++, "admin", 0, 0, 0, 0); theCtrl.SetItem( i, 1, LVIF_TEXT, "Administrator", 0, 0, 0, 0); theCtrl.SetItem( i, 2, LVIF_TEXT, "The default Administrator profile.", 0, 0, 0, 0); i = theCtrl.InsertItem( LVIF_TEXT | LVIF_PARAM, ItemIndex++, "superuser", 0, 0, 0, 0); theCtrl.SetItem( i, 1, LVIF_TEXT, "Super User", 0, 0, 0, 0); theCtrl.SetItem( i, 2, LVIF_TEXT, "The default Super User profile.", 0, 0, 0, 0); i = theCtrl.InsertItem( LVIF_TEXT | LVIF_PARAM, ItemIndex++, "user", 0, 0, 0, 0); theCtrl.SetItem( i, 1, LVIF_TEXT, "User", 0, 0, 0, 0); theCtrl.SetItem( i, 2, LVIF_TEXT, "The default User profile.", 0, 0, 0, 0); for( int j = 0; j < pDoc->m_UserList.GetCount(); j++ ) { CUser user = pDoc->m_UserList.GetAt( pDoc->m_UserList.FindIndex( j ) ); i = theCtrl.InsertItem( LVIF_TEXT | LVIF_PARAM, ItemIndex++, user.m_user, 0, 0, 0, 0); theCtrl.SetItem( i, 1, LVIF_TEXT, GetProfile( user ), 0, 0, 0, 0); theCtrl.SetItem( i, 2, LVIF_TEXT, user.m_descrip, 0, 0, 0, 0); } } BOOL CUserView::PreCreateWindow(CREATESTRUCT& cs) { cs.style |= LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS; return CListView::PreCreateWindow( cs ); } CString CUserView::GetProfile( CUser& user ) { switch( user.m_type ) { case LOG_ADMIN: return _T("Adminitrator"); case LOG_SUPERUSER: return _T("Super User"); case LOG_USER: return _T("User"); default: throw Error( ERROR_PROFILE, 0, _T("") ); } } void CUserView::OnRButtonDown(UINT nFlags, CPoint point) { CMenu Menu; Menu.LoadMenu( IDR_USER ); CMenu* SubMenu = Menu.GetSubMenu( 0 ); CPoint pt = point; ClientToScreen( &pt ); SubMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this ); // fucking line // CListView::OnRButtonDown(nFlags, point); } void CUserView::OnAddUser() { CAddUserDlg dlg; if( dlg.DoModal() == IDOK ) { if( dlg.m_code != dlg.m_recode ) { AfxMessageBox("两处密码不相符,请重输!"); OnAddUser(); return; } if( !dlg.m_code.GetLength() || !dlg.m_name.GetLength() ) { AfxMessageBox("用户名或密码不能为空,请重输!"); OnAddUser(); return; } if( dlg.m_name == _T("admin") || dlg.m_name == _T("superuser") || dlg.m_name == _T("user") ) { AfxMessageBox("用户名已存在,请重输!"); OnAddUser(); return; } CUserDoc* pDoc = ( CUserDoc* )GetDocument(); for( int i = 0; i < pDoc->m_UserList.GetCount(); i++ ) { CUser user = pDoc->m_UserList.GetAt( pDoc->m_UserList.FindIndex( i ) ); if( dlg.m_name == user.m_user ) { AfxMessageBox("用户名已存在,请重输!"); OnAddUser(); return; } } CUser user( dlg.m_name, dlg.m_code, GetProfile( dlg.m_type ), dlg.m_descrip ); pDoc->m_UserList.AddTail( user ); InsertItem( user ); pDoc->OnSaveDocument( pDoc->GetPathName() ); } } DWORD CUserView::GetProfile( int type ) { switch( type ) { case 0: return LOG_ADMIN; case 1: return LOG_SUPERUSER; case 2: return LOG_USER; default: throw Error(); } } void CUserView::InsertItem( CUser& user ) { CListCtrl& theCtrl = GetListCtrl(); int i = theCtrl.InsertItem( LVIF_TEXT | LVIF_PARAM, ItemIndex++, user.m_user, 0, 0, 0, 0); theCtrl.SetItem( i, 1, LVIF_TEXT, GetProfile( user ), 0, 0, 0, 0); theCtrl.SetItem( i, 2, LVIF_TEXT, user.m_descrip, 0, 0, 0, 0); } void CUserView::OnDelUser() { CListCtrl& theCtrl = GetListCtrl(); int index = theCtrl.GetNextItem( -1, LVNI_SELECTED ); if( index == -1 ) { AfxMessageBox( "请选择要删除的帐户!" ); return ; } if( index >=0 && index <= 2 ) { AfxMessageBox( "这是默认帐户,无法删除!" ); return ; } CString name = theCtrl.GetItemText( index, 0 ); if( name == theApp.m_LogName ) { if( AfxMessageBox( "这是当前用户的帐户,\n删除将无法撤销且要求重新登陆!", MB_YESNO | MB_ICONQUESTION ) == IDYES ) { DelDocItem( name ); theCtrl.DeleteItem( index ); theApp.Logon(); } } else { if( AfxMessageBox( "真的要删除" + name + "的帐户吗?\n这将无法撤销!", MB_YESNO | MB_ICONQUESTION ) == IDYES ) { DelDocItem( name ); theCtrl.DeleteItem( index ); } } } void CUserView::DelDocItem( CString& name ) { CUserDoc* pDoc = ( CUserDoc* )GetDocument(); POSITION pos = pDoc->m_UserList.GetHeadPosition(); while( pos ) { POSITION old = pos; CUser user = pDoc->m_UserList.GetNext( pos ); if( user.m_user == name ) { pDoc->m_UserList.RemoveAt( old ); pDoc->OnSaveDocument( pDoc->GetPathName() ); break; } } } void CUserView::OnLButtonDblClk(UINT nFlags, CPoint point) { OnUserView(); CListView::OnLButtonDblClk(nFlags, point); } int CUserView::GetProfile( DWORD d ) { switch( d ) { case LOG_ADMIN: return 0; case LOG_SUPERUSER: return 1; case LOG_USER: return 2; default: throw Error(); } } void CUserView::OnUserView() { CListCtrl& theCtrl = GetListCtrl(); CUserDoc* pDoc = (CUserDoc* )GetDocument(); int index = theCtrl.GetNextItem( -1, LVNI_SELECTED ); if( index == -1 ) return ; if( index >=0 && index <= 2 ) { AfxMessageBox( "这是默认帐户,无法查看、更新!" ); return ; } CString name = theCtrl.GetItemText( index, 0 ); CUser* user; POSITION pos = pDoc->m_UserList.GetHeadPosition(); while( pos ) { user = &pDoc->m_UserList.GetNext( pos ); if( user->m_user == name ) break; } CViewDlg dlg; dlg.m_name = user->m_user; dlg.m_type = GetProfile( user->m_type ); dlg.m_descrip = user->m_descrip; if( dlg.DoModal() == IDOK ) { if( user->m_user == theApp.m_LogName && dlg.m_type != GetProfile( user->m_type ) ) { if( AfxMessageBox( "这是当前用户的帐户,\n更改授权类型要求重新登陆!", MB_YESNO | MB_ICONQUESTION ) == IDYES ) { user->m_type = GetProfile( dlg.m_type ); user->m_descrip = dlg.m_descrip; pDoc->OnSaveDocument( pDoc->GetPathName() ); theApp.Logon(); } else return; } else { user->m_type = GetProfile( dlg.m_type ); user->m_descrip = dlg.m_descrip; pDoc->OnSaveDocument( pDoc->GetPathName() ); theCtrl.SetItemText( index, 1, GetProfile( *user ) ); theCtrl.SetItemText( index, 2, dlg.m_descrip ); } } }