SmsManager/C_KF.cpp

475 lines
12 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.

// C_KF.cpp : implementation file
//
#include "stdafx.h"
#include "smsmanager.h"
#include "C_KF.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CC_KF dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_C_KF_Modify.h"
CC_KF::CC_KF(CWnd* pParent /*=NULL*/)
: CDialog(CC_KF::IDD, pParent)
{
//{{AFX_DATA_INIT(CC_KF)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_bInit = false;
m_bRefresh = false;
}
void CC_KF::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CC_KF)
DDX_Control(pDX, IDC_YWY_LIST, m_wndList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CC_KF, CDialog)
//{{AFX_MSG_MAP(CC_KF)
ON_WM_SIZE()
ON_NOTIFY(NM_DBLCLK, IDC_YWY_LIST, OnDblclkYwyList)
ON_NOTIFY(NM_RCLICK, IDC_YWY_LIST, OnRclickYwyList)
ON_NOTIFY(LVN_KEYDOWN, IDC_YWY_LIST, OnKeydownYwyList)
//}}AFX_MSG_MAP
ON_COMMAND( MENU_KF_ADD , On_User_Add)
ON_COMMAND( MENU_KF_MODIFY , On_User_Modify)
ON_COMMAND( MENU_KF_DEL , On_User_Del)
ON_COMMAND( MENU_KF_REFRESH, On_User_Refresh)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CC_KF message handlers
BOOL CC_KF::RefreshInfo()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_SEE) )
{
return false;
}
REQ_GetKF * pKF = new REQ_GetKF;
memset(pKF , 0 , sizeof(REQ_GetKF));
m_pMainFrame->SendFrame(SMSFUNC_GETKF,(BYTE*)pKF,sizeof(REQ_GetKF));
return true;
}
void CC_KF::Close()
{
//Çå³ý¶ÓÁÐÖеÄÄÚÈÝ
while (!m_KF.IsEmpty())
{
ANS_GetKFData * pKF = m_KF.GetHead();
m_KF.RemoveHead();
delete pKF;
}
}
BOOL CC_KF::ReShow(BOOL bRefresh)
{
ShowWindow( SW_SHOW );
if ( bRefresh || !m_bRefresh )
{
RefreshInfo();
}
return true;
}
BOOL CC_KF::ReHide()
{
ShowWindow( SW_HIDE );
return true;
}
void CC_KF::SetLockItem(long lItem, BOOL bLock)
{
if ( bLock )
m_wndList.SetIconIndex( lItem , 1 );
else
m_wndList.SetIconIndex( lItem , 0 );
}
long CC_KF::GetCurrentSelected()
{
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
if ( pos )
{
return m_wndList.GetNextSelectedItem(pos);
}
return -1;
}
BOOL CC_KF::isLockItem(long lItem, BOOL bShowWarning)
{
BOOL b = (m_wndList.GetIconIndex(lItem) == 1);
if ( b && bShowWarning )
{
MessageBox( _T("Õý¼±»Ëø¶¨£¬ÇëµÈ´ý·þÎñÆ÷·µ»ØºóÔÙ²Ù×÷!") , _T("Ëø¶¨ÖÐ") , MB_ICONINFORMATION );
}
return b;
}
BOOL CC_KF::ProcessSocket(Socket_Head *pHead)
{
//È¡¹ÜÀíÔ±ÐÅÏ¢
if (pHead->lFuncType == SMSFUNC_GETKF)
{
m_bRefresh = true; //ÒѾ­Ë¢Ð¹ý
ANS_GetKF * pKF = (ANS_GetKF *)pHead->pFrame;
ANS_GetKFData * pData = (ANS_GetKFData *)(pHead->pFrame+sizeof(ANS_GetKF));
m_wndList.DeleteAllItems(); //ɾ³ýÔ­ÓеÄÄÚÈÝ
this->Close(); //¹Ø±ÕÔ­¶ÓÁÐ
TCHAR Buf[32];
for ( int i=0;i<pKF->lCount;i++ )
{
ANS_GetKFData * pNewData = new ANS_GetKFData;
*pNewData = *pData;
POSITION pos = m_KF.AddTail(pNewData);
//_T("ÐòºÅ,50; ÐÕ Ãû,100; êÇ ³Æ,100; ²¿ ÃÅ,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->szName);
m_wndList.SetItemText(i,2,pData->szLoginName);
m_wndList.SetItemText(i,3,pData->szNickName);
m_wndList.SetItemText(i,4,pData->szBranch);
m_wndList.SetItemText(i,5,pData->szJob);
m_wndList.SetItemText(i,6,pData->szTel);
m_wndList.SetItemText(i,7,pData->szMobile);
m_wndList.SetItemText(i,8,pData->szEmail);
pData ++;
}
return true;
}
//Ð޸ĹÜÀíÔ±ÐÅÏ¢
if (pHead->lFuncType == SMSFUNC_KF_MODIFY)
{
ANS_KF_Modify * pModify = (ANS_KF_Modify *)pHead->pFrame;
ANS_GetKFData * pData = (ANS_GetKFData *)(pHead->pFrame+sizeof(ANS_KF_Modify));
SetLockItem( pModify->lItem , false ); //½âËø
if ( pModify->lCount == 1 ) //µÈÓÚ1ʱ±íʾÐ޸ijɹ¦
{
POSITION pos = (POSITION)m_wndList.GetItemData(pModify->lItem);
ANS_GetKFData * pData2 = m_KF.GetNext( pos );
if ( pData2 )
{
*pData2 = *pData; //È¡µ½ÐµÄÊý¾Ý
//ÉèÖÃеÄÊý¾Ý
m_wndList.SetItemText( pModify->lItem , 1 , pData->szName );
m_wndList.SetItemText( pModify->lItem , 2 , pData->szLoginName );
m_wndList.SetItemText( pModify->lItem , 3 , pData->szNickName );
m_wndList.SetItemText( pModify->lItem , 4 , pData->szBranch );
m_wndList.SetItemText( pModify->lItem , 5 , pData->szJob );
m_wndList.SetItemText( pModify->lItem , 6 , pData->szTel );
m_wndList.SetItemText( pModify->lItem , 7 , pData->szMobile );
m_wndList.SetItemText( pModify->lItem , 8 , pData->szEmail );
}
}
return true;
}
//Ìí¼Ó¹ÜÀíÔ±
if (pHead->lFuncType == SMSFUNC_KF_ADD)
{
ANS_KF_Add * pAdd = (ANS_KF_Add *)pHead->pFrame;
ANS_GetKFData * pData = (ANS_GetKFData *)(pHead->pFrame+sizeof(ANS_KF_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->szName );
m_wndList.SetItemText( lCount , 2 , pData->szLoginName );
m_wndList.SetItemText( lCount , 3 , pData->szNickName );
m_wndList.SetItemText( lCount , 4 , pData->szBranch );
m_wndList.SetItemText( lCount , 5 , pData->szJob );
m_wndList.SetItemText( lCount , 6 , pData->szTel );
m_wndList.SetItemText( lCount , 7 , pData->szMobile );
m_wndList.SetItemText( lCount , 8 , pData->szEmail );
ANS_GetKFData * pData2 = new ANS_GetKFData;
*pData2 = *pData;
POSITION pos = m_KF.AddTail( pData2 );
m_wndList.SetItemData( lCount, (DWORD_PTR)pos );
//Èç¹û·µ»ØµÄÓû§ID´íÎó£¬ÔòÖØÐÂË¢ÐÂ
if ( pData->lKFID <= 0 )
{
RefreshInfo();
}
}
return true;
}
//ɾ³ý¹ÜÀíÔ±
if (pHead->lFuncType == SMSFUNC_KF_DEL)
{
ANS_KF_Del * pDel = (ANS_KF_Del *)pHead->pFrame;
ANS_KF_DelData * pDelData = (ANS_KF_DelData *)(pHead->pFrame+sizeof(ANS_KF_Del));
POSITION pos,pos2;
ANS_GetKFData * pKFData;
for ( int i = pDel->lCount-1 ; i>=0 ; i-- )
{
if ( pDelData[i].lUserID ) //ɾ³ý³É¹¦
{
pos = (POSITION)m_wndList.GetItemData( pDelData[i].lItem );
pos2 = pos;
pKFData = m_KF.GetNext( pos );
if ( pKFData->lKFID == pDelData[i].lUserID ) //IDÏàͬµÄ²Å¿Éɾ³ý
{
delete pKFData; //ÏÈɾ³ýÊý¾Ý
m_KF.RemoveAt(pos2); //´ÓÁбíÖÐɾ³ý
m_wndList.DeleteItem(pDelData[i].lItem); //´ÓListCtrlÖÐɾ³ý
}
}
}
return true;
}
return false;
}
void CC_KF::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_KF_ADD, _T(" Ìí¼Ó¿Í·þ ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_KF_ADD , _T(" Ìí¼Ó¿Í·þ ") );
}
//ÐÞ¸Ä
if ( m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_MODIFY,false) && lItem >=0 && !bLock)
{
menu.AppendMenu(MF_STRING , MENU_KF_MODIFY, _T(" ÐÞ ¸Ä ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_KF_MODIFY , _T(" ÐÞ ¸Ä ") );
}
//ɾ³ý
if ( m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_DEL,false) && lItem >=0 && !bLock )
{
menu.AppendMenu(MF_STRING , MENU_KF_DEL, _T(" ɾ ³ý ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_KF_DEL , _T(" ɾ ³ý ") );
}
menu.AppendMenu(MF_SEPARATOR );
//Ë¢ÐÂ
menu.AppendMenu(MF_STRING , MENU_KF_REFRESH, _T(" ˢ Р") );
//ÏÔʾ²Ëµ¥
POINT pt ;
::GetCursorPos( &pt );
//this->ClientToScreen( &pt);
menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
menu.DestroyMenu();
}
BOOL CC_KF::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; ÐÕ Ãû,100; µÇ¼Ãû,100; êÇ ³Æ,100; ²¿ ÃÅ,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
}
void CC_KF::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if ( m_bInit )
{
m_wndList.MoveWindow( 0 , 0 , cx,cy);
}
}
void CC_KF::OnDblclkYwyList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
On_User_Modify();
}
void CC_KF::OnRclickYwyList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
ShowRMenu();
}
void CC_KF::OnKeydownYwyList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CC_KF::On_User_Add()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_ADD) )
{
return ;
}
ANS_GetKFData KFData={0};
DLG_C_KF_Modify dlg(this);
dlg.SetParam( KFData,0,true);
if ( dlg.DoModal() == IDOK )
{
long lSize = sizeof(REQ_KF_Add)+sizeof(ANS_GetKFData);
BYTE * pAddData = new BYTE[lSize];memset(pAddData,0,lSize);
REQ_KF_Add * pAdd = (REQ_KF_Add *)pAddData; //Í·
ANS_GetKFData * pKFData = (ANS_GetKFData *)(pAddData+sizeof(REQ_KF_Add));
*pKFData = dlg.GetParam();
pAdd->lCount = 1;
m_pMainFrame->SendFrame( SMSFUNC_KF_ADD , pAddData , lSize );
}
}
void CC_KF::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_GetKFData * pData = m_KF.GetNext( pos );
if (pData)
{
DLG_C_KF_Modify dlg(this);
dlg.SetParam( *pData,pos2,false);
if ( dlg.DoModal() == IDOK )
{
SetLockItem( lItem ,true);
long lSize = sizeof(REQ_KF_Modify)+sizeof(ANS_GetKFData);
BYTE * pModifyData = new BYTE[lSize];memset(pModifyData,0,lSize);
REQ_KF_Modify * pModify = (REQ_KF_Modify *)pModifyData; //Í·
ANS_GetKFData * pKFData = (ANS_GetKFData *)(pModifyData+sizeof(REQ_KF_Modify));
*pKFData = dlg.GetParam();
pModify->lItem = lItem;
pModify->lCount = 1;
m_pMainFrame->SendFrame( SMSFUNC_KF_MODIFY , pModifyData , lSize );
}
}
}
void CC_KF::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_KF_Del)+sizeof(ANS_KF_DelData)*lCount;
BYTE * pDelSend = new BYTE[lSize];memset(pDelSend,0,lSize);
REQ_KF_Del * pDel = (REQ_KF_Del *)pDelSend; //Í·
ANS_KF_DelData * pDelData = (ANS_KF_DelData *)(pDelSend+sizeof(REQ_KF_Del));
pDel->lCount = lCount;
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
ANS_GetKFData * pKFData;
POSITION pos2;
while(pos)
{
pDelData->lItem = m_wndList.GetNextSelectedItem(pos);
pos2 = (POSITION)m_wndList.GetItemData(pDelData->lItem);
pKFData = m_KF.GetNext(pos2); //È¡µÃÁбíÖеÄpos
pDelData->lUserID = pKFData->lKFID;
pDelData ++;
}
m_pMainFrame->SendFrame( SMSFUNC_KF_DEL , pDelSend , lSize );
}
void CC_KF::On_User_Refresh()
{
RefreshInfo();
}
BOOL CC_KF::FindKFLoginName(const TCHAR *pName, POSITION exPos)
{
POSITION pos = m_KF.GetHeadPosition();
POSITION pos2;
while (pos)
{
pos2 = pos;
ANS_GetKFData * pData = m_KF.GetNext( pos );
if ( pos2 != exPos )
{
if ( !_tcscmp( pData->szLoginName , pName ) )
return true;
}
}
return false;
}
BOOL CC_KF::FindKFName(const TCHAR *pName, POSITION exPos)
{
POSITION pos = m_KF.GetHeadPosition();
POSITION pos2;
while (pos)
{
pos2 = pos;
ANS_GetKFData * pData = m_KF.GetNext( pos );
if ( pos2 != exPos )
{
if ( !_tcscmp( pData->szName , pName ) )
return true;
}
}
return false;
}