📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "3104C.h"
#include <sys/stat.h>
#include <io.h>
#include "MainFrm.h"
#include "netrtu.h"
#define _MAIN_FERT_
#include "mydata.h"
#include "3104cview.h"
#include "3104cDoc.h"
#include <windows.h>
#include "Shlwapi.h"
#include "syspara.h"
#include "ViewPara.h"
#include "dialproc.h"
//#include "global.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int m_ChanNo [MAXVIEWNUM];
int ShowFlag [MAXVIEWNUM];
int saveFlag [MAXVIEWNUM];
int flag=0;
extern CMy3104CApp theApp;
extern int afert_init();
extern void Exit_Clear();
extern int live_flag;
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_TIMER()
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_SHOW_SYSPARA, OnShowSyspara)
ON_WM_COPYDATA()
ON_WM_CLOSE()
ON_COMMAND(ID_SHOWDATA_ALL, OnShowdataAll)
ON_COMMAND(ID_SHOW_STOP, OnShowStop)
ON_COMMAND(ID_SHOWDATA_START, OnShowdataStart)
ON_COMMAND(ID_SHOW_CLEAR,OnShowClear)
ON_UPDATE_COMMAND_UI(ID_SHOWDATA_START, OnUpdateShowdataStart)
ON_UPDATE_COMMAND_UI(ID_SHOW_STOP, OnUpdateShowStop)
ON_UPDATE_COMMAND_UI(ID_SAVE_DATA, OnUpdateSaveData)
//***************************************************
ON_UPDATE_COMMAND_UI(ID_SHOW_CLEAR, OnUpdateClear)
//**************************************************
ON_COMMAND(ID_SAVE_DATA, OnSaveData)
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
ON_COMMAND_RANGE(STARMENUID,STARMENUID+MAXCHANNUM,OnShowdata)
END_MESSAGE_MAP()
static UINT indicators[] = //状态栏指示器
{
ID_SEPARATOR, // 指示器状态行status line indicator
ID_SEPARATOR,
ID_SEPARATOR,
ID_SEPARATOR,
ID_SEPARATOR,
ID_SEPARATOR
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
for (int i = 0; i < MAXVIEWNUM ; i++)
{
ChildFrameList[i]=0;
m_ChanNo[i]=-1;
ShowFlag[i] =0;
saveFlag[i] =0;
ChildFrameNum =0;
}
m_no =-1;
// ON_COMMAND_RANGE(STARMENUID,STARMENUID+MAXCHANNUM,OnShowdata)
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)//创建窗口
{
if (CMDIFrameWnd::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
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
//设置工具栏停靠状态
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
UINT nID, nStyle; int cxWidth;
m_wndStatusBar.GetPaneInfo( 0, nID, nStyle, cxWidth);
m_wndStatusBar.SetPaneInfo( 0, nID, SBPS_STRETCH, 160);
m_wndStatusBar.GetPaneInfo( 1, nID, nStyle, cxWidth);
m_wndStatusBar.SetPaneInfo( 1, nID, SBPS_NORMAL, 140);
m_wndStatusBar.GetPaneInfo( 2, nID, nStyle, cxWidth);
m_wndStatusBar.SetPaneInfo( 2, nID, SBPS_NORMAL, 120);
m_wndStatusBar.GetPaneInfo( 3, nID, nStyle, cxWidth);
m_wndStatusBar.SetPaneInfo( 3, nID, SBPS_NORMAL, 120);
m_wndStatusBar.GetPaneInfo( 4, nID, nStyle, cxWidth);
m_wndStatusBar.SetPaneInfo( 4, nID, SBPS_NORMAL, 250);
m_wndStatusBar.GetPaneInfo( 5, nID, nStyle, cxWidth);
m_wndStatusBar.SetPaneInfo( 5, nID, SBPS_NORMAL, 180);
DWORD dwExStyle = TBSTYLE_EX_DRAWDDARROWS;
m_wndToolBar.GetToolBarCtrl().SendMessage(TB_SETEXTENDEDSTYLE, 0, (LPARAM)dwExStyle);
DWORD dwStyle = m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_SAVE_DATA));
dwStyle |= TBSTYLE_CHECK;
m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_SAVE_DATA), dwStyle);
//m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_SHOW_CLEAR), dwStyle);
//m_wndToolBar.GetToolBarCtrl.EnableButton(ID_SHOW_CLEAR,FALSE);
//m_wndToolBar.GetDlgItem(ID_SHOW_CLEAR).EnableWindow(FALSE);
//////////////////////
//***************************************************************************************
CString strpa;
char strpath[50];
GetCurrentDirectory(MAX_PATH,strpath);
strpa.Format("%s\\data",strpath);
//if(!PathIsDirectory(strpa))
CreateDirectory(strpa,NULL);
afert_init();
/////////////////////
//***************************************************************************************
CMenu *menu = (CMenu *)this->GetMenu()->GetSubMenu(1)->GetSubMenu(1) ;
CString str;
for(int i =0;i<G_Channel.chan_num;i++)
{
if(strcmp(G_Channel.chan_data [i].chanName,"")==0)
str.Format("第%02d号通道",i);
else
str.Format("%s (通道%d)",G_Channel.chan_data[i].chanName,i);
menu->AppendMenu(MF_STRING,STARMENUID+i,str);
}
SetTimer(1,1000,NULL);
//通道个数1
str.Format("通道个数=%d", G_Channel.chan_num);
m_wndStatusBar.SetPaneText(1, str,TRUE);
//动态IP2
if(G_Channel.DynamicIpFlag)
str="终端动态IP";
else str = "终端静态IP";
m_wndStatusBar.SetPaneText(2, str,TRUE);
//自动拨号3
if(G_Channel.autoDial)
str = "系统自动拨号";
else
str = "系统未自动拨号";
m_wndStatusBar.SetPaneText(3, str,TRUE);
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)//定义窗口样式
{
if( !CMDIFrameWnd::PreCreateWindow(cs) )
return FALSE;
//通过修改CS变量修改窗口类或样式
//定义窗口代码
//cs.cx=450;//新窗口宽度
//cs.cy=300;//新窗口高度
//cs.style=WS_POPUPWINDOW|WS_CAPTION;//新窗口去掉子窗口名、最大化和最小化按钮
//
//打开视图类VIEW并定位PreCreateWindow函数,在其中添加
char ParaFile[MAX_PATH],g_ParaFilePath[MAX_PATH];
if(!GetCurrentDirectory(MAX_PATH,g_ParaFilePath))
strcpy(g_ParaFilePath,PATH);
sprintf(ParaFile,"%s\\Para.ini",g_ParaFilePath);
G_Channel.systype=GetPrivateProfileInt("系统参数", "系统类型", 0,ParaFile);
if(G_Channel.systype==0)
{
m_strTitle = "3104C数据转发(接收端)--石家庄科林自动化有限公司";
cs.style &= ~FWS_ADDTOTITLE;
}
else if(G_Channel.systype==1)
{
m_strTitle = "3104C数据转发(发送端)--石家庄科林自动化有限公司";
cs.style &= ~FWS_ADDTOTITLE;
}
else
m_strTitle = "3104C数据转发--石家庄科林自动化有限公司";
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CMDIFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CMDIFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnTimer(UINT nIDEvent)
{
char TempBuf[40];
SYSTEMTIME SystemTime;
GetLocalTime(&SystemTime);
wsprintf(TempBuf," %04d年%02d月%02d日 %02d:%02d:%02d ",SystemTime.wYear,SystemTime.wMonth,SystemTime.wDay,
SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond);
switch (SystemTime.wDayOfWeek)
{
case 0:
lstrcat(TempBuf,"星期日"); break;
case 1:
lstrcat(TempBuf,"星期一"); break;
case 2:
lstrcat(TempBuf,"星期二"); break;
case 3:
lstrcat(TempBuf,"星期三"); break;
case 4:
lstrcat(TempBuf,"星期四"); break;
case 5:
lstrcat(TempBuf,"星期五"); break;
case 6:
lstrcat(TempBuf,"星期六"); break;
}
m_wndStatusBar.SetPaneText(5, TempBuf,TRUE);
if(flag >=1)
{
flag --;
OnCommand(ID_WINDOW_TILE_VERT, 0);
}
CMDIFrameWnd::OnTimer(nIDEvent);
}
void CMainFrame::OnFileOpen()
{
}
void CMainFrame::OnShowSyspara()
{
// CSysPara dlg;
CViewPara dlg;
dlg.DoModal();
}
BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
char RData[512];
memset(RData, 0, 512);
memcpy(RData, pCopyDataStruct->lpData, pCopyDataStruct->dwData);
G_ChangeFlag = TRUE;
char Status[512];
memset(Status, 0, 512);
for(int i=0; i<(int)pCopyDataStruct->dwData; i++)
{
Status[i] = RData[i];
}
struct tm *osTime;
CTime t = CTime::GetCurrentTime();
osTime = t.GetLocalTm(NULL);
m_wndStatusBar.SetPaneText(4, Status,TRUE);
return CMDIFrameWnd::OnCopyData(pWnd, pCopyDataStruct);
}
void CMainFrame::OnClose()
{
live_flag=FALSE;
for (int i = 0; i < MAXVIEWNUM; i++)
{
if(m_ChanNo[i] != -1)
{
CMy3104CView *pView = (CMy3104CView *)ChildFrameList[i]->GetActiveView();
if(pView == NULL) continue ;
CRichEditCtrl &p = (CRichEditCtrl &)pView->GetRichEditCtrl();
p.SetModify(FALSE);
}
}
if(G_Channel.dialData.bDialNow)
HangUp();
Exit_Clear();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -