📄 ccsmodaldlg.cpp
字号:
// CCSModalDlg.cpp : implementation file
//
#include "stdafx.h"
#include "CCSModal.h"
#include "CCSModalDlg.h"
#include "afxsock.h"
#include <fstream>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <stdio.h>
#include "winsock.h"
#include "wchar.h"
#include <atlbase.h>
#pragma comment (lib, "wsock32.lib")
DWORD WINAPI makecall(LPVOID mParam);
DWORD WINAPI ccsmain(LPVOID mParam);
bool InitSock();
int agent[30];
int duilie=0;
int tonhua=0;
int shihushu=0;
int succ=0;
int fail=0;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCCSModalDlg dialog
CCCSModalDlg::CCCSModalDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCCSModalDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCCSModalDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CCCSModalDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCCSModalDlg)
DDX_Control(pDX, IDC_STATIC5, m_A5);
DDX_Control(pDX, IDC_STATIC4, m_A4);
DDX_Control(pDX, IDC_STATIC3, m_A3);
DDX_Control(pDX, IDC_STATIC2, m_A2);
DDX_Control(pDX, IDC_STATIC1, m_A1);
DDX_Control(pDX, IDC_LIST1, m_List);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCCSModalDlg, CDialog)
//{{AFX_MSG_MAP(CCCSModalDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCCSModalDlg message handlers
BOOL CCCSModalDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_List.InsertColumn(0,"时间",LVCFMT_LEFT,120,1);
m_List.InsertColumn(1,"号码",LVCFMT_LEFT,80,1);
m_List.InsertColumn(2,"状态",LVCFMT_LEFT,90,1);
m_List.InsertColumn(3,"开始呼叫",LVCFMT_LEFT,130,1);
m_List.InsertColumn(4,"开始通话",LVCFMT_LEFT,130,1);
m_List.InsertColumn(5,"通话结束",LVCFMT_LEFT,130,1);
m_List.InsertColumn(6,"话务员",LVCFMT_LEFT,60,1);
HINSTANCE hInst0 = AfxFindResourceHandle(MAKEINTRESOURCE(IDI_ICON0),RT_GROUP_ICON);
m_hIconA[0] =(HICON)LoadImage(hInst0,MAKEINTRESOURCE(IDI_ICON0),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
HINSTANCE hInst1 = AfxFindResourceHandle(MAKEINTRESOURCE(IDI_ICON1),RT_GROUP_ICON);
m_hIconA[1] =(HICON)LoadImage(hInst1,MAKEINTRESOURCE(IDI_ICON1),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
HINSTANCE hInst2 = AfxFindResourceHandle(MAKEINTRESOURCE(IDI_ICON2),RT_GROUP_ICON);
m_hIconA[2] =(HICON)LoadImage(hInst2,MAKEINTRESOURCE(IDI_ICON2),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
srand(time(NULL));
for(int i=0;i<30;i++)
{
if(rand()%5<4)
agent[i]=1;//rand()%2;
}
// CButton *p_Button = new CButton();
// ASSERT_VALID(p_Button);
// p_Button->Create( m_Caption, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | nStyle, rect, this, nID )
InitSock();
DWORD dwThreadID;
CreateThread(NULL,0,ccsmain,(LPVOID)"87615252",0,&dwThreadID);
return TRUE; // return TRUE unless you set the focus to a control
}
void CCCSModalDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CCCSModalDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
dc.DrawIcon(x, y, m_hIcon);
}
else
{
// CPaintDC dc1(this);
CDC *pDC=GetDC();
DrawIconEx(pDC->m_hDC,560,200,m_hIconA[0],10,10,0,NULL,DI_NORMAL);
DrawIconEx(pDC->m_hDC,560,240,m_hIconA[1],10,10,0,NULL,DI_NORMAL);
DrawIconEx(pDC->m_hDC,560,280,m_hIconA[2],10,10,0,NULL,DI_NORMAL);
pDC->SetBkMode(TRANSPARENT);
CFont fnt;
fnt.CreatePointFont(90,"宋体");
pDC->SelectObject(&fnt);
TextOut(pDC->m_hDC,580,200,"未登录",6);
TextOut(pDC->m_hDC,580,240,"空闲",4);
TextOut(pDC->m_hDC,580,280,"忙",2);
SetCnt();
for(int i=0;i<10;i++)
for(int j=0;j<3;j++)
DrawIconEx(pDC->m_hDC,i*50+30,j*40+200,m_hIconA[agent[j*10+i]],10,10,0,NULL,DI_NORMAL);
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CCCSModalDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
HANDLE m_hEvent;
CCCSModalDlg* pDlg;
CListCtrl* pList;
DWORD WINAPI ccsmain(LPVOID mParam)
{
srand((unsigned)time(NULL));
// ifstream inf;
// CString lpszFn;
// inf.open("号码.txt");
// char szTel[100];
// CString sst;
// inf.getline(szTel,100);
pDlg=(CCCSModalDlg*)::AfxGetApp()->GetMainWnd();
pList=(CListCtrl*)pDlg->GetDlgItem(IDC_LIST1);
m_hEvent = ::CreateEvent(0, FALSE, FALSE, "123");
SetEvent(m_hEvent);
int longoncnt;
srand(time(NULL));
char sztel[20];
while (1)
{
DWORD dwThreadID;
longoncnt=0;
int i;
for(i=0;i<30;i++)
{
if(agent[i]!=0) longoncnt++;
}
if((shihushu<longoncnt*1 && duilie==0) || (shihushu+duilie)<longoncnt*0.9)
{
sprintf(sztel,"8%d%04d",100+rand()%900,rand()%10000);
// CreateThread(NULL,0,makecall,(LPVOID)"87615252",0,&dwThreadID);
CreateThread(NULL,0,makecall,(LPVOID)sztel,0,&dwThreadID);
// Sleep(100);
}
/* for(i=0;i<30;i++)
{
if(agent[i]!=0 && duilie<5)
{
CreateThread(NULL,0,makecall,(LPVOID)"87615252",0,&dwThreadID);
Sleep(100);
CreateThread(NULL,0,makecall,(LPVOID)"87615252",0,&dwThreadID);
Sleep(100);
}
}
*/ if(pList->GetItemCount()>300) pList->DeleteAllItems();
Sleep(100);
}
}
bool InitSock()
{
AfxSocketInit(NULL);
return true;
}
static int curagent=0;
DWORD WINAPI makecall(LPVOID mParam)
{
shihushu++;
CString lpszTmp=COleDateTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S");
WaitForSingleObject(m_hEvent,0);
int NCU=pList->GetItemCount();
int nItem=pList->InsertItem(NCU,lpszTmp.GetBuffer(0));
SetEvent(m_hEvent);
int thisagent;
int nstate;
char *sState[]=
{
"占线",
"不在服务区",
"关机",
"停机",
"空闲",
"空闲",
"空闲",
"空闲",
"空闲",
"空闲",
"正在振铃",
"无人接听",
"正在通话",
"通话结束"
};
char recvbuf[500]={0};
char* szTel=(char*)mParam;
CSocket *psocket;
psocket=new CSocket;
psocket->Create();
if(psocket->Connect("127.0.0.1",8801)==SOCKET_ERROR)
{
fail++;
shihushu--;
goto end;
}
pList->SetItemText(nItem,1,szTel);
psocket->Send(szTel,strlen(szTel),0);
//开始呼叫
PostMessage(pDlg->m_hWnd,WM_PAINT,NULL,NULL);
lpszTmp=COleDateTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S");
pList->SetItemText(nItem,3,lpszTmp.GetBuffer(0));
memset(recvbuf,0,sizeof(recvbuf));
if(psocket->Receive(recvbuf,500,0)==SOCKET_ERROR)
{
sprintf(recvbuf,"%d",CSocket::GetLastError());
pList->SetItemText(nItem,2,recvbuf);
shihushu--;
fail++;
goto end;
}
TRACE("RET:");
TRACE(recvbuf);
nstate=atoi(recvbuf);
pList->SetItemText(nItem,2,sState[nstate]);
if (nstate<4)
{
pList->SetItemText(nItem,2,sState[nstate]);
shihushu--;
fail++;
goto end;
}
//进入通话状态
memset(recvbuf,0,sizeof(recvbuf));
if(psocket->Receive(recvbuf,500,0)==SOCKET_ERROR)
{
pList->SetItemText(nItem,2,"异常退出");
shihushu--;
fail++;
goto end;
}
shihushu--;
duilie++;
succ++;
PostMessage(pDlg->m_hWnd,WM_PAINT,NULL,NULL);
nstate=atoi(recvbuf);
pList->SetItemText(nItem,2,sState[nstate]);
if (nstate==11)
{
duilie--;
goto end;
}
lpszTmp=COleDateTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S");
pList->SetItemText(nItem,4,lpszTmp.GetBuffer(0));
//获取空闲话务员
while (agent[curagent]!=1)
{
curagent++;
if (curagent>=30) curagent=0;
Sleep(10);
}
thisagent=curagent;
agent[thisagent]=2;
duilie--;
tonhua++;
PostMessage(pDlg->m_hWnd,WM_PAINT,NULL,NULL);
char sAgent[20] ;
sprintf(sAgent,"%d",thisagent+1);
pList->SetItemText(nItem,6,sAgent);
memset(recvbuf,0,sizeof(recvbuf));
if(psocket->Receive(recvbuf,500,0)==SOCKET_ERROR)
{
pList->SetItemText(nItem,2,"异常退出");
goto end0;
}
nstate=atoi(recvbuf);
if (nstate!=13)
{
goto end0;
}
pList->SetItemText(nItem,2,sState[nstate]);
lpszTmp=COleDateTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S");
pList->SetItemText(nItem,5,lpszTmp.GetBuffer(0));
psocket->Close();
end0:
agent[thisagent]=1;
tonhua--;
PostMessage(pDlg->m_hWnd,WM_PAINT,NULL,NULL);
end:
delete psocket;
return 0;
}
BOOL CCCSModalDlg::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Add your specialized code here and/or call the base class
// m_hIcon2 = (HICON)::LoadImage(cs.hInstance,MAKEINTRESOURCE(IDI_ICON2),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
// m_hIcon3 = (HICON)::LoadImage(cs.hInstance,MAKEINTRESOURCE(IDI_ICON3),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
return CDialog::PreCreateWindow(cs);
}
int CCCSModalDlg::SetCnt()
{
char lp[200];
sprintf(lp,"试呼数 %d",shihushu);
m_A1.SetWindowText(lp);
sprintf(lp,"等待数 %d",duilie);
m_A2.SetWindowText(lp);
sprintf(lp,"通话数 %d",tonhua);
m_A3.SetWindowText(lp);
sprintf(lp,"成功数 %d",succ);
m_A4.SetWindowText(lp);
sprintf(lp,"失败数 %d",fail);
m_A5.SetWindowText(lp);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -