1.5 主窗体设计(9)
(31)为云台控制的按钮关联CStageButton类变量,并在对话框初始化时从INI文件中读取云台参数信息,并设置Com端口。代码如下:
- m_ButtonUp.m_Type = ctUp; //向上
- m_ButtonDown.m_Type = ctDown; //向下
- m_ButtonLeft.m_Type = ctLeft; //向左
- m_ButtonRight.m_Type = ctRight; //向右
- m_InFoci.m_Type = ctInFoci; //聚焦减
- m_ReFoci.m_Type = ctReFoci; //聚焦增
- m_InLen.m_Type = ctInLen; //对焦减
- m_ReLen.m_Type = ctReLen; //对焦增
- m_InAperture.m_Type = ctInAperture; //光圈减
- m_ReAperture.m_Type = ctReAperture; //光圈增
- m_InBrush.m_Type = ctInBrush; //画笔减
- m_ReBrush.m_Type = ctReBrush; //画笔增
- m_Len = GetPrivateProfileInt("使用字节数","字节数",
8,"./stage.ini"); //获得云台协议使用的字节数 - m_ActoinCount = GetPrivateProfileInt("控制项","
控制数",13,"./stage.ini"); //获得云台的控制动作数 - m_pData = new unsigned char[m_ActoinCount][MAXNUM];
- m_Port = GetPrivateProfileInt("端口设置","端
口号",1,"./stage.ini"); //获得端口号 - GetPrivateProfileString("端口设置","环境设置","9600,n,8,1",
- m_Setting.GetBuffer(0),MAX_PATH,".
/stage.ini"); //获得环境设置 - int data;
- char buff[20] = {0};
- char var[20] = {0};
- for (int i = 0 ; i<m_ActoinCount ; i++)
- {
- for (int j = 0 ; j <m_Len; j++)
- {
- char section[20] = "字节";
- itoa(i+1,var,10);
- itoa(j+1,buff,10);
- strcat(section,buff);
- data = GetPrivateProfileInt(var,section,
0,"./stage.ini"); //获得各个按钮的字节数 - m_pData[i][j] = data;
- }
- }
- m_Com.SetSettings(m_Setting);
//设置端口信息,并打开端口 - m_Com.SetOutBufferSize(512);
//设置输出缓冲区大小 - m_Com.SetCommPort(m_Port);
//设置端口号 - m_Com.SetSThreshold(0);
//设置传输缓冲区允许的最小字符 - m_Com.SetPortOpen(TRUE);
//打开串口
(32)自定义MoveCapture函数,用于向串口发送信息控制云台。代码如下:
- void CCaptureDlg::MoveCapture(UINT num)
- {
- VARIANT vt;
//定义VARIANT结构变量 - SAFEARRAY* pSafe;
//定义SAFEARRAY结构指针 - SAFEARRAYBOUND band;
//定义SAFEARRAYBOUND结构变量 - band.cElements = m_Len;
- band.lLbound = 0;
- pSafe = SafeArrayCreate(VT_UI1,1,&band);
- for(long i=0;i<m_Len;i++)
- {
- SafeArrayPutElement(pSafe,&i,(void*)&m_pData[num][i]);
- }
- vt.vt = VT_ARRAY |VT_UI1;
- vt.parray = pSafe;
- m_Com.SetOutput((COleVariant)vt);
//向串口发送数据 - }
(33)为各个按钮添加进行云台控制的方法。代码如下:
- void CCaptureDlg::OnUp() //向上移动
- {
- MoveCapture(0);
- }
- void CCaptureDlg::OnReset() //停止移动
- {
- MoveCapture(12);
- }
- void CCaptureDlg::OnDown() //向下移动
- {
- MoveCapture(1);
- }
- void CCaptureDlg::OnLeft() //向左移动
- {
- MoveCapture(2);
- }
- void CCaptureDlg::OnRight() //向右移动
- {
- MoveCapture(3);
- }
- void CCaptureDlg::OnInFoci() //增加聚焦
- {
- MoveCapture(5);
- }
- void CCaptureDlg::OnReFoci() //减小聚焦
- {
- MoveCapture(4);
- }
- void CCaptureDlg::OnInLen() //对焦增
- {
- MoveCapture(7);
- }
- void CCaptureDlg::OnReLen() //对焦减
- {
- MoveCapture(6);
- }
- void CCaptureDlg::OnReAperture() //光圈减
- {
- MoveCapture(8);
- }
- void CCaptureDlg::OnInAperture() //光圈增
- {
- MoveCapture(9);
- }
- void CCaptureDlg::OnReBrush() //画笔减
- {
- MoveCapture(10);
- }
- void CCaptureDlg::OnInBrush() //画笔增
- {
- MoveCapture(11);
- }