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

📄 beihangdlg.cpp

📁 基于固高运动控制卡的二轴步进电机控制软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// beihangDlg.cpp : implementation file
//

#include "stdafx.h"
#include "test.h"
#include "beihangDlg.h"
#include "mainfrm.h"
#include "testview.h"
#include <afxtempl.h>
#include <ctype.h>
#include <afxcoll.h>
#include "GT400.h"
#include <math.h> 
#pragma once
extern CString info;
extern CTestApp theApp;
extern SYSTEMTIME t1,t2;
int* pcuraxis;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern int times;
extern int  brun;
#ifndef dllfundef
#define dllfundef extern "C" __declspec(dllimport)
#endif

dllfundef bool DLL_Full_Initial(int Googol_Period, int ISR_Status,unsigned short LmtVolt
								,unsigned int EncSense, int Total_Axes, int Pulse_Mode);
dllfundef DLL_Axis_OnOff(int Current_Axis, bool Axis_Status);
dllfundef bool DLL_Z_Run(double Z_Speed, double Z_Accel, double Z_ObjectPos, 
						 double Z_Distance, double Z_Pulse, double Z_Period );
dllfundef bool DLL_SngAxis_Stop(unsigned short Curren_Axis);
dllfundef bool DLL_SngAxis_eStop(unsigned short Curren_Axis);
dllfundef bool DLL_R_Run(double R_Speed, double R_Accel, double R_ObjectPos, 
					 double R_N, double R_Pulse, double R_Period );
dllfundef bool DLL_SelAxis(unsigned short Current_Axis);
dllfundef bool DLL_SetZero(unsigned short Current_Axis);
dllfundef bool DLL_Motion_Finish(unsigned short Current_Axis);
dllfundef bool DLL_GetSngPos(unsigned short Current_Axis,long * lpCurPos);
dllfundef bool DLL_SetMotionMode(int m_nMotionSerial, unsigned short Master_Axis, 
								 unsigned short Slave_Axis, double Ratio_Axis);
dllfundef bool DLL_SngVelRun(unsigned short Current_Axis,double dblMaxVel, double MaxAcc);

#pragma comment(lib,"debug/Googol.lib")
CArray< int ,  int>arrButton;
int flag=0;
double arrSpeed[8];
char* runinfo[500];
char runinfolth[500];
int runinfocnt=2;
int m_nTwoConTimes=0;
int m_nZConTimes=0;
int m_nTwoNo=0;
extern int sign;
extern int line;
static double m_dblZEndCon;
time_t ltime;
CArray<double,double>nArrAxisR;
CArray<double,double>nArrAxisZ;
int RFinFlag=0;
int RRunFlag=0;
int ZFinFlag=0;
int ZRunFlag=0;

int fgfhf;
BGCOMMANDSET BgCmdSet;
const double maxerror=0.1;//mm
/////////////////////////////////////////////////////////////////////////////
// CBeihangDlg dialog
mechineparams* pparams;
CBeihangDlg::CBeihangDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CBeihangDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CBeihangDlg)
	
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	curspeed=0;
	m_dblRObjPos = 0.0;
	m_dblRCurPos = 0.0;
	m_nScanNumber = 1;
	curaxis=1;
	m_dblConRDistance = 360;
	m_dblConRSpeed = 60;
	m_dblConRStart = 0;
	m_dblConZDis = 10;
	m_dblConZSpeed = 2;
	m_dblConZStart = 0;
	m_dblConZStep = 2;
	m_dblZCurPos = 0.0;
	m_dblZEnd = 4;
	m_ZObjPos = 0.0;
	m_dblZSpeedCon = 2;
	m_dblStart = 1;
	pcuraxis=&curaxis;
	pparams=&params;
	m_ctlBtnRBack.index=1;
	m_ctlBTNRFor.index=2;
	m_ctlBTNZBack.index=3;
	m_ctlBTNZFor.index=4;
	tasknum=0;
	bBreak=0;
	m_dblRCurPos=0;
	CMainFrame* p=(CMainFrame*)theApp.GetMainWnd();
	pv=(CTestView*)p->GetActiveView();
	bstop=1;
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CBeihangDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CBeihangDlg)
//	DDX_Control(pDX, IDOK, m_IDOK);
//	DDX_Control(pDX, IDCANCEL, m_IDCANCEL);
/*	DDX_Control(pDX, IDC_STATIC1_Z_STEP_UNIT, m_ctlSA1_Z_STEP_UNIT);
	DDX_Control(pDX, IDC_STATIC1_Z_STEP, m_ctlSA1_Z_STEP);
	DDX_Control(pDX, IDC_STATIC1_Z_START_UNIT, m_ctlSA1_Z_START_UNIT);
	DDX_Control(pDX, IDC_STATIC1_Z_SPEED_UNIT, m_ctlSA1_Z_SPEED_UNIT);
	DDX_Control(pDX, IDC_STATIC1_Z_NUMBER_UNIT, m_ctlSA1_Z_NUMBER_UNIT);
	DDX_Control(pDX, IDC_STATIC1_Z_NUMBER, m_ctlSA1_Z_NUMBER);
	DDX_Control(pDX, IDC_STATIC1_Z_DISTANCE_UNIT, m_ctlSA1_Z_DISTANCE_UNIT);
	DDX_Control(pDX, IDC_STATIC1_Z_AXIS, m_ctlSA1_Z_AXIS);
	DDX_Control(pDX, IDC_STATIC1_START, m_ctlSA1_START);
	DDX_Control(pDX, IDC_STATIC1_SPEED, m_ctlSA1_SPEED);
	DDX_Control(pDX, IDC_STATIC1_R_START_UNIT, m_ctlSA1_R_START_UNIT);
	DDX_Control(pDX, IDC_STATIC1_R_SPEED_UNIT, m_ctlSA1_R_SPEED_UNIT);
	DDX_Control(pDX, IDC_STATIC1_R_DISTANCE_UNIT, m_ctlSA1_R_DISTANCE_UNIT);
	DDX_Control(pDX, IDC_STATIC1_R_AXIS, m_ctlSA1_R_AXIS);
//	DDX_Control(pDX, IDC_STATIC1_PARAMETER, m_ctlSA1_PARAMETER);
//	DDX_Control(pDX, IDC_STATIC1_MOTION_PARA, m_ctlSA1_MOTION_PARA);
	DDX_Control(pDX, IDC_STATIC1_DISTANCE, m_ctlSA1_DISTANCE);
//	DDX_Control(pDX, IDC_STATIC1_CONSOLE, m_ctlSA1_CONSOLE);
	DDX_Control(pDX, IDC_STATIC0_Z_UNIT, m_ctlSA0_Z_UNIT);
	DDX_Control(pDX, IDC_STATIC0_Z_START_UNIT, m_ctlSA0_START_UNIT);
	DDX_Control(pDX, IDC_STATIC0_Z_START, m_ctlSA0_Z_START);
	DDX_Control(pDX, IDC_STATIC0_Z_SPEED, m_ctlSA0_Z_SPEED);
//	DDX_Control(pDX, IDC_STATIC0_Z_SINGLE, m_ctlSA0_Z_SINGLE);
	DDX_Control(pDX, IDC_STATIC0_Z_END, m_ctlSA0_Z_END);
//	DDX_Control(pDX, IDC_STATIC0_Z_CONTINUOUS, m_ctlSA0_Z_CONTINUOUS);
	DDX_Control(pDX, IDC_STATIC0_SPEED_UNIT, m_ctlSA0_SPEED_UNIT);
	DDX_Control(pDX, IDC_STATIC0_R_UNIT, m_ctlSA0_R_UNIT);
//	DDX_Control(pDX, IDC_STATIC0_R_SINGLE, m_ctlSA0_R_SINGLE);
	DDX_Control(pDX, IDC_STATIC0_END_UNIT, m_ctlSA0_END_UNIT);*/
	DDX_Control(pDX, IDC_EDIT_Z_STARTPOINT, m_ctlED_Z_STARTPOINT);
	DDX_Control(pDX, IDC_EDIT_Z_SPEED_CON, m_ctlED_Z_SPEED_CON);
	DDX_Control(pDX, IDC_EDIT_Z_OBJPOS, m_ctlED_Z_OBJPOS);
	DDX_Control(pDX, IDC_EDIT_Z_ENDPOINT, m_ctlED_Z_ENDPOINT);
	DDX_Control(pDX, IDC_EDIT_Z_CURPOS, m_ctlED_Z_CURPOS);
	DDX_Control(pDX, IDC_EDIT_SCAN_Z_STEP, m_ctlED_SCAN_Z_STEP);
	DDX_Control(pDX, IDC_EDIT_SCAN_Z_STARTPOINT, m_ctlED_SCAN_Z_STARTPOINT);
	DDX_Control(pDX, IDC_EDIT_SCAN_Z_SPEED, m_ctlED_SCAN_Z_SPEED);
	DDX_Control(pDX, IDC_EDIT_SCAN_Z_DISTANCE, m_ctlED_SCAN_Z_DISTANCE);
	DDX_Control(pDX, IDC_EDIT_SCAN_R_STARTPOINT, m_ctlSCAN_R_STARTPOINT);
	DDX_Control(pDX, IDC_EDIT_SCAN_R_SPEED, m_ctlED_SCAN_R_SPEED);
	DDX_Control(pDX, IDC_EDIT_SCAN_R_DISTANCE, m_ctlED_SCAN_R_DISTANCE);
	DDX_Control(pDX, IDC_EDIT_SCAN_NUMBER, m_ctlED_SCAN_NUMBER);
	DDX_Control(pDX, IDC_EDIT_R_OBJPOS, m_ctlED_R_OBJPOS);
	DDX_Control(pDX, IDC_EDIT_R_CURPOS, m_ctlED_R_CURPOS);
	DDX_Control(pDX, IDC_COMBO_Z_SPEED, m_ctlCM_Z_SPEED);
	DDX_Control(pDX, IDC_COMBO_R_SPEED, m_ctlCM_R_SPEED);
	DDX_Text(pDX, IDC_EDIT_R_OBJPOS, m_dblRObjPos);
	DDV_MinMaxInt(pDX, m_dblRObjPos, -360-m_dblRCurPos, 360-m_dblRCurPos);
	DDX_Text(pDX, IDC_EDIT_R_CURPOS, m_dblRCurPos);
	DDX_Text(pDX, IDC_EDIT_SCAN_NUMBER, m_nScanNumber);
	DDV_MinMaxInt(pDX, m_nScanNumber, 0, 10000);
	DDX_Text(pDX, IDC_EDIT_SCAN_R_DISTANCE, m_dblConRDistance);
	DDX_Text(pDX, IDC_EDIT_SCAN_R_SPEED, m_dblConRSpeed);
	DDV_MinMaxDouble(pDX, m_dblConRSpeed, 0., 60.);
	DDX_Text(pDX, IDC_EDIT_SCAN_R_STARTPOINT, m_dblConRStart);
	DDX_Text(pDX, IDC_EDIT_SCAN_Z_DISTANCE, m_dblConZDis);
	DDX_Text(pDX, IDC_EDIT_SCAN_Z_SPEED, m_dblConZSpeed);
	DDV_MinMaxDouble(pDX, m_dblConZSpeed, 0., 16.);
	DDX_Text(pDX, IDC_EDIT_SCAN_Z_STARTPOINT, m_dblConZStart);
	DDX_Text(pDX, IDC_EDIT_SCAN_Z_STEP, m_dblConZStep);
	DDX_Text(pDX, IDC_EDIT_Z_CURPOS, m_dblZCurPos);
	DDX_Text(pDX, IDC_EDIT_Z_ENDPOINT, m_dblZEnd);
	DDX_Text(pDX, IDC_EDIT_Z_OBJPOS, m_ZObjPos);
	DDV_MinMaxInt(pDX, m_ZObjPos, -360-m_dblZCurPos, 360-m_dblZCurPos);
	DDX_Text(pDX, IDC_EDIT_Z_SPEED_CON, m_dblZSpeedCon);
	if(m_dblZSpeedCon>16)
		m_dblZSpeedCon=16;
//	DDV_MinMaxInt(pDX, m_dblZSpeedCon,.1,16);
	DDX_Text(pDX, IDC_EDIT_Z_STARTPOINT, m_dblStart);
	DDX_Control(pDX, IDC_BTN_R_BACK, m_ctlBtnRBack);
	DDX_Control(pDX, IDC_BTN_R_FOR, m_ctlBTNRFor);
	DDX_Control(pDX, IDC_BTN_Z_BACK, m_ctlBTNZBack);
	DDX_Control(pDX, IDC_BTN_Z_FOR, m_ctlBTNZFor);
	DDX_Control(pDX, IDC_BUTTON2, btn);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CBeihangDlg, CDialog)
	//{{AFX_MSG_MAP(CBeihangDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON_R_GOTO, OnButtonRGoto)
	//ON_BN_CLICKED(IDC_BUTTON_Z_FORWARD, OnButtonZForward)
	ON_BN_CLICKED(IDC_BUTTON_R_PAUSE, OnButtonRPause)
	ON_BN_CLICKED(IDC_BUTTON_Z_GOTO, OnBtnZGoto)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_BUTTON_Z_PAUSE, OnButtonZPause)
	ON_BN_CLICKED(IDC_BUTTON_Z_ZERO, OnButtonZZero)
	ON_BN_CLICKED(IDC_BUTTON_R_ZERO, OnButtonRZero)
	ON_BN_CLICKED(IDC_BUTTON_SCAN_START, OnButtonScanStart)
	ON_BN_CLICKED(IDC_BUTTON_SCAN_END, OnButtonScanEnd)
	ON_BN_CLICKED(IDC_BUTTON_SCANCON_END, OnButtonScanConEnd)
	ON_BN_CLICKED(IDC_BUTTON_SCANCON_START, OnBtnScanconStart)
	ON_BN_CLICKED(IDC_BUTTON_ZERO, OnButtonZero)
	ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnButtonClear)
	ON_BN_CLICKED(IDC_BUTTON3, OnFailureStop)
	ON_BN_CLICKED(IDOK, OnOK)
	ON_BN_CLICKED(IDCANCEL, OnCANCEL)
	ON_WM_CHAR()
	ON_WM_KEYDOWN()
	//ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBeihangDlg message handlers
CTestView* pgv;
CBeihangDlg* pd;
BOOL CBeihangDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	pd=this;
	// 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

/***************************************************************************/
/*代码功能:取界面高度为设计高度53%   日期:2006-01-20                     */
/*开发公司:欧宁航宇                  作者:陈利民                         */
/***************************************************************************/
	//m_ctlTAB_SCAN.SetTab(0);
	CRect reWindow;
	GetWindowRect (reWindow );
	SetWindowPos (NULL,100,100,reWindow.Width(),
	(int)(reWindow.Height()*.555), SWP_NOMOVE | SWP_NOZORDER );
/***************************************************************************/


/***************************************************************************/
/*函数功能:完成界面的初始化          日期:2006-01-20                     */
/*开发公司:欧宁航宇                  作者:陈利民                         */
/***************************************************************************/
	InitCtlArray();//给控件对象数组赋值
	VisSwitch(0,true);//使“2轴扫查序列”界面的控件不可见
	MoveTwoScan();//移动“2轴扫查序列”界面的控件到主界面位置
/***************************************************************************/
m_ctlCM_Z_SPEED.AddString("1—极低速—-1%-—");
m_ctlCM_Z_SPEED.AddString("2—超低速—-2%-—");
m_ctlCM_Z_SPEED.AddString("3—超低速—-5%-—");
m_ctlCM_Z_SPEED.AddString("4—低  速—10%-—");
m_ctlCM_Z_SPEED.AddString("5—慢  速—20%-—");
m_ctlCM_Z_SPEED.AddString("6—中  速—50%-—");
m_ctlCM_Z_SPEED.AddString("7—高  速—70%-—");
m_ctlCM_Z_SPEED.AddString("8—全  速—100%—");

m_ctlCM_Z_SPEED.SetCurSel(1);
m_ctlCM_R_SPEED.AddString("1—极低速—-1%-—");
m_ctlCM_R_SPEED.AddString("2—超低速—-2%-—");
m_ctlCM_R_SPEED.AddString("3—超低速—-5%-—");
m_ctlCM_R_SPEED.AddString("4—低  速—10%-—");
m_ctlCM_R_SPEED.AddString("5—慢  速—20%-—");
m_ctlCM_R_SPEED.AddString("6—中  速—50%-—");
m_ctlCM_R_SPEED.AddString("7—高  速—70%-—");
m_ctlCM_R_SPEED.AddString("8—全  速—100%—");
m_ctlCM_R_SPEED.SetCurSel(5);

	arrSpeed[0]=0.01;
	arrSpeed[1]=0.02;
	arrSpeed[2]=0.05;
	arrSpeed[3]=0.1;
	arrSpeed[4]=0.2;
	arrSpeed[5]=0.5;
	arrSpeed[6]=0.7;
	arrSpeed[7]=1;
//	OnAxisMotion();//重定义中断
	//OnInterTimer();//启动监测线程
	SetGTTimer();
	CMainFrame* pm=(CMainFrame*)theApp.GetMainWnd();
	pv=(CTestView*)pm->GetActiveView();
	pgv=pv;
	return TRUE;  // return TRUE  unless you set the focus to a control
}


void CBeihangDlg::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 CBeihangDlg::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;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);

	}
	else
	{
		CDialog::OnPaint();
	}

}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CBeihangDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

/***************************************************************************/
/*函数名称:MoveTwoScan                                                    */
/*函数功能:移动“2轴扫查序列”界面的控件到主界面位置                      */
/*开发人员:陈利民                                                         */ 
/*开发日期:2006-01-20                                                     */ 
/*调试日期:2006-01-20(1)                                                */ 
/***************************************************************************/
bool CBeihangDlg::MoveTwoScan()
{
	int nIndex,nCtls;
	CWnd * pWnd;
	CRect retControl;
	static CRect rectdlg;
	GetWindowRect(&rectdlg);
	for(nIndex=33;nIndex<62;nIndex++)
	{
		nCtls=arrButton[nIndex]; //把控件ID赋给nCtls
		pWnd=GetDlgItem(nCtls);  //取得控件句柄
		pWnd->GetWindowRect(retControl);
		if(nIndex==33)
		int c=0;
		pWnd->MoveWindow(retControl.left-rectdlg.left,retControl.top-178-rectdlg.top, //移动控件
			retControl.Width(), retControl.Height(),true);
		
	}
	return true;
}

/***************************************************************************/
/*函数名称:InitCtlArray                                                   */
/*函数功能:把所有控件添加到控件数组,便于操作                             */
/*开发人员:陈利民                                                         */ 
/*开发日期:2006-01-19                                                     */
/*调试日期:2006-01-20 (1)                                               */ 
/***************************************************************************/
bool CBeihangDlg::InitCtlArray()
{
	arrButton.Add(1001);//用ID的Value代替ID,可以简化编程
	arrButton.Add(1003);
	arrButton.Add(IDC_STATIC0_Z_CONTINUOUS);
	arrButton.Add(IDC_STATIC0_R_UNIT);
	arrButton.Add(IDC_STATIC0_Z_UNIT);
	arrButton.Add(IDC_STATIC0_Z_START);
	arrButton.Add(IDC_STATIC0_Z_START_UNIT);
	arrButton.Add(IDC_STATIC0_Z_END);
	arrButton.Add(IDC_STATIC0_END_UNIT);
	arrButton.Add(IDC_STATIC0_Z_SPEED);
	arrButton.Add(IDC_STATIC0_SPEED_UNIT);
	arrButton.Add(IDC_EDIT_R_CURPOS);
	arrButton.Add(IDC_EDIT_R_OBJPOS);
	arrButton.Add(IDC_EDIT_Z_CURPOS);
	arrButton.Add(IDC_EDIT_Z_OBJPOS);
	arrButton.Add(IDC_EDIT_Z_STARTPOINT);
	arrButton.Add(IDC_EDIT_Z_ENDPOINT);
	arrButton.Add(IDC_EDIT_Z_SPEED_CON);
	arrButton.Add(IDC_BTN_R_BACK);
	arrButton.Add(IDC_BUTTON_R_PAUSE);
	arrButton.Add(IDC_BTN_R_FOR);
	arrButton.Add(IDC_BUTTON_R_ZERO);
	arrButton.Add(IDC_BUTTON_R_GOTO);
	arrButton.Add(IDC_BTN_Z_BACK);
	arrButton.Add(IDC_BUTTON_Z_PAUSE);
	arrButton.Add(IDC_BTN_Z_FOR);
	arrButton.Add(IDC_BUTTON_Z_ZERO);
	arrButton.Add(IDC_BUTTON_Z_GOTO);
	arrButton.Add(IDC_BUTTON_SCAN_START);
	arrButton.Add(IDC_BUTTON_SCAN_END);
	arrButton.Add(IDOK);
	arrButton.Add(IDC_COMBO_R_SPEED);
	arrButton.Add(IDC_COMBO_Z_SPEED);

	arrButton.Add(IDC_STATIC1_PARAMETER);
	arrButton.Add(IDC_STATIC1_MOTION_PARA);
	arrButton.Add(IDC_STATIC1_CONSOLE);
	arrButton.Add(IDC_STATIC1_START);
	arrButton.Add(IDC_STATIC1_DISTANCE);
	arrButton.Add(IDC_STATIC1_SPEED);
	arrButton.Add(IDC_STATIC1_R_AXIS);
	arrButton.Add(IDC_STATIC1_R_START_UNIT);
	arrButton.Add(IDC_STATIC1_R_DISTANCE_UNIT);
	arrButton.Add(IDC_STATIC1_R_SPEED_UNIT);
	arrButton.Add(IDC_STATIC1_Z_AXIS);
	arrButton.Add(IDC_STATIC1_Z_START_UNIT);
	arrButton.Add(IDC_STATIC1_Z_DISTANCE_UNIT);
	arrButton.Add(IDC_STATIC1_Z_SPEED_UNIT);
	arrButton.Add(IDC_STATIC1_Z_STEP);
	arrButton.Add(IDC_STATIC1_Z_STEP_UNIT);
	arrButton.Add(IDC_STATIC1_Z_NUMBER);
	arrButton.Add(IDC_STATIC1_Z_NUMBER_UNIT);
	arrButton.Add(IDC_EDIT_SCAN_R_STARTPOINT);
	arrButton.Add(IDC_EDIT_SCAN_R_DISTANCE);
	arrButton.Add(IDC_EDIT_SCAN_R_SPEED);
	arrButton.Add(IDC_EDIT_SCAN_Z_STARTPOINT);
	arrButton.Add(IDC_EDIT_SCAN_Z_DISTANCE);
	arrButton.Add(IDC_EDIT_SCAN_Z_SPEED);
	arrButton.Add(IDC_EDIT_SCAN_Z_STEP);
	arrButton.Add(IDC_EDIT_SCAN_NUMBER);
	arrButton.Add(IDC_BUTTON_SCANCON_START);
	arrButton.Add(IDC_BUTTON_SCANCON_END);

⌨️ 快捷键说明

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