当前位置:   article > 正文

Mission Planner 二次开发之添加海康威视摄像机_mission planner中的视频接口

mission planner中的视频接口

需求

需要在无人艇上添加海康威视的实时摄像头。

  1. 本地IP192.168.0.100 摄像头IP 192.168.0.64 用户名admin 密码nanfoon51077533 端口8000
  2. 海康配置可在文件中更改。
  3. 摄像头添加在BoatStatus页的右侧地图模块的右上角。
  4. 通过一个按钮来控制摄像头的开启和关闭。
  5. 图像双击后弹出独立窗口。

摄像头未开启时的效果图:
在这里插入图片描述

摄像头开启后的效果图: 在这里插入图片描述
弹出后的独立窗口示意图:在这里插入图片描述

实现

1. 添加按钮

地图页在MissionPlanner项目下面的GCSViews文件夹里面的FlightData.cs里面。如下图:在这里插入图片描述
toolbox里面找到Button,拖至地图位置,并将其text属性更改。如图所示:在这里插入图片描述

2. 更改海康威视参数

因为公司海康威视通用同一个配置参数,先要更改设备参数。进入海康威视的配置软件:在这里插入图片描述
点击添加至客户端后会弹出下面的窗口,输入原参数,起一个别名,点击添加。在这里插入图片描述
选中刚才添加的设备,点击远程配置在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
生效后不要忘记更改本地计算机的IP地址。再次进入远程配置,更改密码
在这里插入图片描述
nanfoon51077533
顺带把OSD显示改下:在这里插入图片描述

3. 添加视频窗口

toolbox里面找到pictureBox拖入地图右上侧。并将其visible属性改为falsesize改为300,300.在这里插入图片描述

4. 添加视频代码

双击Camera按键进入点击事件代码块。在这里插入图片描述
在这里插入图片描述
设备网络SDK开发包(64bit)【库文件】里的HCNetSDK.dll、HCCore.dll、HCNetSDKCom文件夹、PlayCtrl.dll、SuperRender.dll、AudioRender.dll、ssleay32.dll、libeay32.dll等文件均拷贝放置在新建的bin文件夹里,将bin文件夹放置在Debug目录下。本例中 C:\Users\lenovo\Documents\Visual Studio 2017\Projects\FlotillaV4\FlotillaV4\bin\Debug

将海康实时预览示例代码一\PreviewDemo文件夹里的CHCNetSDK.cs复制到FlightData.cs相同文件夹下。右击将其添加如当前project。

在这里插入图片描述
双击打开,将第三行的namespace更改,如下:

namespace PreviewDemo
  • 1

改为

namespace MissionPlanner.GCSViews
  • 1

更改后导入进去的CHCNetSDK.cs文件可被FlightData.cs识别。
在新增的按键点击事件代码块添加以下代码:

        //HikVision Camera
        private bool m_bInitSDK = false;

        private void ButtonCameraSwitch_Click(object sender, EventArgs e)
        {
            m_bInitSDK = CHCNetSDK.NET_DVR_Init();
            if (m_bInitSDK == false)
            {
                MessageBox.Show("NET_DVR_Init error!");
                return;
            }
            else
            {
                //保存SDK日志 To save the SDK log
                CHCNetSDK.NET_DVR_SetLogToFile(3, "C:\\SdkLog\\", true);
            }
        }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

添加完成后点击调试,启动调式运行,程序启动后点击按键,如无报错,说明添加进去的模块运行正常。继续编写。
在按键单击函数下方添加海康威视的资源释放函数,如下所示(添加后会提示重名或者变量未定义的错误,根据提示修改下就可以):

        //HikVision Camera
        private bool m_bInitSDK = false;
        private Int32 m_lRealHandle = -1;
        private Int32 m_lUserID = -1;

        private void ButtonCameraSwitch_Click(object sender, EventArgs e)
        {
            m_bInitSDK = CHCNetSDK.NET_DVR_Init();
            if (m_bInitSDK == false)
            {
                MessageBox.Show("NET_DVR_Init error!");
                return;
            }
            else
            {
                //保存SDK日志 To save the SDK log
                CHCNetSDK.NET_DVR_SetLogToFile(3, "C:\\SdkLog\\", true);
            }
        }

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        protected void HikDispose(bool disposing)
        {
            if (m_lRealHandle >= 0)
            {
                CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle);
            }
            if (m_lUserID >= 0)
            {
                CHCNetSDK.NET_DVR_Logout(m_lUserID);
            }
            if (m_bInitSDK == true)
            {
                CHCNetSDK.NET_DVR_Cleanup();
            }
            if (disposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

相同的方法添加更改所需代码,为了灵活变换显示区域,对preview代码块做了传递函数的更改,将picturebox作为传递变量改进去。代码块更改完后如下:

        //HikVision Camera
        private bool m_bInitSDK = false;
        private Int32 m_lRealHandle = -1;
        private Int32 m_lUserID = -1;
        private uint iLastErr = 0;
        private string str;
        CHCNetSDK.REALDATACALLBACK RealData = null;

        private void ButtonCameraSwitch_Click(object sender, EventArgs e)
        {
            m_bInitSDK = CHCNetSDK.NET_DVR_Init();
            if (m_bInitSDK == false)
            {
                MessageBox.Show("NET_DVR_Init error!");
                return;
            }
            else
            {
                //保存SDK日志 To save the SDK log
                CHCNetSDK.NET_DVR_SetLogToFile(3, "C:\\SdkLog\\", true);
            }
            if (m_lUserID < 0)
            {//Open
                HikLogin();
                HikPreview(PictureBoxHikVisionCameraOnMap);
            }
            else
            {//Close
                HikPreview(PictureBoxHikVisionCameraOnMap);
                HikLogin();
            }
        }

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        protected void HikDispose(bool disposing)
        {
            if (m_lRealHandle >= 0)
            {
                CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle);
            }
            if (m_lUserID >= 0)
            {
                CHCNetSDK.NET_DVR_Logout(m_lUserID);
            }
            if (m_bInitSDK == true)
            {
                CHCNetSDK.NET_DVR_Cleanup();
            }
            if (disposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }
        /// <summary>
        /// Login
        /// </summary>
        protected void HikLogin()
        {
            if (m_lUserID < 0)
            {
                string DVRIPAddress = ConfigurationManager.AppSettings["HikIP"]; //设备IP地址或者域名
                Int16 DVRPortNumber = Convert.ToInt16(ConfigurationManager.AppSettings["HikPort"]);//设备服务端口号
                string DVRUserName = ConfigurationManager.AppSettings["UserName"];//设备登录用户名
                string DVRPassword = ConfigurationManager.AppSettings["PassWord"];//设备登录密码

                CHCNetSDK.NET_DVR_DEVICEINFO_V30 DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30();

                //登录设备 Login the device
                m_lUserID = CHCNetSDK.NET_DVR_Login_V30(DVRIPAddress, DVRPortNumber, DVRUserName, DVRPassword, ref DeviceInfo);
                if (m_lUserID < 0)
                {
                    iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                    str = "NET_DVR_Login_V30 failed, error code= " + iLastErr; //登录失败,输出错误号
                    MessageBox.Show(str);
                    return;
                }
                else
                {
                    //登录成功
//                    MessageBox.Show("Login Success!");
//                    CustomMessageBox.Show("Login Success!");
                    //                   btnLogin.Text = "Logout";
                }

            }
            else
            {
                //注销登录 Logout the device
                if (m_lRealHandle >= 0)
                {
                    MessageBox.Show("Please stop live view firstly");
                    return;
                }

                if (!CHCNetSDK.NET_DVR_Logout(m_lUserID))
                {
                    iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                    str = "NET_DVR_Logout failed, error code= " + iLastErr;
                    MessageBox.Show(str);
                    return;
                }
                m_lUserID = -1;
//                btnLogin.Text = "Login";
            }
            return;

        }

        /// <summary>
        /// HikPreview
        /// </summary>
        private void HikPreview( PictureBox pictrueBox )
        {
            if (m_lUserID < 0)
            {
                MessageBox.Show("Please login the device firstly");
                return;
            }

            if (m_lRealHandle < 0)
            {
                CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();
                lpPreviewInfo.hPlayWnd = pictrueBox.Handle;//预览窗口
                lpPreviewInfo.lChannel = 1;//预te览的设备通道
                lpPreviewInfo.dwStreamType = 0;//码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推
                lpPreviewInfo.dwLinkMode = 0;//连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP 
                lpPreviewInfo.bBlocked = true; //0- 非阻塞取流,1- 阻塞取流
                lpPreviewInfo.dwDisplayBufNum = 1; //播放库播放缓冲区最大缓冲帧数
                lpPreviewInfo.byProtoType = 0;
                lpPreviewInfo.byPreviewMode = 0;


                //if (textBoxID.Text != "")
                //{
                //    lpPreviewInfo.lChannel = -1;
                //    byte[] byStreamID = System.Text.Encoding.Default.GetBytes(textBoxID.Text);
                //    lpPreviewInfo.byStreamID = new byte[32];
                //    byStreamID.CopyTo(lpPreviewInfo.byStreamID, 0);
                //}


                if (RealData == null)
                {
                    RealData = new CHCNetSDK.REALDATACALLBACK(HikRealDataCallBack);//预览实时流回调函数
                }

                IntPtr pUser = new IntPtr();//用户数据

                //打开预览 Start live view 
                m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null/*RealData*/, pUser);
                if (m_lRealHandle < 0)
                {
                    iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                    str = "NET_DVR_RealPlay_V40 failed, error code= " + iLastErr; //预览失败,输出错误号
                    MessageBox.Show(str);
                    return;
                }
                else
                {
                    //预览成功
                    ButtonCameraSwitch.Text = "Stop";
                    pictrueBox.Visible = true;
                }
            }
            else
            {
                //停止预览 Stop live view 
                if (!CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle))
                {
                    iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                    str = "NET_DVR_StopRealPlay failed, error code= " + iLastErr;
                    MessageBox.Show(str);
                    return;
                }
                m_lRealHandle = -1;
                ButtonCameraSwitch.Text = "Camera";
                pictrueBox.Visible = false;
            }
            return;
        }
        
        /// <summary>
        /// HikCallBack
        /// </summary>
        public void HikRealDataCallBack(Int32 lRealHandle, UInt32 dwDataType, IntPtr pBuffer, UInt32 dwBufSize, IntPtr pUser)
        {
            if (dwBufSize > 0)
            {
                byte[] sData = new byte[dwBufSize];
                System.Runtime.InteropServices.Marshal.Copy(pBuffer, sData, 0, (Int32)dwBufSize);

                string str = "实时流数据.ps";
                FileStream fs = new FileStream(str, FileMode.Create);
                int iLen = (int)dwBufSize;
                fs.Write(sData, 0, iLen);
                fs.Close();
            }
        }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205

5. 海康配置改为可在文件中更改

FlightData.cs添加 using System.Configuration; 引用。然后在启动文件夹下找到exe.config后缀的文件,打开,找到<appSettings>字段,如下所示:

  <appSettings>
    <add key="UpdateLocationVersion" value="http://firmware.ardupilot.org/MissionPlanner/upgrade/version.txt" />
    <add key="UpdateLocation" value="http://firmware.ardupilot.org/MissionPlanner/upgrade/" />
    <add key="UpdateLocationMD5" value="http://firmware.ardupilot.org/MissionPlanner/checksums.txt" />
    <add key="UpdateLocationZip" value="http://firmware.ardupilot.org/MissionPlanner/MissionPlanner-latest.zip" />
    <add key="BetaUpdateLocationVersion" value="https://ci.appveyor.com/api/projects/meee1/missionplanner/artifacts/version.txt?tag=beta" />
    <add key="BetaUpdateLocationMD5" value="https://ci.appveyor.com/api/projects/meee1/missionplanner/artifacts/checksums.txt?tag=beta" />
    <add key="BetaUpdateLocationZip" value="https://ci.appveyor.com/api/projects/meee1/missionplanner/artifacts/MissionPlannerBeta.zip?tag=beta" />
    <add key="MasterUpdateLocationMD5" value="https://ci.appveyor.com/api/projects/meee1/missionplanner/artifacts/checksums.txt?branch=master" />
    <add key="MasterUpdateLocationZip" value="https://ci.appveyor.com/api/projects/meee1/missionplanner/artifacts/MissionPlannerBeta.zip?branch=master" />
    <add key="ParameterLocations" value="https://raw.githubusercontent.com/ardupilot/ardupilot/ArduCopter-stable/ArduCopter/Parameters.cpp;    https://raw.githubusercontent.com/ardupilot/ardupilot/ArduSub-stable/ArduSub/Parameters.cpp;      https://raw.githubusercontent.com/ardupilot/ardupilot/ArduPlane-stable/ArduPlane/Parameters.cpp;          https://raw.githubusercontent.com/ardupilot/ardupilot/APMrover2-stable/APMrover2/Parameters.cpp;          https://raw.githubusercontent.com/ardupilot/ardupilot/master/AntennaTracker/Parameters.cpp;" />
    <add key="ParameterLocationsBleeding" value="https://raw.githubusercontent.com/ardupilot/ardupilot/master/ArduCopter/Parameters.cpp;     https://raw.githubusercontent.com/ardupilot/ardupilot/master/ArduSub/Parameters.cpp;       https://raw.githubusercontent.com/ardupilot/ardupilot/master/ArduPlane/Parameters.cpp;          https://raw.githubusercontent.com/ardupilot/ardupilot/master/APMrover2/Parameters.cpp;          https://raw.githubusercontent.com/ardupilot/ardupilot/master/AntennaTracker/Parameters.cpp;" />
    <add key="ParameterMetaDataXMLFileName" value="ParameterMetaData.xml" />
    <add key="ParameterMetaDataXMLFileNameBackup" value="ParameterMetaDataBackup.xml" />
    <add key="ClientId" value="zHTnuEq0RAWoLy5thcvTtMdwX7r6et2L3MAhxv8a0" />
    <add key="ClientSecret" value="1ylYlXV4GuWJHIUywFg+XxE6hxsd3P/Dq5+J1PCUGxulC05/GC4Xpg==" />
    <add key="AuthURL" value="https://auth.altitudeangel.com" />
    <add key="APIURL" value="https://api.altitudeangel.com" />
    <add key="ClientSettingsProvider.ServiceUri" value="" />
  </appSettings>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

在开始位置添加海康配置字段,如下:

  <appSettings>
    <add key="LocalIP" value="192.168.0.100"/>
    <add key="HikIP" value="192.168.0.64"/>
    <add key="UserName" value="admin"/>
    <add key="PassWord" value="nanfoon51077533"/>
    <add key="HikPort" value="8000"/>
    <add key="UpdateLocationVersion" value="http://firmware.ardupilot.org/MissionPlanner/upgrade/version.txt" />
    <add key="UpdateLocation" value="http://firmware.ardupilot.org/MissionPlanner/upgrade/" />
    <add key="UpdateLocationMD5" value="http://firmware.ardupilot.org/MissionPlanner/checksums.txt" />
    <add key="UpdateLocationZip" value="http://firmware.ardupilot.org/MissionPlanner/MissionPlanner-latest.zip" />
    <add key="BetaUpdateLocationVersion" value="https://ci.appveyor.com/api/projects/meee1/missionplanner/artifacts/version.txt?tag=beta" />
    <add key="BetaUpdateLocationMD5" value="https://ci.appveyor.com/api/projects/meee1/missionplanner/artifacts/checksums.txt?tag=beta" />
    <add key="BetaUpdateLocationZip" value="https://ci.appveyor.com/api/projects/meee1/missionplanner/artifacts/MissionPlannerBeta.zip?tag=beta" />
    <add key="MasterUpdateLocationMD5" value="https://ci.appveyor.com/api/projects/meee1/missionplanner/artifacts/checksums.txt?branch=master" />
    <add key="MasterUpdateLocationZip" value="https://ci.appveyor.com/api/projects/meee1/missionplanner/artifacts/MissionPlannerBeta.zip?branch=master" />
    <add key="ParameterLocations" value="https://raw.githubusercontent.com/ardupilot/ardupilot/ArduCopter-stable/ArduCopter/Parameters.cpp;    https://raw.githubusercontent.com/ardupilot/ardupilot/ArduSub-stable/ArduSub/Parameters.cpp;      https://raw.githubusercontent.com/ardupilot/ardupilot/ArduPlane-stable/ArduPlane/Parameters.cpp;          https://raw.githubusercontent.com/ardupilot/ardupilot/APMrover2-stable/APMrover2/Parameters.cpp;          https://raw.githubusercontent.com/ardupilot/ardupilot/master/AntennaTracker/Parameters.cpp;" />
    <add key="ParameterLocationsBleeding" value="https://raw.githubusercontent.com/ardupilot/ardupilot/master/ArduCopter/Parameters.cpp;     https://raw.githubusercontent.com/ardupilot/ardupilot/master/ArduSub/Parameters.cpp;       https://raw.githubusercontent.com/ardupilot/ardupilot/master/ArduPlane/Parameters.cpp;          https://raw.githubusercontent.com/ardupilot/ardupilot/master/APMrover2/Parameters.cpp;          https://raw.githubusercontent.com/ardupilot/ardupilot/master/AntennaTracker/Parameters.cpp;" />
    <add key="ParameterMetaDataXMLFileName" value="ParameterMetaData.xml" />
    <add key="ParameterMetaDataXMLFileNameBackup" value="ParameterMetaDataBackup.xml" />
    <add key="ClientId" value="zHTnuEq0RAWoLy5thcvTtMdwX7r6et2L3MAhxv8a0" />
    <add key="ClientSecret" value="1ylYlXV4GuWJHIUywFg+XxE6hxsd3P/Dq5+J1PCUGxulC05/GC4Xpg==" />
    <add key="AuthURL" value="https://auth.altitudeangel.com" />
    <add key="APIURL" value="https://api.altitudeangel.com" />
    <add key="ClientSettingsProvider.ServiceUri" value="" />
  </appSettings>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

找到之前添加的HikLogin(),找到如下代码:

                string DVRIPAddress = "192.168.0.64"; //设备IP地址或者域名
                Int16 DVRPortNumber = 8000;//设备服务端口号
                string DVRUserName = "admin";//设备登录用户名
                string DVRPassword = "nanfoon51077533";//设备登录密码

  • 1
  • 2
  • 3
  • 4
  • 5

更改为:

                string DVRIPAddress = ConfigurationManager.AppSettings["HikIP"]; //设备IP地址或者域名
                Int16 DVRPortNumber = Int16.Parse( ConfigurationManager.AppSettings["HiPort"]);//设备服务端口号
                string DVRUserName = ConfigurationManager.AppSettings["UserName"];//设备登录用户名
                string DVRPassword = ConfigurationManager.AppSettings["PassWord"];//设备登录密码

  • 1
  • 2
  • 3
  • 4
  • 5

实际运行效果:
在这里插入图片描述

6. 双击窗体弹出新界面

通过新建窗体来承载弹出的新视频界面,弹出后阴藏地图上的相机按钮来防止用户干扰,关闭弹出的窗口后返回至地图页显示。
在FlightData.cs文件里面的海康威视代码区域增加图像picturebox的双击事件函数:

        private void PictureBoxHikVisionCameraOnMap_DoubleClick(object sender, System.EventArgs e)
        {
            
        }

  • 1
  • 2
  • 3
  • 4
  • 5

返回到设计窗体选中海康的picturebox空间,在右下角的属性中选中事件栏,找到doubleclick项,在下拉菜单里面选中刚才写的事件函数名,链接事件。
在这里插入图片描述
代码写完之后如下:

        /// <summary>
        /// Double click event , to Pop the free moved Hik camera windows.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PictureBoxHikVisionCameraOnMap_DoubleClick(object sender, System.EventArgs e)
        {
//            CustomMessageBox.Show("Double click trigered");  // test the trigger event.
            Form PupHikForm = new Form();  //creat the new from.
            PupHikForm.ShowIcon = false;
            PupHikForm.Text = "Flotilla-HikVision";
            PupHikForm.FormClosed += new FormClosedEventHandler(PuphikForm_FormClosed); //the close event.
            PictureBox PupHikFormPictureBox = new PictureBox(); 

            PupHikFormPictureBox.BackColor = Color.DeepPink; // to test the Pic box.
            PupHikFormPictureBox.Size = PupHikForm.Size;
            //to auto size with the Form.
            PupHikFormPictureBox.Anchor = ( AnchorStyles.Top|AnchorStyles.Bottom|AnchorStyles.Left|AnchorStyles.Right);
            PupHikForm.Controls.Add(PupHikFormPictureBox); // Add the pic in form
            ButtonCameraSwitch.PerformClick(); //close the on map picbox by trigger the button event mannuely.

            HikLogin(); // Login again
            HikPreview(PupHikFormPictureBox); //preview
            ButtonCameraSwitch.Visible = false;
            PupHikForm.Show();
        }

        /// <summary>
        /// close event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PuphikForm_FormClosed(Object sender, FormClosedEventArgs e)
        {
            PictureBoxHikVisionCameraOnMap.Visible = true;
            HikPreview(PictureBoxHikVisionCameraOnMap);//call it two times to avoid the logic conflict. 
            HikPreview(PictureBoxHikVisionCameraOnMap);

            ButtonCameraSwitch.Visible = true;
        }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/488776
推荐阅读
相关标签
  

闽ICP备14008679号