SmsManager/C_HT.cpp

572 lines
14 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_HT.cpp : implementation file
//
#include "stdafx.h"
#include "smsmanager.h"
#include "C_HT.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CC_HT dialog
#include "MainFrm.h"
#include "DLG_C_HT_Add.h"
#include "DLG_C_HT_Out.h"
CC_HT::CC_HT(CWnd* pParent /*=NULL*/)
: CDialog(CC_HT::IDD, pParent)
{
//{{AFX_DATA_INIT(CC_HT)
m_strBegin = _T("");
m_strEnd = _T("");
m_lStatus = -1;
m_lHTType = -1;
//}}AFX_DATA_INIT
m_bInit = false;
m_bRefresh = false;
}
void CC_HT::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CC_HT)
DDX_Control(pDX, IDC_USER_CORPID2, m_E_AgentID);
DDX_Control(pDX, IDC_C_HT_S1, m_S_S1);
DDX_Control(pDX, IDC_C_HT_AGENT, m_L_Agent);
DDX_Control(pDX, IDC_C_HT_LIST, m_wndList);
DDX_Text(pDX, IDC_C_HT_BEGIN, m_strBegin);
DDV_MaxChars(pDX, m_strBegin, 8);
DDX_Text(pDX, IDC_C_HT_END, m_strEnd);
DDV_MaxChars(pDX, m_strEnd, 8);
DDX_CBIndex(pDX, IDC_C_HT_STATUS, m_lStatus);
DDX_CBIndex(pDX, IDC_C_HT_TYPE, m_lHTType);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CC_HT, CDialog)
//{{AFX_MSG_MAP(CC_HT)
ON_WM_SIZE()
ON_NOTIFY(NM_DBLCLK, IDC_C_HT_LIST, OnDblclkKhcardList)
ON_NOTIFY(NM_RCLICK, IDC_C_HT_LIST, OnRclickKhcardList)
ON_NOTIFY(LVN_KEYDOWN, IDC_C_HT_LIST, OnKeydownKhcardList)
ON_BN_CLICKED(IDC_C_HT_QUERY, OnKhcardQuery)
ON_BN_CLICKED(IDC_USER_QUERY2, OnUserQuery2)
//}}AFX_MSG_MAP
ON_COMMAND( MENU_HT_ADD , On_KHCard_Add )
ON_COMMAND( MENU_HT_OUT , On_KHCard_Out )
ON_COMMAND( MENU_HT_DEL , On_KHCard_Del )
ON_COMMAND( MENU_HT_EXPORT , On_KHCard_Export )
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CC_HT message handlers
BOOL CC_HT::RefreshInfo()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_FILT) )
{
return false;
}
return m_pMainFrame->SendFrame(SMSFUNC_AGENT_NAME,NULL,0);
}
void CC_HT::Close()
{
//Çå³ý¶ÓÁÐÖеÄÄÚÈÝ
while (!m_Agent.IsEmpty())
{
ANS_Agent_NameData * pData = m_Agent.GetHead();
m_Agent.RemoveHead();
delete pData;
}
}
BOOL CC_HT::ReHide()
{
ShowWindow( SW_HIDE );
return true;
}
BOOL CC_HT::ReShow(BOOL bRefresh)
{
ShowWindow( SW_SHOW );
if ( bRefresh || !m_bRefresh )
{
RefreshInfo();
}
return true;
}
BOOL CC_HT::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(IDR_SMSMANTYPE) );
m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_AGENT) );
m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_AGENT_DISABLE) );
m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_LOCK) ); m_wndList.SubClassWindow2();
m_wndList.SetHeadings(_T("ÐòºÅ,50;ÀàÐÍ,80; ºÏͬºÅ,80;״̬,60; ÆôÓÃʱ¼ä,150; ×÷·ÏÔ­Òò,200;ÆóÒµÃû³Æ,150;´úÀíÉÌ,150;"));
m_wndList.SetGridLines(true);
m_wndList.SetImageList(&m_Image,LVSIL_SMALL);
m_bInit = true;
m_lStatus = 0;
m_lHTType = 0;
UpdateData(false);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CC_HT::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if ( m_bInit )
{
CRect rect;
m_S_S1.GetWindowRect(&rect);
m_wndList.MoveWindow( 0 , 0+rect.Height()+5 , cx,cy-rect.Height()-5);
}
}
BOOL CC_HT::ProcessSocket(Socket_Head *pHead)
{
//È¡´úÀíÉÌÃû×Ö
if (pHead->lFuncType == SMSFUNC_AGENT_NAME)
{
CString str;
m_bRefresh = true; //ÒѾ­Ë¢Ð¹ý
ANS_Agent_Name * pAgent = (ANS_Agent_Name *)pHead->pFrame;
ANS_Agent_NameData * pData = (ANS_Agent_NameData *)(pHead->pFrame+sizeof(ANS_Agent_Name));
m_L_Agent.ResetContent(); //ɾ³ýÔ­ÒÑÓÐµÄÆóÒµ
long lItem = m_L_Agent.AddString( _T("ËùÓÐÊý¾Ý") );
m_L_Agent.SetItemData(lItem,-10);
lItem = m_L_Agent.AddString( _T("×ÔÓпͻ§") );
m_L_Agent.SetItemData(lItem,-9);
this->Close(); //¹Ø±ÕÔ­¶ÓÁÐ
for ( int i=0;i<pAgent->lCount;i++ )
{
ANS_Agent_NameData * pNewData = new ANS_Agent_NameData;
*pNewData = *pData;
POSITION pos = m_Agent.AddTail(pNewData);
str.Format( _T("%d - %s") , pData->lAgentID , pData->szAgentName );
long lItem = m_L_Agent.AddString( str );
m_L_Agent.SetItemData( lItem , (DWORD_PTR)pos);
pData ++;
}
m_L_Agent.SetCurSel(0);
return true;
}
if ( pHead->lFuncType == SMSFUNC_HT_ADD )
{
ANS_HT_Add * pAdd = (ANS_HT_Add *)pHead->pFrame;
CString str;
str.Format( _T("Éú³ÉºÏͬ³É¹¦£¬¹²Éú³É%d¸ö£¬ºÅ¶ÎΪ%s-%s"),pAdd->lCount,pAdd->szBegin,pAdd->szEnd );
MessageBox(str,_T("ºÏͬ"),MB_ICONINFORMATION );
return true;
}
if ( pHead->lFuncType == SMSFUNC_HT_SEE )
{
ANS_HT_See * pSee = (ANS_HT_See *)pHead->pFrame;
ANS_HT_SeeData * pData = (ANS_HT_SeeData *)(pHead->pFrame+sizeof(ANS_HT_See));
m_wndList.ShowWindow( SW_HIDE );
m_wndList.DeleteAllItems();
TCHAR szBuf[32];
//m_wndList.SetHeadings(_T("ÐòºÅ,40; ºÏͬºÅ,80;״̬,60; ʱ ¼ä,150; ½ûÓÃÔ­Òò,200;´úÀíÉÌID,60;ÆóÒµID,60;"));
for ( int i=0 ; i< pSee->lCount ; i++ )
{
m_wndList.InsertItem( i , _itot(i+1,szBuf,10),pData->lStatus);
switch(pData->lHTType)
{
case 1:
m_wndList.SetItemText(i,1,_T("ЭÒé") );
break;
case 0:
default:
m_wndList.SetItemText(i,1,_T("µÇ¼Çµ¥") );
break;
}
m_wndList.SetItemText(i,2,pData->szHTNum );
switch(pData->lStatus )
{
default:
case 0:
m_wndList.SetItemText(i,3,_T("δʹÓÃ") );
break;
case 1:
m_wndList.SetItemText(i,3,_T("ÒÑ·ÖÅä") );
break;
case 2:
m_wndList.SetItemText(i,3,_T("ÒÑ×÷·Ï") );
break;
}
_stprintf(szBuf , _T("%04d.%02d.%02d %02d:%02d") , pData->tUse.wYear,pData->tUse.wMonth,pData->tUse.wDay,pData->tUse.wHour,pData->tUse.wMinute );
m_wndList.SetItemText(i,4,szBuf );
m_wndList.SetItemText(i,5,pData->szBZ );
m_wndList.SetItemText(i,6,pData->szCorpName );
m_wndList.SetItemText(i,7,pData->szAgentName );
m_wndList.SetItemData(i,pData->lHTID );
pData++;
}
m_wndList.ShowWindow( SW_SHOW );
return true;
}
if ( pHead->lFuncType == SMSFUNC_HT_OUT )
{
ANS_HT_Out * pAgent = (ANS_HT_Out *)pHead->pFrame;
ANS_HT_OutData * pData = (ANS_HT_OutData *)(pHead->pFrame+sizeof(ANS_HT_Out));
//m_wndList.SetHeadings(_T("ÐòºÅ,50; ºÏͬºÅ,80;״̬,60; ÆôÓÃʱ¼ä,150; ×÷·ÏÔ­Òò,200;ÆóÒµÃû³Æ,150;´úÀíÉÌ,150;"));
for ( int i=0 ; i<pAgent->lCount ; i++ )
{
m_wndList.SetItemText( pData->lItem ,3, _T("ÒÑ×÷·Ï") );
m_wndList.SetItemText( pData->lItem ,5, pAgent->szBZ );
pData ++;
}
return true;
}
if ( pHead->lFuncType == SMSFUNC_HT_DEL )
{
ANS_HT_Del * pAgent = (ANS_HT_Del *)pHead->pFrame;
ANS_HT_DelData * pData = (ANS_HT_DelData *)(pHead->pFrame+sizeof(ANS_HT_Del));
for ( int i=pAgent->lCount-1 ; i>=0 ; i-- ) //µ¹×ªÉ¾³ý
{
m_wndList.DeleteItem( pData[i].lItem );
}
return true;
}
return false;
}
long CC_HT::GetCurrentSelected()
{
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
if ( pos )
{
return m_wndList.GetNextSelectedItem(pos);
}
return -1;
}
void CC_HT::OnDblclkKhcardList(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CC_HT::OnRclickKhcardList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
ShowRMenu();
}
void CC_HT::OnKeydownKhcardList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CC_HT::ShowRMenu()
{
if (!m_pMainFrame->GetUserPurview(PURVIEW_FILT,false)) //ûÓв鿴ȨÏÞ
return ;
CMenu menu;
menu.CreatePopupMenu();
BOOL bLock = false;
long lItem = this->GetCurrentSelected();
if ( lItem >= 0 )
bLock = isLockItem( lItem , false ); //È¡µÃÊÇ·ñÕýÔÚËø¶¨
//Ìí¼Ó
menu.AppendMenu(MF_STRING , MENU_HT_ADD, _T(" Ìí¼ÓºÏͬ ") );
//ÐÞ¸Ä
if ( lItem >=0 && !bLock)
{
menu.AppendMenu(MF_STRING , MENU_HT_OUT, _T(" ×÷·ÏºÏͬ") );
menu.AppendMenu(MF_STRING , MENU_HT_DEL, _T(" ɾ³ýºÏͬ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_HT_OUT , _T(" ×÷·ÏºÏͬ") );
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_HT_DEL , _T(" ɾ³ýºÏͬ") );
}
menu.AppendMenu(MF_SEPARATOR );
menu.AppendMenu(MF_STRING , MENU_HT_EXPORT, _T(" µ¼ ³ö ") );
//ÏÔʾ²Ëµ¥
POINT pt ;
::GetCursorPos( &pt );
//this->ClientToScreen( &pt);
menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
menu.DestroyMenu();
}
BOOL CC_HT::isLockItem(long lItem, BOOL bShowWarning)
{
BOOL b = (m_wndList.GetIconIndex(lItem) == 3);
if ( b && bShowWarning )
{
MessageBox( _T("Õý¼±»Ëø¶¨£¬ÇëµÈ´ý·þÎñÆ÷·µ»ØºóÔÙ²Ù×÷!") , _T("Ëø¶¨ÖÐ") , MB_ICONINFORMATION );
}
return b;
}
void CC_HT::SetLockItem(long lItem, BOOL bLock)
{
if ( bLock )
m_wndList.SetIconIndex( lItem , 2 );
else
m_wndList.SetIconIndex( lItem , 0 );
}
void CC_HT::On_KHCard_Add()
{
DLG_C_HT_Add dlg(this);
dlg.SetParam(&m_Agent);
if ( dlg.DoModal()==IDOK )
{
REQ_HT_Add * pAdd= new REQ_HT_Add;
pAdd->lAgentID = dlg.m_lAgentID;
pAdd->lHTType = dlg.m_lHTType;
_tcscpy(pAdd->szBegin , dlg.m_strBegin);
_tcscpy(pAdd->szEnd , dlg.m_strEnd);
m_pMainFrame->SendFrame(SMSFUNC_HT_ADD,(BYTE *)pAdd,sizeof(REQ_HT_Add));
}
}
void CC_HT::On_KHCard_Export()
{
//È¡±£´æÎļþÃû
static TCHAR BASED_CODE szFilter[] = _T("TXT Files (*.txt)|*.txt||");
CFileDialog dlg(false,_T("txt"),NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
if (dlg.DoModal() != IDOK)
return ;
CString strName = dlg.GetPathName();
CFile file;
if ( !file.Open( strName , CFile::modeCreate|CFile::modeWrite ) )
{
MessageBox( _T("´ò¿ªÎļþ´íÎó£¬Çë¼ì²é!") , _T("´íÎó") , MB_ICONWARNING );
return ;
}
long lCount = m_wndList.GetItemCount();
long lCol = m_wndList.GetColumnCount();
for ( int i=0 ; i<lCount ; i++ )
{
CString strTemp;
CString strWrite;
for ( int j=0 ; j<lCol ; j++ )
{
strTemp = m_wndList.GetItemText(i,j);
strTemp.Replace( _T(",") , _T("£¬") );
strTemp.Replace( _T("\r") , _T(" ") );
strTemp.Replace( _T("\n") , _T(" ") );
strWrite = strWrite+strTemp+_T(",");
}
strWrite += _T("\r\n");
file.Write( strWrite , strWrite.GetLength());
}
file.Close();
MessageBox( _T("µ¼³öÎļþ³É¹¦£¡") );
}
void CC_HT::On_KHCard_Out()
{
int iRet =MessageBox( _T("ÕæµÄÒª×÷·ÏºÏͬ×ÊÁÏÂð£¿×÷·Ïºó½«²»Äָܻ´£¡\r\nÖ»ÓÐδʹÓûòÒÑ·ÖÅäµÄºÏͬ¿ÉÒÔ×÷·Ï£¡") , _T("ÌáÎÊ") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 );
if ( iRet != IDYES )
return;
//ȡѡÖÐÐèÒªÐ޸ĵÄÊýÁ¿
long lSelCount = m_wndList.GetSelectedCount();
ANS_HT_OutData * pModify = new ANS_HT_OutData[lSelCount];
memset(pModify,0,sizeof(ANS_HT_OutData)*lSelCount);
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
long lIndex=0;
while(pos)
{
pModify[lIndex].lItem =m_wndList.GetNextSelectedItem(pos);
if ( m_wndList.GetIconIndex(pModify[lIndex].lItem) <= 1 ) //δÆôÓõIJÅÄÜÐÞ¸Ä
{
pModify[lIndex].lHTID=m_wndList.GetItemData(pModify[lIndex].lItem);
lIndex++;
}
}
DLG_C_HT_Out dlg(this);
if ( dlg.DoModal()==IDOK )
{
long lSize = sizeof(REQ_HT_Out)+sizeof(ANS_HT_OutData)*lIndex;
BYTE * pData = new BYTE[lSize];
memset(pData,0,lSize);
REQ_HT_Out * pAgent=(REQ_HT_Out *)pData;
ANS_HT_OutData * pSend = (ANS_HT_OutData *)(pData+sizeof(REQ_HT_Out));
pAgent->lCount = lIndex;
_tcscpy(pAgent->szBZ , dlg.m_strBZ);
memcpy( pSend , pModify , sizeof(ANS_HT_OutData)*lIndex);
m_pMainFrame->SendFrame(SMSFUNC_HT_OUT,(BYTE *)pData,lSize);
}
delete pModify;
}
void CC_HT::On_KHCard_Del()
{
int iRet =MessageBox( _T("ÕæµÄҪɾ³ýºÏͬ×ÊÁÏÂð£¿É¾³ýºó½«²»Äָܻ´£¡\r\nÖ»ÓÐδʹÓõĺÏͬ¿ÉÒÔɾ³ý£¡") , _T("ÌáÎÊ") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 );
if ( iRet != IDYES )
return;
//ȡѡÖÐÐèÒªÐ޸ĵÄÊýÁ¿
long lSelCount = m_wndList.GetSelectedCount();
ANS_HT_DelData * pModify = new ANS_HT_DelData[lSelCount];
memset(pModify,0,sizeof(ANS_HT_DelData)*lSelCount);
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
long lIndex=0;
while(pos)
{
pModify[lIndex].lItem =m_wndList.GetNextSelectedItem(pos);
if ( m_wndList.GetIconIndex(pModify[lIndex].lItem) == 0 ) //δÆôÓõIJÅÄÜÐÞ¸Ä
{
pModify[lIndex].lHTID=m_wndList.GetItemData(pModify[lIndex].lItem);
lIndex++;
}
}
long lSize = sizeof(REQ_HT_Del)+sizeof(ANS_HT_DelData)*lIndex;
BYTE * pData = new BYTE[lSize];
memset(pData,0,lSize);
REQ_HT_Del * pAgent=(REQ_HT_Del *)pData;
ANS_HT_DelData * pSend = (ANS_HT_DelData *)(pData+sizeof(REQ_HT_Del));
pAgent->lCount = lIndex;
memcpy( pSend , pModify , sizeof(ANS_HT_DelData)*lIndex);
m_pMainFrame->SendFrame(SMSFUNC_HT_DEL,(BYTE *)pData,lSize);
delete pModify;
}
void CC_HT::OnKhcardQuery()
{
if ( !UpdateData(true))
return ;
if ( m_strBegin.GetLength()>0 && (m_strBegin.GetLength() !=8 || m_strBegin.Left(1) !=_T("B") && m_strBegin.Left(1) !=_T("C") ) )
{
MessageBox( _T("ºÏͬ¿ªÊ¼±àºÅÓÐÎó£¬ÇëÖØÐÂÊäÈ룡") , _T("´íÎó") , MB_ICONWARNING );
GetDlgItem(IDC_C_HT_BEGIN)->SetFocus();
return ;
}
if ( m_strEnd.GetLength()>0 && (m_strEnd.GetLength() !=8 || m_strEnd.Left(1) !=_T("B") && m_strEnd.Left(1) !=_T("C") ) )
{
MessageBox( _T("ºÏͬ½áÊø±àºÅÓÐÎó£¬ÇëÖØÐÂÊäÈ룡") , _T("´íÎó") , MB_ICONWARNING );
GetDlgItem(IDC_C_HT_END)->SetFocus();
return ;
}
REQ_HT_See * pSee= new REQ_HT_See;
long lAgent = m_L_Agent.GetCurSel();
if ( lAgent == 0 ) //Ñ¡ÁËËùÓÐÆóÒµ
{
pSee->lAgentID = -1;
}
else
if ( lAgent == 1 )
{
pSee->lAgentID = 0;
}
else
{
POSITION pos = (POSITION)m_L_Agent.GetItemData(lAgent);
POSITION pos2 = pos;
ANS_Agent_NameData * pData = m_Agent.GetNext( pos );
if (pData)
{
pSee->lAgentID = pData->lAgentID;
}
else
{
return;
}
}
_tcscpy(pSee->szBegin,m_strBegin);
_tcscpy(pSee->szEnd ,m_strEnd);
pSee->lHTType = m_lHTType-1;
pSee->lStatus = m_lStatus-1;
m_pMainFrame->SendFrame(SMSFUNC_HT_SEE,(BYTE *)pSee,sizeof(REQ_HT_See));
}
void CC_HT::OnUserQuery2()
{
CString strTemp;
CString strFind;
m_E_AgentID.GetWindowText(strFind);
if ( strFind.GetLength()<=0 )
return ;
long lSel = m_L_Agent.GetCurSel();
long lCount = m_L_Agent.GetCount();
for ( int i=lSel+1 ; i<lCount ; i++ )
{
m_L_Agent.GetLBText(i,strTemp);
if ( strTemp.Find(strFind)>=0 )
{
m_L_Agent.SetCurSel(i);
return ;
}
}
for ( i=0 ; i<lSel ; i++ )
{
m_L_Agent.GetLBText(i,strTemp);
if ( strTemp.Find(strFind)>=0 )
{
m_L_Agent.SetCurSel(i);
return ;
}
}
}
void CC_HT::OnOK()
{
//CDialog::OnOK();
}
void CC_HT::OnCancel()
{
//CDialog::OnCancel();
}