⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 短信网管的原代码。用于与sp通信
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "PTChannel.h"

#include "MainFrm.h"
#include "TraceDlg.h"
#include "CtkSpyEvent.h"
#include "TServerLink_Entity.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_DESTROY()
	ON_COMMAND(ID_OPERATOR_CLEAR, OnOperatorClear)
	ON_COMMAND(ID_PRINT_TEST, OnPrintTest)
	ON_COMMAND(ID_SEND, OnSend)
	ON_COMMAND(ID_TRACE_ISDN, OnTraceIsdn)
	ON_COMMAND(ID_VIEW_COUNT, OnViewCount)
	ON_UPDATE_COMMAND_UI(ID_PRINT_TEST, OnUpdatePrintTest)
	ON_WM_TIMER()
	ON_COMMAND(ID_PRINT_AllMSG, OnPRINTAllMSG)
	ON_UPDATE_COMMAND_UI(ID_PRINT_AllMSG, OnUpdatePRINTAllMSG)
	ON_COMMAND(ID_TRACE_STOP, OnTraceStop)
	ON_UPDATE_COMMAND_UI(ID_TRACE_STOP, OnUpdateTraceStop)
	ON_UPDATE_COMMAND_UI(ID_TRACE_ISDN, OnUpdateTraceIsdn)
	ON_COMMAND(ID_SERVER_STOP, OnServerStop)
	ON_COMMAND(ID_SERVER_START, OnServerStart)
	ON_COMMAND(ID_MO_ALARM, OnMoAlarm)
	ON_UPDATE_COMMAND_UI(ID_MO_ALARM, OnUpdateMoAlarm)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// 构造函数,初始化成员变量
	m_bDestroy=FALSE;

	m_dwPrintLines=0;//每秒打印次数
	m_dwPrintMsgLen=0;//
	m_pView=NULL;
	memset(m_szPrintBuf,0,256);	

	m_bAlarm = 1;
	m_bPrintTestMsg=1;
	m_bPrintAllMsg =1;
	dwOldPTStatus = 1;
	dwOldRecvStatus = 1;
	dwOldTransStatus = 1;
	
	m_bTrace=false;
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}

	//MO  总数
	m_StaticMOCount.Create("MO消息总数:0 条",SS_SIMPLE|WS_VISIBLE,CRect(10,4,200,20),&m_wndToolBar);
	m_StaticMOCount.SetFontColor(RGB(0,100,0));		

	//MT 总数
	m_StaticMTCount.Create("MT消息总数:0 条",SS_SIMPLE|WS_VISIBLE,CRect(10,22,200,40),&m_wndToolBar);
	m_StaticMTCount.SetFontColor(RGB(0,100,0));		

	//通道连接状态
	m_TextCnConnect.Create("通道连接状态:",SS_SIMPLE|WS_VISIBLE,CRect(350,4,450,20),&m_wndToolBar);
	m_TextCnConnect.SetFontColor(RGB(10,100,200));

	m_StaticCnConnectState.Create("未连接",SS_SIMPLE|WS_VISIBLE,CRect(460,4,550,20),&m_wndToolBar);
	m_StaticCnConnectState.SetFontColor(RGB(200,0,0));

	//应用代理系统的连接状态
	m_TextSysConnect.Create("应用代理连接状态:",SS_SIMPLE|WS_VISIBLE,CRect(350,22,450,40),&m_wndToolBar);
	m_TextSysConnect.SetFontColor(RGB(10,100,200));

	m_StaticSysConnectState.Create("未连接",SS_SIMPLE|WS_VISIBLE,CRect(460,22,550,40),&m_wndToolBar);
	m_StaticSysConnectState.SetFontColor(RGB(200,0,0));
/*
	//  be dockable
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);
*/
	//初始化视图
	if(m_pView==NULL)
	     m_pView=((CRichEditView*)GetActiveView());
	if(m_pView!=NULL)
	{
		theEditCtrl=&m_pView->GetRichEditCtrl();
	}

	ZeroMemory(&m_struct_CF,sizeof(_charformat));
	m_struct_CF.cbSize=sizeof(_charformat);
	m_struct_CF.dwMask=CFM_COLOR|CFM_SIZE;

	//创建消息循环打印线程
	//CreatePrintThread();

	SetTimer(1,1000,NULL);

	//窗口位置:CENTER
	CenterWindow();

	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	//修改窗口显示设置
	cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
		| WS_SYSMENU |WS_MINIMIZEBOX;
	cs.cx=640;
	cs.cy=480;

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers


void CMainFrame::OnDestroy() 
{
	KillTimer(1);

	m_bDestroy=TRUE;
	m_pPrintMsgList.RemoveAll();

	m_dlgSendMsg.DestroyWindow();

	CFrameWnd::OnDestroy();
}

//-------------------------------------
// 函数名称:PrintMsg()
// 
// 创建时间:2001-12-14
// 功能:    将传入的数据加入到打印缓冲区,以备打印到视图区

// 传入参数:char *pszMsg:         传入的数据指针,为需要打印到视图区的数据
//           enum enMsgTYPE emtype:传入的打印模式
// 返回参数:void:空,不返回数据,直接将数据输出
//-------------------------------------
void CMainFrame::PrintMsg(char *pszMsg, enum enMsgTYPE emtype)
{
   //获得当前时间,并加在字串后面
   PrintBufStruct printbuf;
   ZeroMemory(&printbuf,sizeof(printbuf));

   memcpy(printbuf.buf,pszMsg,strlen(pszMsg));
   printbuf.printType=emtype;

   PrintMsgToEditView(printbuf.buf,printbuf.printType);
   //m_pPrintMsgList.AddTail(printbuf);
}

//-------------------------------------
// 函数名称:PrintMsgToEditView()
//
// 创建时间:2001-12-14
// 功能:    将传入的数据输出到视图显示区
// 传入参数:char buf:         传入的数据,为需要打印到视图区的数据
//           enum enMsgTYPE printType:传入的打印模式
// 返回参数:void:空,不返回数据,直接将数据输出
//-------------------------------------
void CMainFrame::PrintMsgToEditView(char buf[],enum enMsgTYPE printType)
{
	if(m_pView==NULL)
	{
	     m_pView=((CRichEditView*)GetActiveView());
		 theEditCtrl=&m_pView->GetRichEditCtrl();
	}

	switch(printType)
	{
		case INFOMSG:
			{
				m_struct_CF.crTextColor=RGB(0,0,0);
			}break;
		case SYSMSG:
			{
				//系统消息主要是系统的连接消息、显示单条消息也用此选项
				m_struct_CF.crTextColor=RGB(0,0,255);
			}break;
		case ERRORMSG:
			{
				//出错信息打印,全部
				m_struct_CF.crTextColor=RGB(200,0,0);
			}break;
	}

   if(m_dwPrintLines>=400)
   {
	   m_dwPrintLines=0;
	   m_dwPrintMsgLen=0;
	   theEditCtrl->SetWindowText(NULL);
   }
   //
   theEditCtrl->SetSel(m_dwPrintMsgLen,m_dwPrintMsgLen);

   //设置格式
   theEditCtrl->SetSelectionCharFormat(m_struct_CF);
   theEditCtrl->ReplaceSel(buf);
   m_dwPrintMsgLen+=strlen(buf);
   m_dwPrintLines++;
}

//消息打印线程,循环打印缓冲区内容
DWORD WINAPI PrintMsgThread(LPVOID lpParam)
{
	CMainFrame* pMainFrame=(CMainFrame*)lpParam;
	while(!pMainFrame->m_bDestroy)
	{
		POSITION pos;
		pos=pMainFrame->m_pPrintMsgList.GetHeadPosition();
		while(pos)
		{
			POSITION printPos=pos;

			PrintBufStruct printbuf;
			printbuf=pMainFrame->m_pPrintMsgList.GetNext(pos);
			//打印
			pMainFrame->PrintMsgToEditView(printbuf.buf,printbuf.printType);
			//打印后删除列表中的buf项
			pMainFrame->m_pPrintMsgList.RemoveAt(printPos);
		}

		//每秒打印100条消息
		Sleep(10);
	}
	return 0;
}

//创建消息打印线程
BOOL CMainFrame::CreatePrintThread()
{
	DWORD dwThreadId=0;
	HANDLE ThreadHandle = CreateThread(NULL, 0, PrintMsgThread,
		                               this, 0, &dwThreadId);
	if(ThreadHandle==NULL)
	{	   
	   return FALSE;
	}		
	return TRUE;
}

void CMainFrame::PrintInput(int color, char *s)
{
	switch(color)
	{
		case 0:
		{
			//黑色
			PrintMsg(s,INFOMSG);
		}break;
		case 1:
		{
			//蓝色
			PrintMsg(s,SYSMSG);
		}break;
		case 2:
		{
			//红色
			PrintMsg(s,ERRORMSG);
		}break;
	}

}

void CMainFrame::OnOperatorClear() 
{
    if(m_pView==NULL)
		m_pView=((CRichEditView*)GetActiveView());
	if(m_pView!=NULL)
	{
		CRichEditCtrl& theEdit = m_pView->GetRichEditCtrl();
	   	m_dwPrintLines=0;
		m_dwPrintMsgLen=0;
		theEdit.SetWindowText("");
	 }
}

void CMainFrame::OnPrintTest() 
{
	if(m_bPrintTestMsg == 0 )
		m_bPrintTestMsg = 1;
	else
		m_bPrintTestMsg = 0;
	Out.PrintTest(m_bPrintTestMsg);	
}

void CMainFrame::OnSend() 
{
	//发送测试短信
	if(m_dlgSendMsg.m_hWnd==0)
		m_dlgSendMsg.Create(IDD_SEND_MESSAGE,this);
	m_dlgSendMsg.ShowWindow(TRUE);
	
}

void CMainFrame::OnTraceIsdn() 
{
	CTraceDlg traceDlg;
	if(traceDlg.DoModal()==IDOK)
	{
		CString DlgIsdn=traceDlg.m_strISDN;

		if(DlgIsdn.IsEmpty())
		{
			Out.TraceNone();
			return;
		}
		char isdn[21];
		strcpy(isdn,DlgIsdn);
		Out.TraceSingle(isdn);

		m_bTrace=true;
	}

}

void CMainFrame::OnViewCount() 
{
	// TODO: Add your command handler code here
	Out.MsgCount();
}

void CMainFrame::OnUpdatePrintTest(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_bPrintTestMsg);	
}

void CMainFrame::OnTimer(UINT nIDEvent) 
{

//发送系统通知消息
	SendSpy();

//连接状态
	int moCount,mtCount;

	Out.GetCount(moCount,mtCount);
	Out.GetStatus(dwPTStatus,dwRecvStatus,dwTransStatus);

	char szbuf[128];
	memset(szbuf,0x00,sizeof(szbuf));

	sprintf(szbuf,"MO消息总数:%d 条",moCount);
	m_StaticMOCount.SetText(szbuf);

	sprintf(szbuf,"MT消息总数:%d 条",mtCount);
	m_StaticMTCount.SetText(szbuf);
	
	COLORREF color;

	memset(szbuf,0x00,sizeof(szbuf));
	if(dwPTStatus==0)
	{
		sprintf(szbuf,"已连接");
		color=RGB(0,0,255);
	}
	else
	{
		sprintf(szbuf,"未连接");
		color=RGB(200,0,0);
	}

	m_StaticSysConnectState.SetText(szbuf);
	m_StaticSysConnectState.SetFontColor(color);

	memset(szbuf,0x00,sizeof(szbuf));
	if((dwRecvStatus==0) && (dwTransStatus==0))
	{
		sprintf(szbuf,"已连接");
		color=RGB(0,0,255);
	}
	else
	{
		if(dwRecvStatus==0)
		{
			sprintf(szbuf,"发送链路未连接");
			color=RGB(200,0,0);
		}
		else if(dwTransStatus==0)
		{
			sprintf(szbuf,"接收链路未连接");
			color=RGB(200,0,0);
		}
		else
		{
			sprintf(szbuf,"未连接");
			color=RGB(200,0,0);
		}
	}
	m_StaticCnConnectState.SetText(szbuf);
	m_StaticCnConnectState.SetFontColor(color);
	if(IsStatusChanged())
	{
		dwOldPTStatus = dwPTStatus;
		dwOldRecvStatus = dwRecvStatus;
		dwOldTransStatus = dwTransStatus;
		RedrawWindow();
	}


	CFrameWnd::OnTimer(nIDEvent);
}


void CMainFrame::OnPRINTAllMSG() 
{
	if(m_bPrintAllMsg == 0 )
		m_bPrintAllMsg = 1;
	else
		m_bPrintAllMsg = 0;
	Out.TraceAll(m_bPrintAllMsg);	
}

void CMainFrame::OnUpdatePRINTAllMSG(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_bPrintAllMsg);		
}

void CMainFrame::OnTraceStop() 
{
	Out.TraceNone();

	m_bTrace=false;
}

void CMainFrame::OnUpdateTraceStop(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_bTrace);

}

void CMainFrame::OnUpdateTraceIsdn(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(!m_bTrace);
}

class  CPTChannelApp;
extern CPTChannelApp theApp;
void CMainFrame::OnServerStop() 
{
	// TODO: Add your command handler code here
	theApp.center->SgipServerEntity->Uninit();
	//delete theApp.center->SgipServerEntity->m_pServerSocket;
	//theApp.center->SgipServerEntity->m_pServerSocket = NULL;
}

void CMainFrame::OnServerStart() 
{
	// TODO: Add your command handler code here
	//theApp.center->SgipServerEntity = new TServerLink_Entity();
	theApp.center->SgipServerEntity->Init(gStructRecvInfo.szIP,gStructRecvInfo.nPort);
}

void CMainFrame::OnMoAlarm() 
{
	// TODO: Add your command handler code here
	if(m_bAlarm == 0 )
	{
		m_bAlarm = 1;
		g_pSgipEntity->dwAlarm = 1;
	}
	else
	{
		m_bAlarm = 0;
		g_pSgipEntity->dwAlarm = 1;
	}
}

void CMainFrame::OnUpdateMoAlarm(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(m_bAlarm);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -