SmsManager/ManagerDlg.cpp

463 lines
13 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ManagerDlg.cpp : implementation file
//
#include "stdafx.h"
#include "smsmanager.h"
#include "ManagerDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CManagerDlg dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_Manager_Modify.h"
CManagerDlg::CManagerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CManagerDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CManagerDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_bInit = false;
m_bRefresh = false;
}
void CManagerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CManagerDlg)
DDX_Control(pDX, IDC_MANAGER_LIST, m_wndList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CManagerDlg, CDialog)
//{{AFX_MSG_MAP(CManagerDlg)
ON_WM_SIZE()
ON_NOTIFY(NM_DBLCLK, IDC_MANAGER_LIST, OnDblclkManagerList)
ON_NOTIFY(NM_RCLICK, IDC_MANAGER_LIST, OnRclickManagerList)
//}}AFX_MSG_MAP
ON_COMMAND( MENU_MANAGER_ADD , On_User_Add)
ON_COMMAND( MENU_MANAGER_MODIFY , On_User_Modify)
ON_COMMAND( MENU_MANAGER_DEL , On_User_Del)
ON_COMMAND( MENU_MANAGER_REFRESH, On_User_Refresh)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CManagerDlg message handlers
void CManagerDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if ( m_bInit )
{
m_wndList.MoveWindow( 0 , 0 , cx,cy);
}
}
BOOL CManagerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//È¡µÃ¹²ÓòÎÊý
//CMainFrame * pFrame = static_cast <CMainFrame *>((CMainFrame *)AfxGetMainWnd());
this->GetParent()->GetParentFrame();
m_pMainFrame = (CMainFrame *)this->GetParent()->GetParentFrame();
m_pSocket = &m_pMainFrame->m_Socket;
//³õʼ»¯List
m_Image.Create(16,16,ILC_COLOR16|ILC_MASK,5,5);
m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_MANAGER) );
m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_LOCK) );
m_wndList.SubClassWindow2();
m_wndList.SetHeadings(_T("ÐòºÅ,50;µÇ¼Ãû,80;Óû§Ãû,80; ÀàÐÍ,70;µÇ¼´ÎÊý,75;ÉÏÏßʱ¼ä,75;²¿ÃÅ,80;Ö°Îñ,80;µç»°,80;ÊÖ»ú,80;Email,80;"));
m_wndList.SetGridLines(true);
m_wndList.SetImageList(&m_Image,LVSIL_SMALL);
m_bInit = true;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CManagerDlg::ReShow(BOOL bRefresh)
{
ShowWindow( SW_SHOW );
if ( bRefresh || !m_bRefresh )
{
RefreshInfo();
}
return true;
}
BOOL CManagerDlg::ReHide()
{
ShowWindow( SW_HIDE );
return true;
}
BOOL CManagerDlg::RefreshInfo()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_SEE) )
{
return false;
}
m_pMainFrame->SendFrame(SMSFUNC_GETMANAGER,NULL,0);
return true;
}
BOOL CManagerDlg::ProcessSocket(Socket_Head *pHead)
{
//È¡¹ÜÀíÔ±ÐÅÏ¢
if (pHead->lFuncType == SMSFUNC_GETMANAGER)
{
m_bRefresh = true; //ÒѾ­Ë¢Ð¹ý
ANS_GetManager * pManager = (ANS_GetManager *)pHead->pFrame;
ANS_GetManagerData * pData = (ANS_GetManagerData *)(pHead->pFrame+sizeof(ANS_GetManager));
m_wndList.DeleteAllItems(); //ɾ³ýÔ­ÓеÄÄÚÈÝ
this->Close(); //¹Ø±ÕÔ­¶ÓÁÐ
TCHAR Buf[32];
for ( int i=0;i<pManager->lCount;i++ )
{
ANS_GetManagerData * pNewData = new ANS_GetManagerData;
*pNewData = *pData;
POSITION pos = m_Manager.AddTail(pNewData);
//ÐòºÅ,50;µÇ¼Ãû,80;Óû§Ãû,80;µÇ¼´ÎÊý,75;ÉÏÏßʱ¼ä,75;²¿ÃÅ,80;Ö°Îñ,80;µç»°,80;ÊÖ»ú,80;Email,80;"));
_stprintf(Buf , _T("%d") , i+1 );
m_wndList.InsertItem( i , Buf , 0 );
m_wndList.SetItemData( i , (DWORD_PTR)pos ); //´æPos
m_wndList.SetItemText(i,1,pData->szLoginName);
m_wndList.SetItemText(i,2,pData->szName);
if ( pData->lType == 0 )
m_wndList.SetItemText(i,3,_T("¹ÜÀíÔ±"));
else
m_wndList.SetItemText(i,3,_T(" ÖµÊØ"));
m_wndList.SetItemText(i,4,_itot(pData->lLoginCount,Buf,10));
_stprintf( Buf , _T("%02d:%02d:%02d") , pData->tLoginTime.wHour,pData->tLoginTime.wMinute,pData->tLoginTime.wSecond);
m_wndList.SetItemText(i,5,Buf);
m_wndList.SetItemText(i,6,pData->szBranch);
m_wndList.SetItemText(i,7,pData->szJob);
m_wndList.SetItemText(i,8,pData->szTel);
m_wndList.SetItemText(i,9,pData->szMobile);
m_wndList.SetItemText(i,10,pData->szEmail);
pData ++;
}
return true;
}
//Ð޸ĹÜÀíÔ±ÐÅÏ¢
if (pHead->lFuncType == SMSFUNC_MANAGER_MODIFY)
{
ANS_Manager_Modify * pModify = (ANS_Manager_Modify *)pHead->pFrame;
ANS_GetManagerData * pData = (ANS_GetManagerData *)(pHead->pFrame+sizeof(ANS_Manager_Modify));
SetLockItem( pModify->lItem , false ); //½âËø
if ( pModify->lCount == 1 ) //µÈÓÚ1ʱ±íʾÐ޸ijɹ¦
{
POSITION pos = (POSITION)m_wndList.GetItemData(pModify->lItem);
ANS_GetManagerData * pData2 = m_Manager.GetNext( pos );
if ( pData2 )
{
*pData2 = *pData; //È¡µ½ÐµÄÊý¾Ý
//ÉèÖÃеÄÊý¾Ý
m_wndList.SetItemText( pModify->lItem , 1 , pData->szLoginName );
m_wndList.SetItemText( pModify->lItem , 2 , pData->szName );
if ( pData->lType == 0 )
m_wndList.SetItemText(pModify->lItem,3,_T("¹ÜÀíÔ±"));
else
m_wndList.SetItemText(pModify->lItem,3,_T(" ¿Í·þ"));
m_wndList.SetItemText( pModify->lItem , 6 , pData->szBranch );
m_wndList.SetItemText( pModify->lItem , 7 , pData->szJob );
m_wndList.SetItemText( pModify->lItem , 8 , pData->szTel );
m_wndList.SetItemText( pModify->lItem , 9 , pData->szMobile );
m_wndList.SetItemText( pModify->lItem , 10, pData->szEmail );
}
}
return true;
}
//Ìí¼Ó¹ÜÀíÔ±
if (pHead->lFuncType == SMSFUNC_MANAGER_ADD)
{
ANS_Manager_Add * pAdd = (ANS_Manager_Add *)pHead->pFrame;
ANS_GetManagerData * pData = (ANS_GetManagerData *)(pHead->pFrame+sizeof(ANS_Manager_Add));
if ( pAdd->lCount == 1 ) //µÈÓÚ1ʱ±íʾÐ޸ijɹ¦
{
long lCount = m_wndList.GetItemCount();
TCHAR Buf[32];
_stprintf( Buf, _T("%d") , lCount +1 );
//ÉèÖÃеÄÊý¾Ý
m_wndList.InsertItem( lCount , Buf , 0 );
m_wndList.SetItemText( lCount , 1 , pData->szLoginName );
m_wndList.SetItemText( lCount , 2 , pData->szName );
if ( pData->lType == 0 )
m_wndList.SetItemText(lCount,3,_T("¹ÜÀíÔ±"));
else
m_wndList.SetItemText(lCount,3,_T(" ¿Í·þ"));
m_wndList.SetItemText( lCount , 4 , _T("0") ); //д´½¨£¬µÇ¼´ÎÊý×ÔÈ»ÊÇ0
m_wndList.SetItemText( lCount , 5 , _T("") ); //д´½¨£¬ÉÏÏßʱ¼ä×ÔÈ»ÊÇ00:00:00
m_wndList.SetItemText( lCount , 6 , pData->szBranch );
m_wndList.SetItemText( lCount , 7 , pData->szJob );
m_wndList.SetItemText( lCount , 8 , pData->szTel );
m_wndList.SetItemText( lCount , 9 , pData->szMobile );
m_wndList.SetItemText( lCount , 10 , pData->szEmail );
ANS_GetManagerData * pData2 = new ANS_GetManagerData;
*pData2 = *pData;
POSITION pos = m_Manager.AddTail( pData2 );
m_wndList.SetItemData( lCount, (DWORD_PTR)pos );
//Èç¹û·µ»ØµÄÓû§ID´íÎó£¬ÔòÖØÐÂË¢ÐÂ
if ( pData->lManagerID <= 0 )
{
RefreshInfo();
}
}
return true;
}
//ɾ³ý¹ÜÀíÔ±
if (pHead->lFuncType == SMSFUNC_MANAGER_DEL)
{
ANS_Manager_Del * pDel = (ANS_Manager_Del *)pHead->pFrame;
ANS_Manager_DelData * pDelData = (ANS_Manager_DelData *)(pHead->pFrame+sizeof(ANS_Manager_Del));
POSITION pos,pos2;
ANS_GetManagerData * pManagerData;
for ( int i = pDel->lCount-1 ; i>=0 ; i-- )
{
if ( pDelData[i].lUserID ) //ɾ³ý³É¹¦
{
pos = (POSITION)m_wndList.GetItemData( pDelData[i].lItem );
pos2 = pos;
pManagerData = m_Manager.GetNext( pos );
if ( pManagerData->lManagerID == pDelData[i].lUserID ) //IDÏàͬµÄ²Å¿Éɾ³ý
{
delete pManagerData; //ÏÈɾ³ýÊý¾Ý
m_Manager.RemoveAt(pos2); //´ÓÁбíÖÐɾ³ý
m_wndList.DeleteItem(pDelData[i].lItem); //´ÓListCtrlÖÐɾ³ý
}
}
}
return true;
}
return false;
}
void CManagerDlg::Close()
{
//Çå³ý¶ÓÁÐÖеÄÄÚÈÝ
while (!m_Manager.IsEmpty())
{
ANS_GetManagerData * pManager = m_Manager.GetHead();
m_Manager.RemoveHead();
delete pManager;
}
}
void CManagerDlg::OnDblclkManagerList(NMHDR* pNMHDR, LRESULT* pResult)
{
On_User_Modify();
*pResult = 0;
}
void CManagerDlg::On_User_Add()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_ADD) )
{
return ;
}
ANS_GetManagerData managerData={0};
managerData.ulPurview = m_pMainFrame->m_ulPurview; //ȨÏÞÓë×Ô¼ºµÄÏàͬ
DLG_Manager_Modify dlg(this);
dlg.SetParam( managerData,0,managerData.ulPurview,true,true,true);
if ( dlg.DoModal() == IDOK )
{
long lSize = sizeof(REQ_Manager_Add)+sizeof(ANS_GetManagerData);
BYTE * pAddData = new BYTE[lSize];memset(pAddData,0,lSize);
REQ_Manager_Add * pAdd = (REQ_Manager_Add *)pAddData; //Í·
ANS_GetManagerData * pManagerData = (ANS_GetManagerData *)(pAddData+sizeof(REQ_Manager_Add));
*pManagerData = dlg.GetParam();
pAdd->lCount = 1;
m_pMainFrame->SendFrame( SMSFUNC_MANAGER_ADD , pAddData , lSize );
}
}
void CManagerDlg::On_User_Modify()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_MODIFY) )
{
return ;
}
long lItem = GetCurrentSelected();
if ( lItem < 0 )
return ;
if (isLockItem(lItem))
{
return ;
}
POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
POSITION pos2 = pos;
ANS_GetManagerData * pData = m_Manager.GetNext( pos );
if (pData)
{
DLG_Manager_Modify dlg(this);
dlg.SetParam( *pData,pos2,m_pMainFrame->m_ulPurview,m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_MODIFYPURVIEW,false),m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_RESETPASSWD,false),false);
if ( dlg.DoModal() == IDOK )
{
SetLockItem( lItem ,true);
long lSize = sizeof(REQ_Manager_Modify)+sizeof(ANS_GetManagerData);
BYTE * pModifyData = new BYTE[lSize];memset(pModifyData,0,lSize);
REQ_Manager_Modify * pModify = (REQ_Manager_Modify *)pModifyData; //Í·
ANS_GetManagerData * pManagerData = (ANS_GetManagerData *)(pModifyData+sizeof(REQ_Manager_Modify));
*pManagerData = dlg.GetParam();
pModify->lItem = lItem;
pModify->lCount = 1;
m_pMainFrame->SendFrame( SMSFUNC_MANAGER_MODIFY , pModifyData , lSize );
}
}
}
void CManagerDlg::On_User_Del()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_DEL) )
{
return ;
}
long lRet = MessageBox( _T("´Ë²Ù×÷½«»áɾ³ý¹ÜÀíÔ±£¬ÊÇ·ñ¼ÌÐø£¿") , _T("ÌáÎÊ") , MB_ICONQUESTION|MB_YESNOCANCEL|MB_DEFBUTTON2);
if ( lRet != IDYES )
return;
long lCount = m_wndList.GetSelectedCount();
long lSize = sizeof(REQ_Manager_Del)+sizeof(ANS_Manager_DelData)*lCount;
BYTE * pDelSend = new BYTE[lSize];memset(pDelSend,0,lSize);
REQ_Manager_Del * pDel = (REQ_Manager_Del *)pDelSend; //Í·
ANS_Manager_DelData * pDelData = (ANS_Manager_DelData *)(pDelSend+sizeof(REQ_Manager_Del));
pDel->lCount = lCount;
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
ANS_GetManagerData * pManagerData;
POSITION pos2;
while(pos)
{
pDelData->lItem = m_wndList.GetNextSelectedItem(pos);
pos2 = (POSITION)m_wndList.GetItemData(pDelData->lItem);
pManagerData = m_Manager.GetNext(pos2); //È¡µÃÁбíÖеÄpos
pDelData->lUserID = pManagerData->lManagerID;
pDelData ++;
}
m_pMainFrame->SendFrame( SMSFUNC_MANAGER_DEL , pDelSend , lSize );
}
void CManagerDlg::On_User_Refresh()
{
RefreshInfo();
}
long CManagerDlg::GetCurrentSelected()
{
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
if ( pos )
{
return m_wndList.GetNextSelectedItem(pos);
}
return -1;
}
BOOL CManagerDlg::isLockItem(long lItem , BOOL bShowWarning)
{
BOOL b = (m_wndList.GetIconIndex(lItem) == 1);
if ( b && bShowWarning )
{
MessageBox( _T("Õý¼±»Ëø¶¨£¬ÇëµÈ´ý·þÎñÆ÷·µ»ØºóÔÙ²Ù×÷!") , _T("Ëø¶¨ÖÐ") , MB_ICONINFORMATION );
}
return b;
}
void CManagerDlg::SetLockItem(long lItem,BOOL bLock)
{
if ( bLock )
m_wndList.SetIconIndex( lItem , 1 );
else
m_wndList.SetIconIndex( lItem , 0 );
}
void CManagerDlg::OnRclickManagerList(NMHDR* pNMHDR, LRESULT* pResult)
{
ShowRMenu();
*pResult = 0;
}
void CManagerDlg::ShowRMenu()
{
if (!m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_SEE,false)) //ûÓв鿴ȨÏÞ
return ;
CMenu menu;
menu.CreatePopupMenu();
BOOL bLock = false;
long lItem = this->GetCurrentSelected();
if ( lItem >= 0 )
bLock = isLockItem( lItem , false ); //È¡µÃÊÇ·ñÕýÔÚËø¶¨
//Ìí¼Ó
if ( m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_ADD,false) )
{
menu.AppendMenu(MF_STRING , MENU_MANAGER_ADD, _T(" Ìí¼Ó¹ÜÀíÔ± ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_MANAGER_ADD , _T(" Ìí¼Ó¹ÜÀíÔ± ") );
}
//ÐÞ¸Ä
if ( m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_MODIFY,false) && lItem >=0 && !bLock)
{
menu.AppendMenu(MF_STRING , MENU_MANAGER_MODIFY, _T(" ÐÞ ¸Ä ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_MANAGER_MODIFY , _T(" ÐÞ ¸Ä ") );
}
//ɾ³ý
if ( m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_DEL,false) && lItem >=0 && !bLock )
{
menu.AppendMenu(MF_STRING , MENU_MANAGER_DEL, _T(" ɾ ³ý ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_MANAGER_DEL , _T(" ɾ ³ý ") );
}
menu.AppendMenu(MF_SEPARATOR );
//Ë¢ÐÂ
menu.AppendMenu(MF_STRING , MENU_MANAGER_REFRESH, _T(" ˢ Р") );
//ÏÔʾ²Ëµ¥
POINT pt ;
::GetCursorPos( &pt );
//this->ClientToScreen( &pt);
menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
menu.DestroyMenu();
}
BOOL CManagerDlg::FindManagerLoginName(TCHAR *pLoginName, POSITION exPos)
{
POSITION pos = m_Manager.GetHeadPosition();
POSITION pos2;
while (pos)
{
pos2 = pos;
ANS_GetManagerData * pData = m_Manager.GetNext( pos );
if ( pos2 != exPos )
{
if ( !_tcscmp( pData->szLoginName , pLoginName ) )
return true;
}
}
return false;
}