📄 mainfrm.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 + -