CorpSms/FPLFile.cpp

575 lines
15 KiB
C++
Raw Permalink 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.

// FPLFile.cpp : implementation file
//
#include "stdafx.h"
#include "corpsms.h"
#include "FPLFile.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFPLFile dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_PLFile_Add.h"
CFPLFile::CFPLFile(CWnd* pParent /*=NULL*/)
: CDialog(CFPLFile::IDD, pParent)
{
//{{AFX_DATA_INIT(CFPLFile)
//}}AFX_DATA_INIT
m_bInit = false;
m_bRefresh = false;
m_bShowToday = true;
m_bShowProcess = false;
m_pPLFileAdd = NULL;
}
void CFPLFile::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFPLFile)
DDX_Control(pDX, IDC_PLFILE_LIST, m_wndList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFPLFile, CDialog)
//{{AFX_MSG_MAP(CFPLFile)
ON_WM_SIZE()
ON_NOTIFY(NM_DBLCLK, IDC_PLFILE_LIST, OnDblclkSmsdsList)
ON_NOTIFY(NM_RCLICK, IDC_PLFILE_LIST, OnRclickSmsdsList)
ON_NOTIFY(LVN_KEYDOWN, IDC_PLFILE_LIST, OnKeydownSmsdsList)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
ON_MESSAGE( LIST_DROP_BEGIN , On_List_DropBegin )
ON_COMMAND(MENU_PLFILE_ADD , On_PLFILE_Add )
ON_COMMAND(MENU_PLFILE_SEE , On_PLFILE_See )
ON_COMMAND(MENU_PLFILE_DEL , On_PLFILE_Del )
ON_COMMAND(MENU_PLFILE_SENDSMS , On_PLFILE_SendSms )
ON_COMMAND(MENU_PLFILE_SENDMMS , On_PLFILE_SendMms )
ON_COMMAND(MENU_PLFILE_REFRESH , On_PLFILE_Refresh )
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFPLFile message handlers
BOOL CFPLFile::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;
m_AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection );
//³õʼ»¯List
m_Image.Create(16,16,ILC_COLOR32|ILC_MASK,5,5);
m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_PLFILE) );
m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_LOCK) );
m_wndList.SubClassWindow2();
m_wndList.SetHeadings(_T("ÐòºÅ,50; ״̬,70; ÎļþÃèÊö,300; ÉÏ´«ÈË,100; ÉÏ´«Ê±¼ä,150; ºÅÂëÊýÁ¿,100;"));
m_wndList.SetGridLines(true);
m_wndList.SetImageList(&m_Image,LVSIL_SMALL);
//m_wndList.SetBkColor( RGB(237,191,175) );
//m_wndList.SetTextBkColor( RGB(237,191,175) );
m_bInit = true;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CFPLFile::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if ( m_bInit )
{
m_wndList.MoveWindow( 0 , 0 , cx,cy);
}
}
BOOL CFPLFile::ReHide()
{
ShowWindow( SW_HIDE );
return true;
}
BOOL CFPLFile::ReShow(BOOL bRefresh)
{
ShowWindow( SW_SHOW );
if ( bRefresh || !m_bRefresh )
{
RefreshInfo();
}
return true;
}
BOOL CFPLFile::RefreshInfo()
{
m_wndList.DeleteAllItems();
REQ_PLFile_See * pSee = new REQ_PLFile_See;
memset(pSee , 0 , sizeof(REQ_PLFile_See));
pSee->lCorpID = m_pMainFrame->m_lCorpID;
pSee->lUserID = m_pMainFrame->m_lUserID;
m_pMainFrame->SendFrame( SMSFUNC_PLFILE_SEE , (BYTE*)pSee , sizeof( REQ_PLFile_See ) ); //·¢ËÍÈ¡×ÊÁϵÄÇëÇó
return true;
}
long CFPLFile::GetCurrentSelected()
{
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
if ( pos )
{
return m_wndList.GetNextSelectedItem(pos);
}
return -1;
}
BOOL CFPLFile::ProcessSocket(Socket_Head_Add *pHead, BYTE *pFrame)
{
m_bRefresh = true; //ÒÑˢйý
if ( pHead->lFuncType == SMSFUNC_PLFILE_SEE) //ÕýÔÚÈ¡Óû§ÐÅÏ¢
{
ANS_PLFile_See * pSee = (ANS_PLFile_See *)pFrame;
ANS_PLFile_SeeData * pSeeData = (ANS_PLFile_SeeData *)(pFrame+sizeof(ANS_PLFile_See));
TCHAR szBuf[32]={0};
CString strTemp;
m_wndList.DeleteAllItems();
for ( int i = 0 ; i< pSee->lCount ; i++ )
{
//m_wndList.SetHeadings(_T("ÐòºÅ,50;״̬,60; ÎļþÃèÊö,130;ÉÏ´«ÈË,90;ÉÏ´«Ê±¼ä,120;ºÅÂëÊýÁ¿,100;"));
long lCount = m_wndList.GetItemCount();
m_wndList.InsertItem(lCount,_itot(lCount+1,szBuf,10),0);
long lTemp=1;
switch(pSeeData->lStatus)
{
case 0:
default:
strTemp = _T("δÍê³É");
break;
case 1:
strTemp = _T("Õý³£");
break;
}
m_wndList.SetItemText(lCount,lTemp++,strTemp);
m_wndList.SetItemText(lCount,lTemp++,pSeeData->szName);
m_wndList.SetItemText(lCount,lTemp++,pSeeData->szCreateUser);
strTemp.Format(_T("%04d.%02d.%02d %02d:%02d") , pSeeData->tCreateTime.wYear,pSeeData->tCreateTime.wMonth,pSeeData->tCreateTime.wDay,pSeeData->tCreateTime.wHour,pSeeData->tCreateTime.wMinute);
m_wndList.SetItemText(lCount,lTemp++,strTemp);
strTemp.Format(_T("%d") , pSeeData->lMobileCount);
m_wndList.SetItemText(lCount,lTemp++,strTemp);
ANS_PLFile_SeeData * pNewData = new ANS_PLFile_SeeData;
*pNewData = *pSeeData;
POSITION pos = m_PLFile.AddTail(pNewData);
m_wndList.SetItemData(lCount,(DWORD_PTR)pos);
pSeeData++;
}
return true;
}
//ɾ³ýÓû§
if (pHead->lFuncType == SMSFUNC_PLFILE_DEL)
{
ANS_PLFile_Del * pDel = (ANS_PLFile_Del *)pFrame;
ANS_PLFile_DelData * pDelData = (ANS_PLFile_DelData *)(pFrame+sizeof(ANS_PLFile_Del));
POSITION pos,pos2;
ANS_PLFile_SeeData * pPLFileData;
BOOL bError=false;
for ( int i = pDel->lCount-1 ; i>=0 ; i-- )
{
if ( pDelData[i].lPLFileID ) //ɾ³ý³É¹¦
{
pos = (POSITION)m_wndList.GetItemData( pDelData[i].lItem );
pos2 = pos;
pPLFileData = m_PLFile.GetNext( pos );
if ( pPLFileData->lPLFileID == pDelData[i].lPLFileID ) //IDÏàͬµÄ²Å¿Éɾ³ý
{
delete pPLFileData; //ÏÈɾ³ýÊý¾Ý
m_PLFile.RemoveAt(pos2); //´ÓÁбíÖÐɾ³ý
m_wndList.DeleteItem(pDelData[i].lItem); //´ÓListCtrlÖÐɾ³ý
}
}
else
{
bError = true;
}
}
if ( bError )
{
MessageBox(_T("ɾ³ýºÅÂëÎļþʧ°Ü£¬Çë¼ì²éºÅÂëÎļþÊÇ·ñÒѶ¨ÒåÔÚδ·¢ËÍÈÎÎñÖÐ!") , _T("´íÎó") , MB_ICONWARNING );
}
return true;
}
if ( pHead->lFuncType == SMSFUNC_PLFILE_ID ||
pHead->lFuncType == SMSFUNC_PLFILE_UP )
{
m_pPLFileAdd->ProcessSocket(pHead,pFrame);
return true;
}
return false;
}
void CFPLFile::SetToday(BOOL bToday)
{
if ( m_bShowToday != bToday )
{
m_bShowToday = bToday;
m_bRefresh = false;
}
}
void CFPLFile::OnDblclkSmsdsList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
On_PLFILE_See();
}
void CFPLFile::OnRclickSmsdsList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
ShowRMenu();
}
void CFPLFile::OnKeydownSmsdsList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
*pResult = 0;
if ( pLVKeyDow->wVKey == VK_DELETE )
{
On_PLFILE_Del();
}
if ( pLVKeyDow->wVKey == VK_SPACE)
{
On_PLFILE_See();
}
if ( pLVKeyDow->wVKey == 'R' || pLVKeyDow->wVKey == 'r')
{
On_PLFILE_Refresh();
}
if ( pLVKeyDow->wVKey == 'A' || pLVKeyDow->wVKey == 'a')
{
m_wndList.SelectAllItems();
}
}
void CFPLFile::OnOK()
{
//CDialog::OnOK();
}
void CFPLFile::OnCancel()
{
//CDialog::OnCancel();
}
void CFPLFile::ShowRMenu()
{
CMenu menu;
menu.CreatePopupMenu();
long lItem = this->GetCurrentSelected();
if ( m_pMainFrame->GetUserPurview( PURVIEW_GADDRESS_ADD,false ) )
{
menu.AppendMenu(MF_STRING , MENU_PLFILE_ADD , _T(" Ìí ¼Ó ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_PLFILE_SEE , _T(" Ìí ¼Ó ") );
}
if ( lItem >= 0 && m_pMainFrame->GetUserPurview( PURVIEW_GADDRESS_DEL,false ))
{
//menu.AppendMenu(MF_STRING , MENU_PLFILE_SEE , _T(" ²é ¿´ ") );
menu.AppendMenu(MF_STRING , MENU_PLFILE_DEL , _T(" ɾ ³ý ") );
}
else
{
//menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_PLFILE_SEE , _T(" ²é ¿´ ") );
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_PLFILE_DEL, _T(" ɾ ³ý ") );
}
menu.AppendMenu(MF_SEPARATOR );
if ( lItem >= 0 && m_pMainFrame->GetUserPurview( PURVIEW_SENDP,false ))
{
menu.AppendMenu(MF_STRING , MENU_PLFILE_SENDSMS , _T(" ·¢ËͶÌÐÅ ") );
menu.AppendMenu(MF_STRING , MENU_PLFILE_SENDMMS , _T(" ·¢ËͲÊÐÅ ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_STRING , MENU_PLFILE_SENDSMS , _T(" ·¢ËͶÌÐÅ ") );
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_STRING , MENU_PLFILE_SENDMMS , _T(" ·¢ËͲÊÐÅ ") );
}
//Ë¢ÐÂ
menu.AppendMenu(MF_STRING , MENU_PLFILE_REFRESH, _T(" ˢ Р") );
//ÏÔʾ²Ëµ¥
POINT pt ;
::GetCursorPos( &pt );
//this->ClientToScreen( &pt);
menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
menu.DestroyMenu();
}
void CFPLFile::On_PLFILE_Add()
{
DLG_PLFile_Add dlg(this);
m_pPLFileAdd = &dlg;
if ( dlg.DoModal()== IDOK )
{
RefreshInfo();
}
m_pPLFileAdd = NULL;
}
void CFPLFile::On_PLFILE_SendSms()
{
long lCount = m_wndList.GetSelectedCount();
if ( lCount <= 0 )
return ;
//·ÖÅäÊý¾Ý
long lSize = sizeof(Send_User)*lCount;
BYTE *pS = new BYTE[lSize];
memset( pS , 0 , lSize );
Send_User * pUser = (Send_User * )(pS);
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
long lCount2=0;
while ( pos )
{
long lItem = m_wndList.GetNextSelectedItem( pos );
POSITION pos2 = (POSITION)m_wndList.GetItemData(lItem);
ANS_PLFile_SeeData * pPLFileData = m_PLFile.GetNext(pos2); //È¡µÃÁбíÖеÄpos
if ( pPLFileData )
{
if ( pPLFileData->lStatus==1 && pPLFileData->lMobileCount > 0 )
{
_tcscpy(pUser->szNickName , _T("ÈÎÎñºÅÂë×é"));
_tcscpy(pUser->szGroup , _T("ºÅÂëÎļþ"));
_stprintf(pUser->szMobile , _T("%d") , pPLFileData->lMobileCount );
_tcscpy(pUser->szName , pPLFileData->szName);
_stprintf(pUser->szBZ , _T("%d") , pPLFileData->lPLFileID );
pUser ++;
lCount2 ++ ;
}
}
}
this->m_pMainFrame->m_pFuncView->m_DLGSend.ShowWindow( SW_SHOWNORMAL );
this->m_pMainFrame->m_pFuncView->m_DLGSend.List_AddUser(lCount2 , (Send_User *)pS);
if ( pS )
delete pS;
}
void CFPLFile::On_PLFILE_SendMms()
{
long lCount = m_wndList.GetSelectedCount();
if ( lCount <= 0 )
return ;
//·ÖÅäÊý¾Ý
long lSize = sizeof(Send_User)*lCount;
BYTE *pS = new BYTE[lSize];
memset( pS , 0 , lSize );
Send_User * pUser = (Send_User * )(pS);
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
long lCount2=0;
while ( pos )
{
long lItem = m_wndList.GetNextSelectedItem( pos );
POSITION pos2 = (POSITION)m_wndList.GetItemData(lItem);
ANS_PLFile_SeeData * pPLFileData = m_PLFile.GetNext(pos2); //È¡µÃÁбíÖеÄpos
if ( pPLFileData )
{
if ( pPLFileData->lStatus==1 && pPLFileData->lMobileCount > 0 )
{
_tcscpy(pUser->szNickName , _T("ÈÎÎñºÅÂë×é"));
_tcscpy(pUser->szGroup , _T("ºÅÂëÎļþ"));
_stprintf(pUser->szMobile , _T("%d") , pPLFileData->lMobileCount );
_tcscpy(pUser->szName , pPLFileData->szName);
_stprintf(pUser->szBZ , _T("%d") , pPLFileData->lPLFileID );
pUser ++;
lCount2 ++ ;
}
}
}
this->m_pMainFrame->m_pFuncView->m_DLGSendMms.ShowWindow( SW_SHOWNORMAL );
this->m_pMainFrame->m_pFuncView->m_DLGSendMms.List_AddUser(lCount2 , (Send_User *)pS);
if ( pS )
delete pS;
}
void CFPLFile::On_PLFILE_See()
{
long lItem = GetCurrentSelected();
if ( lItem < 0 )
return ;
CString strRecver = m_wndList.GetItemText(lItem,1);
CString strSubTime = m_wndList.GetItemText(lItem,2);
CString strTimer = m_wndList.GetItemText(lItem,3);
CString strMsg = m_wndList.GetItemText(lItem,4);
/*
DLG_MmsDSSee dlg(this);
dlg.m_strRecver = strRecver;
dlg.m_strSubTime= strSubTime;
dlg.m_strTimer = strTimer;
dlg.m_strMsg = strMsg;
dlg.DoModal();
*/
}
void CFPLFile::On_PLFILE_Del()
{
long lRet = MessageBox( _T("ȷʵҪɾ³ýÑ¡ÖеļǼÂð£¿"),_T("ÌáÎÊ"),MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2);
if ( lRet != IDYES )
return ;
long lCount = m_wndList.GetSelectedCount();
if ( lCount<=0 )
return ;
long lSize = sizeof(REQ_PLFile_Del)+sizeof(ANS_PLFile_DelData)*lCount;
BYTE * pDelSend = new BYTE[lSize];memset(pDelSend,0,lSize);
REQ_PLFile_Del * pDel = (REQ_PLFile_Del *)pDelSend; //Í·
ANS_PLFile_DelData * pDelData = (ANS_PLFile_DelData *)(pDelSend+sizeof(REQ_PLFile_Del));
pDel->lCount = lCount;
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
ANS_PLFile_SeeData * pPLFileData;
POSITION pos2;
while(pos)
{
pDelData->lItem = m_wndList.GetNextSelectedItem(pos);
pos2 = (POSITION)m_wndList.GetItemData(pDelData->lItem);
pPLFileData = m_PLFile.GetNext(pos2); //È¡µÃÁбíÖеÄpos
pDelData->lPLFileID = pPLFileData->lPLFileID;
pDelData ++;
}
m_pMainFrame->SendFrame( SMSFUNC_PLFILE_DEL , pDelSend , lSize );
}
void CFPLFile::On_PLFILE_Refresh()
{
RefreshInfo();
}
void CFPLFile::OnDestroy()
{
Close_Data();
CDialog::OnDestroy();
}
void CFPLFile::Close_Data()
{
//Çå³ý¶ÓÁÐÖеÄÄÚÈÝ
while (!m_PLFile.IsEmpty())
{
ANS_PLFile_SeeData * pData = m_PLFile.GetHead();
m_PLFile.RemoveHead();
delete pData;
}
}
BOOL CFPLFile::FindName(const TCHAR *pName, POSITION exPos)
{
POSITION pos = m_PLFile.GetHeadPosition();
POSITION pos2;
while (pos)
{
pos2 = pos;
ANS_PLFile_SeeData * pData = m_PLFile.GetNext( pos );
if ( pos2 != exPos )
{
if ( !_tcscmp( pData->szName , pName ) )
return true;
}
}
return false;
}
LRESULT CFPLFile::On_List_DropBegin( WPARAM wParam , LPARAM lParam )
{
//¿´ÓÐûÓз¢Ë͹«ÓõØÖ·±¾µÄȨÏÞ
if ( !m_pMainFrame->GetUserPurview( PURVIEW_PL , false ) )
return false;
long lCount = m_wndList.GetSelectedCount();
if ( lCount <= 0 )
return false;
//·ÖÅäÊý¾Ý
long lSize = sizeof(Send_User)*lCount+sizeof(long);
HGLOBAL hData = GlobalAlloc(GHND|GMEM_SHARE, lSize );
BYTE *pS = (BYTE *)GlobalLock( hData );
memset( pS , 0 , lSize );
long * plCount = (long *)pS;
Send_User * pUser = (Send_User * )(pS+sizeof(long));
//*plCount = lCount; //Êý¾Ý×ÜÁ¿
*plCount = 0;
long lCount2=0;
TCHAR szSelect[128]={0};
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
while ( pos )
{
long lItem = m_wndList.GetNextSelectedItem( pos );
POSITION pos2 = (POSITION)m_wndList.GetItemData(lItem);
ANS_PLFile_SeeData * pPLFileData = m_PLFile.GetNext(pos2); //È¡µÃÁбíÖеÄpos
if ( pPLFileData )
{
if ( pPLFileData->lStatus==1 && pPLFileData->lMobileCount > 0 )
{
_tcscpy(pUser->szNickName , _T("ÈÎÎñºÅÂë×é"));
_tcscpy(pUser->szGroup , _T("ºÅÂëÎļþ"));
_stprintf(pUser->szMobile , _T("%d") , pPLFileData->lMobileCount );
_tcscpy(pUser->szName , pPLFileData->szName);
_stprintf(pUser->szBZ , _T("%d") , pPLFileData->lPLFileID );
pUser ++;
lCount2 ++ ;
}
}
}
*plCount = lCount2;
GlobalUnlock( hData );
//ÉèÖÃÊý¾Ý
COleDataSource data ;
UINT iCF = ::RegisterClipboardFormat( _T("CORPSMS_USER") );
data.CacheGlobalData( iCF , hData );
CUserDropTarget::m_shWndTreeCtrl = NULL;
CUserDropTarget::m_lAddressType = -1;
// Begin Drag operation
DROPEFFECT dropeffect = data.DoDragDrop();
GlobalFree( hData );
return true;
}