SmsManager/C_YWYGroup.cpp

464 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_YWYGroup.cpp : implementation file
//
#include "stdafx.h"
#include "smsmanager.h"
#include "C_YWYGroup.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CC_YWYGroup dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_C_YWYGroup_Modify.h"
CC_YWYGroup::CC_YWYGroup(CWnd* pParent /*=NULL*/)
: CDialog(CC_YWYGroup::IDD, pParent)
{
//{{AFX_DATA_INIT(CC_YWYGroup)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_bInit = false;
m_bRefresh = false;
}
void CC_YWYGroup::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CC_YWYGroup)
DDX_Control(pDX, IDC_YWYGROUP_LIST, m_wndList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CC_YWYGroup, CDialog)
//{{AFX_MSG_MAP(CC_YWYGroup)
ON_WM_SIZE()
ON_NOTIFY(NM_DBLCLK, IDC_YWYGROUP_LIST, OnDblclkYwyList)
ON_NOTIFY(NM_RCLICK, IDC_YWYGROUP_LIST, OnRclickYwyList)
ON_NOTIFY(LVN_KEYDOWN, IDC_YWYGROUP_LIST, OnKeydownYwyList)
//}}AFX_MSG_MAP
ON_COMMAND( MENU_YWY_ADD , On_User_Add)
ON_COMMAND( MENU_YWY_MODIFY , On_User_Modify)
ON_COMMAND( MENU_YWY_DEL , On_User_Del)
ON_COMMAND( MENU_YWY_REFRESH, On_User_Refresh)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CC_YWYGroup message handlers
BOOL CC_YWYGroup::RefreshInfo()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_SEE) )
{
return false;
}
m_pMainFrame->SendFrame(SMSFUNC_GETYWYGROUP,NULL,0);
return true;
}
void CC_YWYGroup::Close()
{
Close_YWYGroup();
}
BOOL CC_YWYGroup::ReShow(BOOL bRefresh)
{
ShowWindow( SW_SHOW );
if ( bRefresh || !m_bRefresh )
{
RefreshInfo();
}
return true;
}
BOOL CC_YWYGroup::ReHide()
{
ShowWindow( SW_HIDE );
return true;
}
void CC_YWYGroup::SetLockItem(long lItem, BOOL bLock)
{
if ( bLock )
m_wndList.SetIconIndex( lItem , 1 );
else
m_wndList.SetIconIndex( lItem , 0 );
}
long CC_YWYGroup::GetCurrentSelected()
{
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
if ( pos )
{
return m_wndList.GetNextSelectedItem(pos);
}
return -1;
}
BOOL CC_YWYGroup::isLockItem(long lItem, BOOL bShowWarning)
{
BOOL b = (m_wndList.GetIconIndex(lItem) == 1);
if ( b && bShowWarning )
{
MessageBox( _T("<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD>ٲ<EFBFBD><EFBFBD><EFBFBD>!") , _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") , MB_ICONINFORMATION );
}
return b;
}
BOOL CC_YWYGroup::ProcessSocket(Socket_Head *pHead)
{
//ȡ<><C8A1><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>Ϣ
if (pHead->lFuncType == SMSFUNC_GETYWYGROUP)
{
m_bRefresh = true; //<2F>Ѿ<EFBFBD>ˢ<EFBFBD>¹<EFBFBD>
ANS_GetYWYGroup * pYWYGroup = (ANS_GetYWYGroup *)pHead->pFrame;
ANS_GetYWYGroupData * pData = (ANS_GetYWYGroupData *)(pHead->pFrame+sizeof(ANS_GetYWYGroup));
m_wndList.DeleteAllItems(); //ɾ<><C9BE>ԭ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
this->Close_YWYGroup(); //<2F>ر<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>
TCHAR Buf[32];
for ( int i=0;i<pYWYGroup->lCount;i++ )
{
ANS_GetYWYGroupData * pNewData = new ANS_GetYWYGroupData;
*pNewData = *pData;
POSITION pos = m_YWYGroup.AddTail(pNewData);
m_wndList.SetHeadings(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,50; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,120; <20><>ע,200;"));
_stprintf(Buf , _T("%d") , i+1 );
m_wndList.InsertItem( i , Buf , 0 );
m_wndList.SetItemData( i , (DWORD_PTR)pos ); //<2F><>Pos
m_wndList.SetItemText(i,1,pData->szName);
m_wndList.SetItemText(i,2,pData->szBZ);
pData ++;
}
return true;
}
//<2F>޸Ĺ<DEB8><C4B9><EFBFBD>Ա<EFBFBD><D4B1>Ϣ
if (pHead->lFuncType == SMSFUNC_YWYGROUP_MODIFY)
{
ANS_YWYGroup_Modify * pModify = (ANS_YWYGroup_Modify *)pHead->pFrame;
ANS_GetYWYGroupData * pData = (ANS_GetYWYGroupData *)(pHead->pFrame+sizeof(ANS_YWYGroup_Modify));
SetLockItem( pModify->lItem , false ); //<2F><><EFBFBD><EFBFBD>
if ( pModify->lCount == 1 ) //<2F><><EFBFBD><EFBFBD><31><CAB1>ʾ<EFBFBD>޸ijɹ<C4B3>
{
POSITION pos = (POSITION)m_wndList.GetItemData(pModify->lItem);
ANS_GetYWYGroupData * pData2 = m_YWYGroup.GetNext( pos );
if ( pData2 )
{
*pData2 = *pData; //ȡ<><C8A1><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>
m_wndList.SetItemText( pModify->lItem , 1 , pData->szName );
m_wndList.SetItemText( pModify->lItem , 2 , pData->szBZ );
}
}
return true;
}
//<2F><><EFBFBD>ӹ<EFBFBD><D3B9><EFBFBD>Ա
if (pHead->lFuncType == SMSFUNC_YWYGROUP_ADD)
{
ANS_YWYGroup_Add * pAdd = (ANS_YWYGroup_Add *)pHead->pFrame;
ANS_GetYWYGroupData * pData = (ANS_GetYWYGroupData *)(pHead->pFrame+sizeof(ANS_YWYGroup_Add));
if ( pAdd->lCount == 1 ) //<2F><><EFBFBD><EFBFBD><31><CAB1>ʾ<EFBFBD>޸ijɹ<C4B3>
{
long lCount = m_wndList.GetItemCount();
TCHAR Buf[32];
_stprintf( Buf, _T("%d") , lCount +1 );
//<2F><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>
m_wndList.InsertItem( lCount , Buf , 0 );
m_wndList.SetItemText( lCount , 1 , pData->szName );
m_wndList.SetItemText( lCount , 2 , pData->szBZ );
ANS_GetYWYGroupData * pData2 = new ANS_GetYWYGroupData;
*pData2 = *pData;
POSITION pos = m_YWYGroup.AddTail( pData2 );
m_wndList.SetItemData( lCount, (DWORD_PTR)pos );
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5>û<EFBFBD>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>
if ( pData->lGroupID <= 0 )
{
RefreshInfo();
}
}
return true;
}
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա
if (pHead->lFuncType == SMSFUNC_YWYGROUP_DEL)
{
ANS_YWYGroup_Del * pDel = (ANS_YWYGroup_Del *)pHead->pFrame;
ANS_YWYGroup_DelData * pDelData = (ANS_YWYGroup_DelData *)(pHead->pFrame+sizeof(ANS_YWYGroup_Del));
POSITION pos,pos2;
ANS_GetYWYGroupData * pYWYGroupData;
for ( int i = pDel->lCount-1 ; i>=0 ; i-- )
{
if ( pDelData[i].lGroupID ) //ɾ<><C9BE><EFBFBD>ɹ<EFBFBD>
{
pos = (POSITION)m_wndList.GetItemData( pDelData[i].lItem );
pos2 = pos;
pYWYGroupData = m_YWYGroup.GetNext( pos );
if ( pYWYGroupData->lGroupID == pDelData[i].lGroupID ) //ID<49><44>ͬ<EFBFBD>IJſ<C4B2>ɾ<EFBFBD><C9BE>
{
delete pYWYGroupData; //<2F><>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_YWYGroup.RemoveAt(pos2); //<2F><><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE>
m_wndList.DeleteItem(pDelData[i].lItem); //<2F><>ListCtrl<72><6C>ɾ<EFBFBD><C9BE>
}
}
}
return true;
}
return false;
}
void CC_YWYGroup::ShowRMenu()
{
if (!m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_SEE,false)) //û<>в鿴Ȩ<E9BFB4><C8A8>
return ;
CMenu menu;
menu.CreatePopupMenu();
BOOL bLock = false;
long lItem = this->GetCurrentSelected();
if ( lItem >= 0 )
bLock = isLockItem( lItem , false ); //ȡ<><C8A1><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>
if ( m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_ADD,false) )
{
menu.AppendMenu(MF_STRING , MENU_YWY_ADD, _T(" <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD> ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_YWY_ADD , _T(" <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD> ") );
}
//<2F>޸<EFBFBD>
if ( m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_MODIFY,false) && lItem >=0 && !bLock)
{
menu.AppendMenu(MF_STRING , MENU_YWY_MODIFY, _T(" <20><> <20><> ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_YWY_MODIFY , _T(" <20><> <20><> ") );
}
//ɾ<><C9BE>
if ( m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_DEL,false) && lItem >=0 && !bLock )
{
menu.AppendMenu(MF_STRING , MENU_YWY_DEL, _T(" ɾ <20><> ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_YWY_DEL , _T(" ɾ <20><> ") );
}
menu.AppendMenu(MF_SEPARATOR );
//ˢ<><CBA2>
menu.AppendMenu(MF_STRING , MENU_YWY_REFRESH, _T(" ˢ <20><> ") );
//<2F><>ʾ<EFBFBD>˵<EFBFBD>
POINT pt ;
::GetCursorPos( &pt );
//this->ClientToScreen( &pt);
menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
menu.DestroyMenu();
}
BOOL CC_YWYGroup::OnInitDialog()
{
CDialog::OnInitDialog();
//ȡ<>ù<EFBFBD><C3B9>ò<EFBFBD><C3B2><EFBFBD>
//CMainFrame * pFrame = static_cast <CMainFrame *>((CMainFrame *)AfxGetMainWnd());
this->GetParent()->GetParentFrame();
m_pMainFrame = (CMainFrame *)this->GetParent()->GetParentFrame();
m_pSocket = &m_pMainFrame->m_Socket;
//<2F><>ʼ<EFBFBD><CABC>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("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,50; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,120; <20><>ע,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 CC_YWYGroup::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if ( m_bInit )
{
m_wndList.MoveWindow( 0 , 0 , cx,cy);
}
}
void CC_YWYGroup::OnDblclkYwyList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
On_User_Modify();
}
void CC_YWYGroup::OnRclickYwyList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
ShowRMenu();
}
void CC_YWYGroup::OnKeydownYwyList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CC_YWYGroup::On_User_Add()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_ADD) )
{
return ;
}
ANS_GetYWYGroupData YWYGroupData={0};
DLG_C_YWYGroup_Modify dlg(this);
dlg.SetParam( YWYGroupData,0,true);
if ( dlg.DoModal() == IDOK )
{
long lSize = sizeof(REQ_YWYGroup_Add)+sizeof(ANS_GetYWYGroupData);
BYTE * pAddData = new BYTE[lSize];memset(pAddData,0,lSize);
REQ_YWYGroup_Add * pAdd = (REQ_YWYGroup_Add *)pAddData; //ͷ
ANS_GetYWYGroupData * pYWYGroupData = (ANS_GetYWYGroupData *)(pAddData+sizeof(REQ_YWYGroup_Add));
*pYWYGroupData = dlg.GetParam();
pAdd->lCount = 1;
m_pMainFrame->SendFrame( SMSFUNC_YWYGROUP_ADD , pAddData , lSize );
}
}
void CC_YWYGroup::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_GetYWYGroupData * pData = m_YWYGroup.GetNext( pos );
if (pData)
{
DLG_C_YWYGroup_Modify dlg(this);
dlg.SetParam( *pData,pos2,false);
if ( dlg.DoModal() == IDOK )
{
SetLockItem( lItem ,true);
long lSize = sizeof(REQ_YWYGroup_Modify)+sizeof(ANS_GetYWYGroupData);
BYTE * pModifyData = new BYTE[lSize];memset(pModifyData,0,lSize);
REQ_YWYGroup_Modify * pModify = (REQ_YWYGroup_Modify *)pModifyData; //ͷ
ANS_GetYWYGroupData * pYWYGroupData = (ANS_GetYWYGroupData *)(pModifyData+sizeof(REQ_YWYGroup_Modify));
*pYWYGroupData = dlg.GetParam();
pModify->lItem = lItem;
pModify->lCount = 1;
m_pMainFrame->SendFrame( SMSFUNC_YWYGROUP_MODIFY , pModifyData , lSize );
}
}
}
void CC_YWYGroup::On_User_Del()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_DEL) )
{
return ;
}
long lRet = MessageBox( _T("<EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") , _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") , MB_ICONQUESTION|MB_YESNOCANCEL|MB_DEFBUTTON2);
if ( lRet != IDYES )
return;
long lCount = m_wndList.GetSelectedCount();
long lSize = sizeof(REQ_YWYGroup_Del)+sizeof(ANS_YWYGroup_DelData)*lCount;
BYTE * pDelSend = new BYTE[lSize];memset(pDelSend,0,lSize);
REQ_YWYGroup_Del * pDel = (REQ_YWYGroup_Del *)pDelSend; //ͷ
ANS_YWYGroup_DelData * pDelData = (ANS_YWYGroup_DelData *)(pDelSend+sizeof(REQ_YWYGroup_Del));
pDel->lCount = lCount;
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
ANS_GetYWYGroupData * pYWYGroupData;
POSITION pos2;
while(pos)
{
pDelData->lItem = m_wndList.GetNextSelectedItem(pos);
pos2 = (POSITION)m_wndList.GetItemData(pDelData->lItem);
pYWYGroupData = m_YWYGroup.GetNext(pos2); //ȡ<><C8A1><EFBFBD>б<EFBFBD><D0B1>е<EFBFBD>pos
pDelData->lGroupID = pYWYGroupData->lGroupID;
pDelData ++;
}
m_pMainFrame->SendFrame( SMSFUNC_YWYGROUP_DEL , pDelSend , lSize );
}
void CC_YWYGroup::On_User_Refresh()
{
RefreshInfo();
}
BOOL CC_YWYGroup::FindYWYLoginName(const TCHAR *pName, POSITION exPos)
{
POSITION pos = m_YWYGroup.GetHeadPosition();
POSITION pos2;
while (pos)
{
pos2 = pos;
ANS_GetYWYGroupData * pData = m_YWYGroup.GetNext( pos );
if ( pos2 != exPos )
{
if ( !_tcscmp( pData->szName , pName ) )
return true;
}
}
return false;
}
BOOL CC_YWYGroup::FindYWYName(const TCHAR *pName, POSITION exPos)
{
POSITION pos = m_YWYGroup.GetHeadPosition();
POSITION pos2;
while (pos)
{
pos2 = pos;
ANS_GetYWYGroupData * pData = m_YWYGroup.GetNext( pos );
if ( pos2 != exPos )
{
if ( !_tcscmp( pData->szName , pName ) )
return true;
}
}
return false;
}
void CC_YWYGroup::Close_YWYGroup()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
while (!m_YWYGroup.IsEmpty())
{
ANS_GetYWYGroupData * pYWYGroup = m_YWYGroup.GetHead();
m_YWYGroup.RemoveHead();
delete pYWYGroup;
}
}