SmsManager/TSCmdDlg.cpp

561 lines
15 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.

// TSCmdDlg.cpp : implementation file
//
#include "stdafx.h"
#include "smsmanager.h"
#include "TSCmdDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTSCmdDlg dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_TSCmd_Modify.h"
CTSCmdDlg::CTSCmdDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTSCmdDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTSCmdDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_bInit = false;
m_bRefresh = false;
}
void CTSCmdDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTSCmdDlg)
DDX_Control(pDX, IDC_TSCMD_LIST, m_wndList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTSCmdDlg, CDialog)
//{{AFX_MSG_MAP(CTSCmdDlg)
ON_WM_SIZE()
ON_NOTIFY(NM_DBLCLK, IDC_TSCMD_LIST, OnDblclkTscmdList)
ON_NOTIFY(NM_RCLICK, IDC_TSCMD_LIST, OnRclickTscmdList)
ON_NOTIFY(LVN_KEYDOWN, IDC_TSCMD_LIST, OnKeydownTscmdList)
//}}AFX_MSG_MAP
ON_COMMAND( MENU_TSCMD_ADD , On_TSCmd_Add )
ON_COMMAND( MENU_TSCMD_MODIFY , On_TSCmd_Modify )
ON_COMMAND( MENU_TSCMD_DEL , On_TSCmd_Del )
ON_COMMAND( MENU_TSCMD_REFRESH, On_TSCmd_Refresh )
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTSCmdDlg message handlers
BOOL CTSCmdDlg::ReShow(BOOL bRefresh)
{
ShowWindow( SW_SHOW );
if ( bRefresh || !m_bRefresh )
{
RefreshInfo();
}
return true;
}
BOOL CTSCmdDlg::ReHide()
{
ShowWindow( SW_HIDE );
return true;
}
BOOL CTSCmdDlg::RefreshInfo()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_SP) )
{
return false;
}
m_pMainFrame->SendFrame(SMSFUNC_TSCMD_SEE,NULL,0);
return true;
}
BOOL CTSCmdDlg::ProcessSocket(Socket_Head *pHead)
{
//È¡¹ýÂËÐÅÏ¢
if (pHead->lFuncType == SMSFUNC_TSCMD_SEE)
{
m_bRefresh = true; //ÒѾ­Ë¢Ð¹ý
ANS_TSCmd_See * pSee = (ANS_TSCmd_See *)pHead->pFrame;
ANS_TSCmd_SeeData * pData = (ANS_TSCmd_SeeData *)(pHead->pFrame+sizeof(ANS_TSCmd_See));
m_wndList.DeleteAllItems(); //ɾ³ýÔ­ÓеÄÄÚÈÝ
this->Close(); //¹Ø±ÕÔ­¶ÓÁÐ
TCHAR Buf[32];
for ( int i=0;i<pSee->lCount;i++ )
{
ANS_TSCmd_SeeData * pNewData = new ANS_TSCmd_SeeData;
*pNewData = *pData;
POSITION pos = m_TSCmd.AddTail(pNewData);
//m_wndList.SetHeadings(_T("ÐòºÅ,50; Ö¸ÁîÃû³Æ,80;Ö¸Áî,50;·ÑÂÊ,50;·¢ËÍÌõÊý,60;·¢ËÍʱ¼ä,80;"));
//m_wndList.SetHeadings(_T("ÐòºÅ,50; Ãû³Æ,120; Ö¸ Áî,60; ÀàÐÍ,80;·ÑÂÊ,55;·¢ËÍÌõÊý,70;·¢ËÍʱ¼ä,75;ÿÌì·¢ËÍ,70; ÐÇ ÆÚ,200;"));
_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->szOperCmd);
if ( pData->lType == 0 )
m_wndList.SetItemText(i,3,_T(" µã²¥"));
else
m_wndList.SetItemText(i,3,_T(" ¶¨ÖÆ"));
_stprintf(Buf,_T("%2d") , pData->lPrice );
m_wndList.SetItemText(i,4,Buf);
_stprintf(Buf,_T("%2d") , pData->lSendNum );
m_wndList.SetItemText(i,5,Buf);
_stprintf(Buf,_T("%02d:%02d:%02d") , pData->tDZSendTime.wHour,pData->tDZSendTime.wMinute,pData->tDZSendTime.wSecond );
m_wndList.SetItemText(i,6,Buf);
if ( pData->bWeek )
{
m_wndList.SetItemText(i,7,_T(" ·ñ"));
memset(Buf,0,sizeof(Buf));
if ( pData->szWeekDay[0] == '1' )
_tcscat(Buf,_T("¡¢ÈÕ"));
if ( pData->szWeekDay[1] == '1' )
_tcscat(Buf,_T("¡¢Ò»"));
if ( pData->szWeekDay[2] == '1' )
_tcscat(Buf,_T("¡¢¶þ"));
if ( pData->szWeekDay[3] == '1' )
_tcscat(Buf,_T("¡¢Èý"));
if ( pData->szWeekDay[4] == '1' )
_tcscat(Buf,_T("¡¢ËÄ"));
if ( pData->szWeekDay[5] == '1' )
_tcscat(Buf,_T("¡¢Îå"));
if ( pData->szWeekDay[6] == '1' )
_tcscat(Buf,_T("¡¢Áù"));
m_wndList.SetItemText(i,8,Buf+2);
}
else
{
m_wndList.SetItemText(i,7,_T(" ÊÇ"));
m_wndList.SetItemText(i,8,_T(""));
}
pData ++;
}
return true;
}
//Ìí¼Ó¹ýÂË´ÊÓï
if (pHead->lFuncType == SMSFUNC_TSCMD_ADD)
{
ANS_TSCmd_Add * pAdd = (ANS_TSCmd_Add *)pHead->pFrame;
ANS_TSCmd_SeeData * pData = (ANS_TSCmd_SeeData *)(pHead->pFrame+sizeof(ANS_TSCmd_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->szOperCmd);
if ( pData->lType == 0 )
m_wndList.SetItemText(lCount,3,_T(" µã²¥"));
else
m_wndList.SetItemText(lCount,3,_T(" ¶¨ÖÆ"));
_stprintf(Buf,_T("%2d") , pData->lPrice );
m_wndList.SetItemText(lCount,4,Buf);
_stprintf(Buf,_T("%2d") , pData->lSendNum );
m_wndList.SetItemText(lCount,5,Buf);
_stprintf(Buf,_T("%02d:%02d:%02d") , pData->tDZSendTime.wHour,pData->tDZSendTime.wMinute,pData->tDZSendTime.wSecond );
m_wndList.SetItemText(lCount,6,Buf);
if ( pData->bWeek )
{
m_wndList.SetItemText(lCount,7,_T(" ·ñ"));
memset(Buf,0,sizeof(Buf));
if ( pData->szWeekDay[0] == '1' )
_tcscat(Buf,_T("¡¢ÈÕ"));
if ( pData->szWeekDay[1] == '1' )
_tcscat(Buf,_T("¡¢Ò»"));
if ( pData->szWeekDay[2] == '1' )
_tcscat(Buf,_T("¡¢¶þ"));
if ( pData->szWeekDay[3] == '1' )
_tcscat(Buf,_T("¡¢Èý"));
if ( pData->szWeekDay[4] == '1' )
_tcscat(Buf,_T("¡¢ËÄ"));
if ( pData->szWeekDay[5] == '1' )
_tcscat(Buf,_T("¡¢Îå"));
if ( pData->szWeekDay[6] == '1' )
_tcscat(Buf,_T("¡¢Áù"));
m_wndList.SetItemText(lCount,8,Buf+2);
}
else
{
m_wndList.SetItemText(lCount,7,_T(" ÊÇ"));
m_wndList.SetItemText(lCount,8,_T(""));
}
ANS_TSCmd_SeeData * pData2 = new ANS_TSCmd_SeeData;
*pData2 = *pData;
POSITION pos = m_TSCmd.AddTail( pData2 );
m_wndList.SetItemData( lCount, (DWORD_PTR)pos );
//Èç¹û·µ»ØµÄÓû§ID´íÎó£¬ÔòÖØÐÂË¢ÐÂ
if ( pData->lTSCmdID <= 0 )
{
RefreshInfo();
}
}
return true;
}
//Ð޸ĹýÂËÐÅÏ¢
if (pHead->lFuncType == SMSFUNC_TSCMD_MODIFY)
{
ANS_TSCmd_Modify * pModify = (ANS_TSCmd_Modify *)pHead->pFrame;
ANS_TSCmd_SeeData * pData = (ANS_TSCmd_SeeData *)(pHead->pFrame+sizeof(ANS_TSCmd_Modify));
SetLockItem( pModify->lItem , false ); //½âËø
if ( pModify->lCount == 1 ) //µÈÓÚ1ʱ±íʾÐ޸ijɹ¦
{
POSITION pos = (POSITION)m_wndList.GetItemData(pModify->lItem);
ANS_TSCmd_SeeData * pData2 = m_TSCmd.GetNext( pos );
if ( pData2 )
{
*pData2 = *pData; //È¡µ½ÐµÄÊý¾Ý
//ÉèÖÃеÄÊý¾Ý
TCHAR Buf[32]={0};
int i = pModify->lItem;
m_wndList.SetItemText(i,1,pData->szName);
m_wndList.SetItemText(i,2,pData->szOperCmd);
if ( pData->lType == 0 )
m_wndList.SetItemText(i,3,_T(" µã²¥"));
else
m_wndList.SetItemText(i,3,_T(" ¶¨ÖÆ"));
_stprintf(Buf,_T("%2d") , pData->lPrice );
m_wndList.SetItemText(i,4,Buf);
_stprintf(Buf,_T("%2d") , pData->lSendNum );
m_wndList.SetItemText(i,5,Buf);
_stprintf(Buf,_T("%02d:%02d:%02d") , pData->tDZSendTime.wHour,pData->tDZSendTime.wMinute,pData->tDZSendTime.wSecond );
m_wndList.SetItemText(i,6,Buf);
if ( pData->bWeek )
{
m_wndList.SetItemText(i,7,_T(" ·ñ"));
memset(Buf,0,sizeof(Buf));
if ( pData->szWeekDay[0] == '1' )
_tcscat(Buf,_T("¡¢ÈÕ"));
if ( pData->szWeekDay[1] == '1' )
_tcscat(Buf,_T("¡¢Ò»"));
if ( pData->szWeekDay[2] == '1' )
_tcscat(Buf,_T("¡¢¶þ"));
if ( pData->szWeekDay[3] == '1' )
_tcscat(Buf,_T("¡¢Èý"));
if ( pData->szWeekDay[4] == '1' )
_tcscat(Buf,_T("¡¢ËÄ"));
if ( pData->szWeekDay[5] == '1' )
_tcscat(Buf,_T("¡¢Îå"));
if ( pData->szWeekDay[6] == '1' )
_tcscat(Buf,_T("¡¢Áù"));
m_wndList.SetItemText(i,8,Buf+2);
}
else
{
m_wndList.SetItemText(i,7,_T(" ÊÇ"));
m_wndList.SetItemText(i,8,_T(""));
}
}
}
return true;
}
//ɾ³ý¹ýÂË´ÊÓï
if (pHead->lFuncType == SMSFUNC_TSCMD_DEL)
{
ANS_TSCmd_Del * pDel = (ANS_TSCmd_Del *)pHead->pFrame;
ANS_TSCmd_DelData * pDelData = (ANS_TSCmd_DelData *)(pHead->pFrame+sizeof(ANS_TSCmd_Del));
POSITION pos,pos2;
ANS_TSCmd_SeeData * pSPData;
for ( int i = pDel->lCount-1 ; i>=0 ; i-- )
{
if ( pDelData[i].lTSCmdID ) //ɾ³ý³É¹¦
{
pos = (POSITION)m_wndList.GetItemData( pDelData[i].lItem );
pos2 = pos;
pSPData = m_TSCmd.GetNext( pos );
if ( pSPData->lTSCmdID == pDelData[i].lTSCmdID ) //IDÏàͬµÄ²Å¿Éɾ³ý
{
delete pSPData; //ÏÈɾ³ýÊý¾Ý
m_TSCmd.RemoveAt(pos2); //´ÓÁбíÖÐɾ³ý
m_wndList.DeleteItem(pDelData[i].lItem); //´ÓListCtrlÖÐɾ³ý
}
}
}
return true;
}
return false;
}
BOOL CTSCmdDlg::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_SP) );
m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_LOCK) );
m_wndList.SubClassWindow2();
m_wndList.SetHeadings(_T("ÐòºÅ,50; Ãû³Æ,120; Ö¸ Áî,60; ÀàÐÍ,80;·ÑÂÊ,55;·¢ËÍÌõÊý,70;·¢ËÍʱ¼ä,75;ÿÌì·¢ËÍ,70; ÐÇ ÆÚ,200;"));
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 CTSCmdDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if ( m_bInit )
{
m_wndList.MoveWindow( 0 , 0 , cx,cy);
}
}
void CTSCmdDlg::Close()
{
//Çå³ý¶ÓÁÐÖеÄÄÚÈÝ
while (!m_TSCmd.IsEmpty())
{
ANS_TSCmd_SeeData * pData = m_TSCmd.GetHead();
m_TSCmd.RemoveHead();
delete pData;
}
}
void CTSCmdDlg::SetLockItem(long lItem, BOOL bLock)
{
if ( bLock )
m_wndList.SetIconIndex( lItem , 1 );
else
m_wndList.SetIconIndex( lItem , 0 );
}
BOOL CTSCmdDlg::isLockItem(long lItem, BOOL bShowWarning)
{
BOOL b = (m_wndList.GetIconIndex(lItem) == 1);
if ( b && bShowWarning )
{
MessageBox( _T("Õý¼±»Ëø¶¨£¬ÇëµÈ´ý·þÎñÆ÷·µ»ØºóÔÙ²Ù×÷!") , _T("Ëø¶¨ÖÐ") , MB_ICONINFORMATION );
}
return b;
}
long CTSCmdDlg::GetCurrentSelected()
{
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
if ( pos )
{
return m_wndList.GetNextSelectedItem(pos);
}
return -1;
}
void CTSCmdDlg::OnDblclkTscmdList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
On_TSCmd_Modify();
}
void CTSCmdDlg::OnRclickTscmdList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
ShowRMenu();
}
void CTSCmdDlg::OnKeydownTscmdList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CTSCmdDlg::ShowRMenu()
{
if (!m_pMainFrame->GetUserPurview(PURVIEW_SP,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_TSCMD_ADD, _T(" Ìí ¼Ó ") );
//ÐÞ¸Ä
if ( lItem >=0 && !bLock)
{
menu.AppendMenu(MF_STRING , MENU_TSCMD_MODIFY, _T(" ÐÞ ¸Ä ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_TSCMD_MODIFY , _T(" ÐÞ ¸Ä ") );
}
//ɾ³ý
if ( lItem >=0 && !bLock )
{
menu.AppendMenu(MF_STRING , MENU_TSCMD_DEL, _T(" ɾ ³ý ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_TSCMD_DEL , _T(" ɾ ³ý ") );
}
menu.AppendMenu(MF_SEPARATOR );
//Ë¢ÐÂ
menu.AppendMenu(MF_STRING , MENU_TSCMD_REFRESH, _T(" ˢ Р") );
//ÏÔʾ²Ëµ¥
POINT pt ;
::GetCursorPos( &pt );
//this->ClientToScreen( &pt);
menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
menu.DestroyMenu();
}
void CTSCmdDlg::On_TSCmd_Add()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_SP) )
{
return ;
}
ANS_TSCmd_SeeData SPData={0};
DLG_TSCmd_Modify dlg(this);
dlg.SetParam( SPData,0,true );
if ( dlg.DoModal() == IDOK )
{
long lSize = sizeof(REQ_TSCmd_Add)+sizeof(ANS_TSCmd_SeeData);
BYTE * pAddData = new BYTE[lSize];memset(pAddData,0,lSize);
REQ_TSCmd_Add * pAdd = (REQ_TSCmd_Add *)pAddData; //Í·
ANS_TSCmd_SeeData * pSPData = (ANS_TSCmd_SeeData *)(pAddData+sizeof(REQ_TSCmd_Add));
*pSPData = dlg.GetParam();
pAdd->lCount = 1;
m_pMainFrame->SendFrame( SMSFUNC_TSCMD_ADD , pAddData , lSize );
}
}
void CTSCmdDlg::On_TSCmd_Modify()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_SP) )
{
return ;
}
long lItem = GetCurrentSelected();
if ( lItem < 0 )
return ;
if (isLockItem(lItem))
{
return ;
}
POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
POSITION pos2 = pos;
ANS_TSCmd_SeeData * pData = m_TSCmd.GetNext( pos );
if (pData)
{
DLG_TSCmd_Modify dlg(this);
dlg.SetParam( *pData,pos2,false);
if ( dlg.DoModal() == IDOK )
{
SetLockItem( lItem ,true);
long lSize = sizeof(REQ_TSCmd_Modify)+sizeof(ANS_TSCmd_SeeData);
BYTE * pModifyData = new BYTE[lSize];memset(pModifyData,0,lSize);
REQ_TSCmd_Modify * pModify = (REQ_TSCmd_Modify *)pModifyData; //Í·
ANS_TSCmd_SeeData * pSPData = (ANS_TSCmd_SeeData *)(pModifyData+sizeof(REQ_TSCmd_Modify));
*pSPData = dlg.GetParam();
pModify->lItem = lItem;
pModify->lCount = 1;
m_pMainFrame->SendFrame( SMSFUNC_TSCMD_MODIFY , pModifyData , lSize );
}
}
}
void CTSCmdDlg::On_TSCmd_Del()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_SP) )
{
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_TSCmd_Del)+sizeof(ANS_TSCmd_DelData)*lCount;
BYTE * pDelSend = new BYTE[lSize];memset(pDelSend,0,lSize);
REQ_TSCmd_Del * pDel = (REQ_TSCmd_Del *)pDelSend; //Í·
ANS_TSCmd_DelData * pDelData = (ANS_TSCmd_DelData *)(pDelSend+sizeof(REQ_TSCmd_Del));
pDel->lCount = lCount;
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
ANS_TSCmd_SeeData * pSPData;
POSITION pos2;
while(pos)
{
pDelData->lItem = m_wndList.GetNextSelectedItem(pos);
pos2 = (POSITION)m_wndList.GetItemData(pDelData->lItem);
pSPData = m_TSCmd.GetNext(pos2); //È¡µÃÁбíÖеÄpos
pDelData->lTSCmdID = pSPData->lTSCmdID;
pDelData ++;
}
m_pMainFrame->SendFrame( SMSFUNC_TSCMD_DEL , pDelSend , lSize );
}
void CTSCmdDlg::On_TSCmd_Refresh()
{
RefreshInfo();
}
BOOL CTSCmdDlg::FindOperCmd(const TCHAR *pOperCmd, POSITION exPos)
{
POSITION pos = m_TSCmd.GetHeadPosition();
POSITION pos2;
while (pos)
{
pos2 = pos;
ANS_TSCmd_SeeData * pData = m_TSCmd.GetNext( pos );
if ( pos2 != exPos )
{
if ( !_tcscmp( pData->szOperCmd , pOperCmd ) )
return true;
}
}
return false;
}
BOOL CTSCmdDlg::FindSPName(const TCHAR *pSPName, POSITION exPos)
{
POSITION pos = m_TSCmd.GetHeadPosition();
POSITION pos2;
while (pos)
{
pos2 = pos;
ANS_TSCmd_SeeData * pData = m_TSCmd.GetNext( pos );
if ( pos2 != exPos )
{
if ( !_tcscmp( pData->szName , pSPName ) )
return true;
}
}
return false;
}