// FQueryFilt.cpp : implementation file // #include "stdafx.h" #include "corpsms.h" #include "FQueryFilt.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CFQueryFilt dialog #include "MainFrm.h" #include "ProcessSocket.h" #include "DLG_QueryFilt_Add.h" #include "DLG_QueryFilt_Inport.h" CFQueryFilt::CFQueryFilt(CWnd* pParent /*=NULL*/) : CDialog(CFQueryFilt::IDD, pParent) { //{{AFX_DATA_INIT(CFQueryFilt) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_bInit = false; m_bRefresh = false; m_bRefresh2= false; m_pInUser = NULL; m_bInUser = false; //不是在插入用户 } void CFQueryFilt::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CFQueryFilt) DDX_Control(pDX, IDC_QUERYFILT_LIST, m_wndList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CFQueryFilt, CDialog) //{{AFX_MSG_MAP(CFQueryFilt) ON_WM_SIZE() ON_NOTIFY(NM_DBLCLK, IDC_QUERYFILT_LIST, OnDblclkQueryfiltList) ON_NOTIFY(LVN_KEYDOWN, IDC_QUERYFILT_LIST, OnKeydownQueryfiltList) ON_NOTIFY(NM_RCLICK, IDC_QUERYFILT_LIST, OnRclickQueryfiltList) ON_WM_DESTROY() //}}AFX_MSG_MAP ON_COMMAND( MENU_QUERYFILT_ADD , On_R_Add ) ON_COMMAND( MENU_QUERYFILT_MODIFY , On_R_Modify ) ON_COMMAND( MENU_QUERYFILT_DELETE , On_R_Delete ) ON_COMMAND( MENU_QUERYFILT_INPORT , On_R_Inport ) ON_COMMAND( MENU_QUERYFILT_REFRESH, On_R_Refresh ) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CFQueryFilt message handlers BOOL CFQueryFilt::OnInitDialog() { CDialog::OnInitDialog(); //取得共用参数 //CMainFrame * pFrame = static_cast ((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_QUERYFILT) ); m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_LOCK) ); m_wndList.SubClassWindow2(); m_wndList.SetHeadings(_T("序号,50; 状态,60; 类型,60; 姓 名,100; 手机号码,120; 备 注,200;")); m_wndList.SetGridLines(true); //m_wndList.SetCheckboxes(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 CFQueryFilt::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); if ( m_bInit ) { m_wndList.MoveWindow( 0 , 0 , cx,cy); } } void CFQueryFilt::OnOK() { //CDialog::OnOK(); } void CFQueryFilt::OnCancel() { //CDialog::OnCancel(); } BOOL CFQueryFilt::ReHide() { ShowWindow( SW_HIDE ); return true; } BOOL CFQueryFilt::ReShow(BOOL bRefresh) { ShowWindow( SW_SHOW ); if ( bRefresh || !m_bRefresh ) { RefreshInfo(); } return true; } BOOL CFQueryFilt::RefreshInfo() { BOOL bQuery = m_pMainFrame->m_Setup.bSDK & SDK_AUTOQUERY ? true:false; if ( bQuery ) { REQ_QueryFilt_See * pSee = new REQ_QueryFilt_See; pSee->lCorpID = m_pMainFrame->m_lCorpID; pSee->lUserID = m_pMainFrame->m_lUserID; m_pMainFrame->SendFrame( SMSFUNC_QUERYFILT_SEE , (BYTE*)pSee , sizeof( REQ_QueryFilt_See ) ); //发送取资料的请求 } return true; } BOOL CFQueryFilt::ProcessSocket(Socket_Head *pHead) { //修改公用地址本 if (pHead->lFuncType == SMSFUNC_QUERYFILT_SEE) { m_bRefresh = true; //已刷新 m_bRefresh2 = true; //正在刷新 ANS_QueryFilt_See * pSee = (ANS_QueryFilt_See *)pHead->pFrame; ANS_QueryFilt_Data * pData = (ANS_QueryFilt_Data *)(pHead->pFrame+sizeof(ANS_QueryFilt_See)); m_wndList.ShowWindow( SW_HIDE ); //加快显示速度 m_wndList.DeleteAllItems(); TCHAR szTemp[32]={0}; for ( int i=0 ; ilCount;i++ ) { //写到列表 //(_T("序号,50; 状态,60; 类型,60; 姓 名,100 手机号码,120; 备 注,200;")); m_wndList.InsertItem( i , _itot(i+1,szTemp,10),0); if ( pData->lStatus == 1 ) m_wndList.SetItemText(i,1,_T(" 启用 ")); else m_wndList.SetItemText(i,1,_T("未启用")); if ( pData->lType == 1 ) m_wndList.SetItemText(i,2,_T(" 允许 ")); else m_wndList.SetItemText(i,2,_T(" 禁止 ")); m_wndList.SetItemText(i,3,pData->szName); m_wndList.SetItemText(i,4,pData->szMobile); m_wndList.SetItemText(i,5,pData->szBZ); m_wndList.SetItemData(i,pData->lQueryFiltID); pData ++; } m_AdoRS.Close(); m_wndList.ShowWindow( SW_SHOW ); //加快显示速度 m_bRefresh2 = false; return true; } //添加QueryFilt if (pHead->lFuncType == SMSFUNC_QUERYFILT_ADD) { ANS_QueryFilt_Add * pAdd = (ANS_QueryFilt_Add *)pHead->pFrame; if ( pAdd->bOK ) //添加成功 { long lCount = m_wndList.GetItemCount(); TCHAR szTemp[32]={0}; //设置新的数据 //写到列表 m_wndList.InsertItem( lCount , _itot(lCount+1,szTemp,10),0); if ( pAdd->lStatus == 1 ) m_wndList.SetItemText(lCount,1,_T(" 启用 ")); else m_wndList.SetItemText(lCount,1,_T("未启用")); if ( pAdd->lType == 1 ) m_wndList.SetItemText(lCount,2,_T(" 允许 ")); else m_wndList.SetItemText(lCount,2,_T(" 禁止 ")); m_wndList.SetItemText(lCount,3,pAdd->szName); m_wndList.SetItemText(lCount,4,pAdd->szMobile); m_wndList.SetItemText(lCount,5,pAdd->szBZ); m_wndList.SetItemData(lCount,pAdd->lQueryFiltID); } if ( m_bInUser ) //是导入用户,需要显示进度条,并导入下一条 { m_lInUserIndex ++; m_DLGGetUser.SetProcess( m_lInUserCount , m_lInUserIndex ); Inport_Next(); } return true; } //修改Email if (pHead->lFuncType == SMSFUNC_QUERYFILT_MODIFY) { ANS_QueryFilt_Modify * pModify = (ANS_QueryFilt_Modify *)pHead->pFrame; if ( pModify->bOK ) //修改成功 { //设置新的数据 //写到列表 if ( !pModify->bOnlyStatus ) //仅修改状态 { if ( pModify->lStatus == 1 ) m_wndList.SetItemText(pModify->lItemID,1,_T(" 启用 ")); else m_wndList.SetItemText(pModify->lItemID,1,_T("未启用")); if ( pModify->lType == 1 ) m_wndList.SetItemText(pModify->lItemID,2,_T(" 允许 ")); else m_wndList.SetItemText(pModify->lItemID,2,_T(" 禁止 ")); m_wndList.SetItemText(pModify->lItemID,3,pModify->szName); m_wndList.SetItemText(pModify->lItemID,4,pModify->szMobile); m_wndList.SetItemText(pModify->lItemID,5,pModify->szBZ); } } return true; } //删除用户 if (pHead->lFuncType == SMSFUNC_QUERYFILT_DEL) { ANS_QueryFilt_Del * pDel = (ANS_QueryFilt_Del *)pHead->pFrame; ANS_QueryFilt_DelData * pDelData = (ANS_QueryFilt_DelData *)(pHead->pFrame+sizeof(ANS_QueryFilt_Del)); m_wndList.ShowWindow( SW_HIDE ); //为了加快显示速度 for ( int i = pDel->lCount-1 ; i>=0 ; i-- ) { long lQueryFiltID = m_wndList.GetItemData(pDelData[i].lItem); if ( pDelData[i].lQueryFiltID && lQueryFiltID == pDelData[i].lQueryFiltID) //删除成功 { m_wndList.DeleteItem(pDelData[i].lItem); //从ListCtrl中删除 } } m_wndList.ShowWindow( SW_SHOW ); //为了加快显示速度 return true; } return false; } void CFQueryFilt::ShowRMenu() { BOOL bQuery = m_pMainFrame->m_Setup.bSDK & SDK_AUTOQUERY ? true:false; if ( !bQuery ) return ; CMenu menu; menu.CreatePopupMenu(); BOOL bLock = false; long lItem = this->GetCurrentSelected(); //添加 menu.AppendMenu(MF_STRING , MENU_QUERYFILT_ADD, _T(" 添加鉴权条件 ") ); menu.AppendMenu(MF_SEPARATOR ); //修改 if ( lItem >=0 && !bLock) { menu.AppendMenu(MF_STRING , MENU_QUERYFILT_MODIFY, _T(" 修 改 ") ); menu.AppendMenu(MF_STRING , MENU_QUERYFILT_DELETE, _T(" 删 除 ") ); } else { menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_QUERYFILT_MODIFY, _T(" 修 改 ") ); menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_QUERYFILT_DELETE, _T(" 删 除 ") ); } menu.AppendMenu(MF_SEPARATOR ); menu.AppendMenu(MF_STRING , MENU_QUERYFILT_INPORT, _T(" 导入... ") ); menu.AppendMenu(MF_SEPARATOR ); menu.AppendMenu(MF_STRING , MENU_QUERYFILT_REFRESH, _T(" 刷 新 ") ); //显示菜单 POINT pt ; ::GetCursorPos( &pt ); //this->ClientToScreen( &pt); menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL); menu.DestroyMenu(); } long CFQueryFilt::GetCurrentSelected() { POSITION pos = m_wndList.GetFirstSelectedItemPosition(); if ( pos ) { return m_wndList.GetNextSelectedItem(pos); } return -1; } void CFQueryFilt::OnDblclkQueryfiltList(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; On_R_Modify(); } void CFQueryFilt::OnKeydownQueryfiltList(NMHDR* pNMHDR, LRESULT* pResult) { LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR; *pResult = 0; if ( pLVKeyDow->wVKey == VK_DELETE ) { On_R_Delete(); } if ( pLVKeyDow->wVKey == VK_INSERT) { On_R_Add(); } if ( pLVKeyDow->wVKey == VK_SPACE) { On_R_Modify(); } if ( pLVKeyDow->wVKey == 'I' || pLVKeyDow->wVKey == 'i') { On_R_Inport(); } if ( pLVKeyDow->wVKey == 'R' || pLVKeyDow->wVKey == 'r') { On_R_Refresh(); } if ( pLVKeyDow->wVKey == 'A' || pLVKeyDow->wVKey == 'a') { m_wndList.SelectAllItems(); } } void CFQueryFilt::OnRclickQueryfiltList(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; ShowRMenu(); } void CFQueryFilt::On_R_Add() { BOOL bQuery = m_pMainFrame->m_Setup.bSDK & SDK_AUTOQUERY ? true:false; if ( !bQuery ) return ; ANS_QueryFilt_Data data={0}; data.lStatus = 1; //默认启动 DLG_QueryFilt_Add dlg(this); dlg.SetParam(data); if ( dlg.DoModal()==IDOK ) { REQ_QueryFilt_Add * pAdd = new REQ_QueryFilt_Add; memset(pAdd,0,sizeof(REQ_QueryFilt_Add)); pAdd->lCorpID = m_pMainFrame->m_lCorpID; pAdd->lUserID = m_pMainFrame->m_lUserID; pAdd->lStatus = dlg.m_Data.lStatus; pAdd->lType = dlg.m_Data.lType; _tcscpy(pAdd->szName , dlg.m_Data.szName ); _tcscpy(pAdd->szMobile , dlg.m_Data.szMobile ); _tcscpy(pAdd->szBZ , dlg.m_Data.szBZ ); m_pMainFrame->SendFrame( SMSFUNC_QUERYFILT_ADD , (BYTE*)pAdd , sizeof( REQ_QueryFilt_Add ) ); //发送取资料的请求 } } void CFQueryFilt::On_R_Modify() { BOOL bQuery = m_pMainFrame->m_Setup.bSDK & SDK_AUTOQUERY ? true:false; if ( !bQuery ) return ; long lItem = this->GetCurrentSelected(); if ( lItem < 0 ) return ; ANS_QueryFilt_Data data=GetQueryFiltData(lItem); DLG_QueryFilt_Add dlg(this); dlg.SetParam(data); if ( dlg.DoModal()==IDOK ) { REQ_QueryFilt_Modify * pModify = new REQ_QueryFilt_Modify; memset(pModify,0,sizeof(REQ_QueryFilt_Modify)); pModify->bOnlyStatus = false; //修改所有项目,不只是状态 pModify->lItemID = lItem; pModify->lQueryFiltID= data.lQueryFiltID; pModify->lCorpID = m_pMainFrame->m_lCorpID; pModify->lUserID = m_pMainFrame->m_lUserID; pModify->lStatus = dlg.m_Data.lStatus; pModify->lType = dlg.m_Data.lType; _tcscpy(pModify->szName , dlg.m_Data.szName ); _tcscpy(pModify->szMobile , dlg.m_Data.szMobile ); _tcscpy(pModify->szBZ , dlg.m_Data.szBZ ); m_pMainFrame->SendFrame( SMSFUNC_QUERYFILT_MODIFY , (BYTE*)pModify , sizeof( REQ_QueryFilt_Modify ) ); //发送取资料的请求 } } void CFQueryFilt::On_R_Delete() { BOOL bQuery = m_pMainFrame->m_Setup.bSDK & SDK_AUTOQUERY ? true:false; if ( !bQuery ) return ; long lCount = m_wndList.GetSelectedCount(); long lSize = sizeof(REQ_QueryFilt_Del)+sizeof(ANS_QueryFilt_DelData)*lCount; BYTE * pDelSend = new BYTE[lSize];memset(pDelSend,0,lSize); REQ_QueryFilt_Del * pDel = (REQ_QueryFilt_Del *)pDelSend; //头 ANS_QueryFilt_DelData * pDelData = (ANS_QueryFilt_DelData *)(pDelSend+sizeof(REQ_QueryFilt_Del)); pDel->lCount = lCount; POSITION pos = m_wndList.GetFirstSelectedItemPosition(); while(pos) { pDelData->lItem = m_wndList.GetNextSelectedItem(pos); pDelData->lQueryFiltID= m_wndList.GetItemData(pDelData->lItem); pDelData ++; } m_pMainFrame->SendFrame( SMSFUNC_QUERYFILT_DEL , pDelSend , lSize ); } void CFQueryFilt::On_R_Inport() { DLG_QueryFilt_Inport dlg(this); //dlg.SetInport(NULL,&m_wndList,true,false); if ( dlg.DoModal() == IDOK ) { if ( m_pInUser ) {delete m_pInUser;m_pInUser=NULL;}; m_lInUserCount = dlg.m_QueryFilt.GetCount(); m_lInUserIndex = 0; if ( m_lInUserCount > 0 ) { //取信息 m_pInUser =new ANS_QueryFilt_Data[m_lInUserCount]; memset(m_pInUser,0,sizeof(ANS_QueryFilt_Data)*m_lInUserCount); POSITION pos = dlg.m_QueryFilt.GetHeadPosition(); long i = 0; while (pos) { m_pInUser[i] = *dlg.m_QueryFilt.GetNext( pos ); i++; } m_bInUser = true; //正在导入地址本 m_DLGGetUser.SetProcessTitle( _T("正在导入鉴权名单,请稍候...") ); //发送添加地址本信息 Inport_Next(); //启动进度条 m_DLGGetUser.DoModal(); delete m_pInUser; m_pInUser = NULL; m_bInUser = false; //不正在导入地址本 } TCHAR Buf[64]={0}; _stprintf( Buf , _T("导入地址本成功,共导入%d个有效用户!") , m_lInUserIndex ); MessageBox( Buf , _T("信息") , MB_ICONASTERISK ); } dlg.Close(); //关闭链表 } void CFQueryFilt::On_R_Refresh() { RefreshInfo(); } ANS_QueryFilt_Data CFQueryFilt::GetQueryFiltData(long lItem) { ANS_QueryFilt_Data data= {0}; long lID = m_wndList.GetItemData(lItem); if ( lID >= 0 ) { //m_wndList.SetHeadings(_T("序号,50; 状态,60; 类型,60; 姓 名,100 手机号码,120; 备 注,200;")); data.lQueryFiltID = lID; CString str; str = m_wndList.GetItemText( lItem , 1 ); if ( str == _T(" 启用 ") ) data.lStatus = 1; else data.lStatus = 0; str = m_wndList.GetItemText( lItem , 2 ); if ( str == _T(" 允许 ") ) data.lType = 1; else data.lType = 0; m_wndList.GetItemText( lItem , 3 , data.szName , sizeof(data.szName)); m_wndList.GetItemText( lItem , 4 , data.szMobile , sizeof(data.szMobile)); m_wndList.GetItemText( lItem , 5 , data.szBZ , sizeof(data.szBZ)); } return data; } BOOL CFQueryFilt::QueryMobile(const TCHAR *pMobile, long lID) { long lCount = m_wndList.GetItemCount(); for ( int i=0 ; i= m_lInUserCount ) //添加已完成 return ; REQ_QueryFilt_Add * pAdd = new REQ_QueryFilt_Add; memset(pAdd,0,sizeof(REQ_QueryFilt_Add)); pAdd->lCorpID = m_pMainFrame->m_lCorpID; pAdd->lUserID = m_pMainFrame->m_lUserID; pAdd->lStatus = m_pInUser[m_lInUserIndex].lStatus; pAdd->lType = m_pInUser[m_lInUserIndex].lType; _tcscpy(pAdd->szName , m_pInUser[m_lInUserIndex].szName ); _tcscpy(pAdd->szMobile , m_pInUser[m_lInUserIndex].szMobile ); _tcscpy(pAdd->szBZ , m_pInUser[m_lInUserIndex].szBZ ); m_pMainFrame->SendFrame( SMSFUNC_QUERYFILT_ADD , (BYTE*)pAdd , sizeof(REQ_QueryFilt_Add) ); }