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

📄 mainfrm.cpp

📁 一个很好的VC++程序
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "SMT5K.h"
#include "MainFrm.h"
#include "SerialPort.h"
#include "SM5000.h"
#include "WriteReg.h"
#include "WriteParam.h"
#include "WriteDrvCmd.h"
#include "WriteIPLCmd.h"
#include "Monitor.h"
#include "ReadReg.h"

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

extern int CurrentAxis;
extern int TimerOn;
extern CSerialPort m_ComPort; 
extern CString m_strRXDataCOM1; //COM1接收数据
extern CString m_strTXDataCOM1; //COM1发送数据
int    g_SampleTime;
int	   gSendCmdTime;

extern int ChipSel ;

/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_CBN_CLOSEUP(IDC_COMBO_SEL_AXIS, OnCloseupComboSelAxis)
	ON_CBN_CLOSEUP(IDC_COMBO_SAMPLE_MODE, OnCloseupComboSampleMode)
	ON_BN_CLICKED(IDC_TIMER_EN, OnTimerEn)
	ON_WM_TIMER()
	ON_EN_KILLFOCUS(IDC_EDIT_TIMER, OnKillfocusEditTimer)
	ON_UPDATE_COMMAND_UI(IDC_TIMER_EN, OnUpdateTimerEn)
	ON_CBN_CLOSEUP(IDC_COMBO_RREG, OnCloseupComboRreg)
	ON_MESSAGE(WM_SM5K_DATA_READ, OnSm5kDataRead)
	ON_CBN_DROPDOWN(IDC_COMBO_SEL_AXIS, OnDropdownComboSelAxis)
	ON_BN_CLICKED(IDC_TIMER_EN2, OnTimerEn2)
	ON_BN_CLICKED(IDC_TIMER_EN3, OnTimerEn3)
	ON_COMMAND(IDC_WriteRegister, OnWriteRegister)
	ON_COMMAND(IDC_WriteParameter, OnWriteParameter)
	ON_COMMAND(IDC_WriteDrvCmd, OnWriteDrvCmd)
	ON_COMMAND(IDC_WriteIPLCmd, OnWriteIPLCmd)
	ON_COMMAND(ID_MONITOR, OnMonitor)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_SM5K_TIMER_ON, OnTimerEn)
END_MESSAGE_MAP()
/*
static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};
*/
static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	IDS_THISTIMER,
	IDS_TIMER,
	ID_INDICATOR_NUM,
	IDS_COMPANYMANE,
};

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

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	m_SampleTime = 200;
	g_SampleTime = m_SampleTime;
	m_CurrentRReg = -1;
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	if (!m_wndToolBar.CreateEx(this) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}
	if (!m_wndDlgBar.Create(this, IDR_MAINFRAME, 
		CBRS_ALIGN_TOP, AFX_IDW_DIALOGBAR))
	{
		TRACE0("Failed to create dialogbar\n");
		return -1;		// fail to create
	}
	else
	{
		((CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO_SEL_AXIS))->SetCurSel(0);
		((CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO_SAMPLE_MODE))->SetCurSel(0);
		((CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO_RREG))->SetCurSel(0);
		m_wndDlgBar.SetDlgItemInt(IDC_EDIT_TIMER,m_SampleTime,0);
	}

	if (!m_wndReBar.Create(this) ||
		!m_wndReBar.AddBar(&m_wndToolBar) ||
		!m_wndReBar.AddBar(&m_wndDlgBar))
	{
		TRACE0("Failed to create rebar\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: Remove this if you don't want tool tips
	m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
		CBRS_TOOLTIPS | CBRS_FLYBY);

	SetTimer(2,1000,NULL);

	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	int xSize = ::GetSystemMetrics(SM_CXSCREEN);
	int ySize = ::GetSystemMetrics(SM_CYSCREEN);
	cs.cx = xSize*5/6;
	cs.cy = ySize*6/7;
	cs.x = (xSize-cs.cx)/2+35;
	cs.y = (ySize-cs.cy)/2;

//	cs.style &= ~WS_MAXIMIZEBOX ;
	cs.style &= ~WS_THICKFRAME ;
	cs.style &= ~FWS_ADDTOTITLE;
    cs.lpszName = "THUYK-1型 嵌入式运动控制器功能演示程序";

	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::OnCloseupComboSelAxis() 
{
	// TODO: Add your control notification handler code here
	CurrentAxis = ((CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO_SEL_AXIS))->GetCurSel();
	Invalidate();
	UpdateWindow();
}

void CMainFrame::OnCloseupComboSampleMode() 
{
	m_SampleMode = ((CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO_SAMPLE_MODE))->GetCurSel();
}

void CMainFrame::OnTimerEn() 
{
	// TODO: Add your control notification handler code here
	TimerOn = ! TimerOn;
	if(TimerOn)
	{
		m_SampleTime = m_wndDlgBar.GetDlgItemInt(IDC_EDIT_TIMER);
		SetTimer(1,m_SampleTime,NULL); 
		m_wndDlgBar.SetDlgItemText(IDC_TIMER_EN,"停止");  
	}
	else
	{
		KillTimer(1); 
		m_wndDlgBar.SetDlgItemText(IDC_TIMER_EN,"启动");
		m_wndDlgBar.CheckDlgButton(IDC_TIMER_EN, BST_UNCHECKED);   
	}

}


void CMainFrame::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	switch(nIDEvent) 
	{
	case 1:
		m_strTXDataCOM1.Empty();

		int RegNo;
		if(m_SampleMode==1)		  // Single Axis
			RegNo = CurrentAxis + 30;
		else if(m_SampleMode==2)  // IPL
			RegNo = 34;
		else				      // All
			RegNo = 35;

		ReadReg (RegNo);
		
		m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);

		gSendCmdTime = GetTickCount();
		break;
	
	case 2:
		CTime CurTime = CTime::GetCurrentTime();
		m_strTimer.Format("%d:%d:%d",CurTime.GetHour(),CurTime.GetMinute(),CurTime.GetSecond());
		m_wndStatusBar.SetPaneText(2, m_strTimer,TRUE);
		break;
	}
	
	CFrameWnd::OnTimer(nIDEvent);
}



void CMainFrame::OnKillfocusEditTimer() 
{
	// TODO: Add your control notification handler code here
	m_SampleTime = m_wndDlgBar.GetDlgItemInt(IDC_EDIT_TIMER);

	if(m_SampleTime<=20)
	{
		m_SampleTime = 20;
		m_wndDlgBar.SetDlgItemInt(IDC_EDIT_TIMER,m_SampleTime,0);
	}

	else if(m_SampleTime>10000)
	{
		m_SampleTime = 10000;
		m_wndDlgBar.SetDlgItemInt(IDC_EDIT_TIMER,m_SampleTime,0);
	}

	g_SampleTime = m_SampleTime;
	
}

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


void CMainFrame::OnCloseupComboRreg() //
{
	m_CurrentRReg = ((CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO_RREG))->GetCurSel();
/**/
	m_strTXDataCOM1.Empty();

	switch(m_CurrentRReg)
	{
	case 0:
			ReadReg (0);
			break;
	case 1:
			ReadReg (1, 1,0,0,0);
			break;
	case 2:
			ReadReg (1, 0,1,0,0);
			break;
	case 3:
			ReadReg (1, 0,0,1,0);
			break;
	case 4:
			ReadReg (1, 0,0,0,1);
			break;
	case 5:
			ReadReg (2, 1,0,0,0);
			break;
	case 6:
			ReadReg (2, 0,1,0,0);
			break;
	case 7:
			ReadReg (2, 0,0,1,0);
			break;
	case 8:
			ReadReg (2, 0,0,0,1);
			break;
	case 9:
			ReadReg (3, 1,0,0,0);
			break;
	case 10:
			ReadReg (3, 0,1,0,0);
			break;
	case 11:
			ReadReg (3, 0,0,1,0);
			break;
	case 12:
			ReadReg (3, 0,0,0,1);
			break;
	case 13:
			ReadReg (4);
			break;
	case 14:
			ReadReg (5);
			break;
	case 15:
			ReadReg (6);
			break;
	case 16:
			ReadReg (7);
			break;
	case 17:
			ReadReg (10);
			break;
	case 18:
			ReadReg (11, 1,0,0,0);
			break;
	case 19:
			ReadReg (11, 0,1,0,0);
			break;
	case 20:
			ReadReg (11, 0,0,1,0);
			break;
	case 21:
			ReadReg (11, 0,0,0,1);
			break;
	case 22:
			ReadReg (12, 1,0,0,0);
			break;
	case 23:
			ReadReg (12, 0,1,0,0);
			break;
	case 24:
			ReadReg (12, 0,0,1,0);
			break;
	case 25:
			ReadReg (12, 0,0,0,1);
			break;
	case 26:
			ReadReg (13, 1,0,0,0);
			break;
	case 27:
			ReadReg (13, 0,1,0,0);
			break;
	case 28:
			ReadReg (13, 0,0,1,0);
			break;
	case 29:
			ReadReg (13, 0,0,0,1);
			break;
	case 30:
			ReadReg (14);
			break;
	case 31:
			ReadReg (15);
			break;
	case 32:
			ReadReg (16);
			break;
	case 33:
			ReadReg (17);
			break;
	case 34:
			ReadParam (0, 1,0,0,0);
			break;
	case 35:
			ReadParam (0, 0,1,0,0);
			break;
	case 36:
			ReadParam (0, 0,0,1,0);
			break;
	case 37:
			ReadParam (0, 0,0,0,1);
			break;
	case 38:
			ReadParam (1, 1,0,0,0);
			break;
	case 39:
			ReadParam (1, 0,1,0,0);
			break;
	case 40:
			ReadParam (1, 0,0,1,0);
			break;
	case 41:
			ReadParam (1, 0,0,0,1);
			break;
	case 42:
			ReadParam (2, 1,0,0,0);
			break;
	case 43:
			ReadParam (2, 0,1,0,0);
			break;
	case 44:
			ReadParam (2, 0,0,1,0);
			break;
	case 45:
			ReadParam (2, 0,0,0,1);
			break;
	case 46:
			ReadParam (3, 1,0,0,0);
			break;
	case 47:
			ReadParam (3, 0,1,0,0);
			break;
	case 48:
			ReadParam (3, 0,0,1,0);
			break;
	case 49:
			ReadParam (3, 0,0,0,1);
			break;
	default:
			break;
	}

	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
	/**/
}

LONG CMainFrame::OnSm5kDataRead(WPARAM wData, LPARAM lData)
{
	CString str;

	if(	(m_CurrentRReg== 0 && wData==  0 ) ||
		(m_CurrentRReg== 1 && wData==  1 ) ||
		(m_CurrentRReg== 2 && wData==101 ) || 
		(m_CurrentRReg== 3 && wData==201 ) ||
		(m_CurrentRReg== 4 && wData==301 ) ||
		(m_CurrentRReg== 5 && wData==  2 ) ||
		(m_CurrentRReg== 6 && wData==102 ) || 
		(m_CurrentRReg== 7 && wData==202 ) ||
		(m_CurrentRReg== 8 && wData==302 ) ||
		(m_CurrentRReg== 9 && wData==  3 ) ||
		(m_CurrentRReg==10 && wData==103 ) || 
		(m_CurrentRReg==11 && wData==203 ) ||
		(m_CurrentRReg==12 && wData==303 ) ||
		(m_CurrentRReg==13 && wData==  4 ) ||
		(m_CurrentRReg==14 && wData==  5 ) ||
		(m_CurrentRReg==15 && wData==  6 ) ||
		(m_CurrentRReg==16 && wData==  7 ) ||
		(m_CurrentRReg==17 && wData== 10 ) ||
		(m_CurrentRReg==18 && wData== 11 ) ||
		(m_CurrentRReg==19 && wData==111 ) ||
		(m_CurrentRReg==20 && wData==211 ) || 
		(m_CurrentRReg==21 && wData==311 ) ||
		(m_CurrentRReg==22 && wData== 12 ) ||
		(m_CurrentRReg==23 && wData==112 ) || 
		(m_CurrentRReg==24 && wData==212 ) ||
		(m_CurrentRReg==25 && wData==312 ) ||
		(m_CurrentRReg==26 && wData== 13 ) ||
		(m_CurrentRReg==27 && wData==113 ) || 
		(m_CurrentRReg==28 && wData==213 ) ||
		(m_CurrentRReg==29 && wData==313 ) ||
		(m_CurrentRReg==30 && wData== 14 ) ||
		(m_CurrentRReg==31 && wData== 15 ) ||
		(m_CurrentRReg==32 && wData== 16 ) ||
		(m_CurrentRReg==33 && wData== 17 ) ||
		(m_CurrentRReg==34 && wData== 20 ) ||
		(m_CurrentRReg==35 && wData==120 ) ||
		(m_CurrentRReg==36 && wData==220 ) ||
		(m_CurrentRReg==37 && wData==320 ) ||
		(m_CurrentRReg==38 && wData== 21 ) ||
		(m_CurrentRReg==39 && wData==121 ) ||
		(m_CurrentRReg==40 && wData==221 ) ||
		(m_CurrentRReg==41 && wData==321 ) ||
		(m_CurrentRReg==42 && wData== 22 ) ||
		(m_CurrentRReg==43 && wData==122 ) ||
		(m_CurrentRReg==44 && wData==222 ) ||
		(m_CurrentRReg==45 && wData==322 ) ||
		(m_CurrentRReg==46 && wData== 23 ) ||
		(m_CurrentRReg==47 && wData==123 ) ||
		(m_CurrentRReg==48 && wData==223 ) ||
		(m_CurrentRReg==49 && wData==323 ) )

	{
		str.Format("%d",lData);
		m_wndDlgBar.SetDlgItemText( IDC_REG_DATA_DISP, str );
	}
	return 0;
}


void CMainFrame::OnDropdownComboSelAxis() 
{
	// TODO: Add your control notification handler code here
	((CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO_SEL_AXIS))->ResetContent();
	((CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO_SEL_AXIS))->AddString(" X 轴");
	((CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO_SEL_AXIS))->AddString(" Y 轴");
	if(ChipSel==4)
	{
		((CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO_SEL_AXIS))->AddString(" Z 轴");
		((CComboBox*)m_wndDlgBar.GetDlgItem(IDC_COMBO_SEL_AXIS))->AddString(" U 轴");
	}
}

void CMainFrame::OnTimerEn2() 
{
	// TODO: Add your control notification handler code here
	m_strTXDataCOM1.Empty();
	m_strTXDataCOM1 = "@@@@@";
	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
	
}

void CMainFrame::OnTimerEn3() 
{
	CString m_str_quit = "q";
	m_ComPort.WriteToPort(LPCTSTR(m_str_quit));
}


void CMainFrame::OnWriteRegister()
{
	CWriteReg WriteRegisterDlg;
	WriteRegisterDlg.DoModal();
}

void CMainFrame::OnWriteParameter() 
{
	CWriteParam WriteParameterDlg;
	WriteParameterDlg.DoModal();
}

void CMainFrame::OnWriteDrvCmd() 
{
	CWriteDrvCmd WriteDrvCommandDlg;
	WriteDrvCommandDlg.DoModal();
}

void CMainFrame::OnWriteIPLCmd() 
{
	CWriteIPLCmd WriteIPLCommandDlg;
	WriteIPLCommandDlg.DoModal();
}

void CMainFrame::OnMonitor() 
{
	CMonitor	 MonitorSheet("查看运行状态");

	CMonitorIPL  PageIPL;
	MonitorSheet.AddPage(&PageIPL);

	MonitorSheet.SetActivePage(&PageIPL);

	MonitorSheet.DoModal();
}

⌨️ 快捷键说明

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