C#开发ActiveX,海康威视的播放录像播放器,双击全屏,再双击退出返回原窗口

wmjmath 2014-04-11 04:39:54
目前可以播放录像,双击也能全屏,再次双击播放画面时,我需要关闭全屏窗口,让原来窗口继续播放录像。
我的问题是在全屏时双击,全屏窗口是关闭了,但原始的窗口的视频不播放了。
因为没做过视频播放,也许双击全屏和双击退出全屏有其他的实现方式,请大侠们支招?



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace HKActiveX
{
[ComVisible(true)]
[Guid("AA820538-946A-4BDC-8580-1691989BC8C5")]
public partial class HKControl : UserControl, IObjectSafety
{
private double duration;
private bool m_bInitSDK = false;
private uint iLastErr = 0;
private Int32 m_lUserID = -1;

private Int32 m_lPlayHandle = -1;

private bool m_bPause = false;

public CHCNetSDK.NET_DVR_DEVICEINFO_V30 DeviceInfo;
public CHCNetSDK.NET_DVR_IPPARACFG_V40 m_struIpParaCfgV40;
public CHCNetSDK.NET_DVR_STREAM_MODE m_struStreamMode;
public CHCNetSDK.NET_DVR_IPCHANINFO m_struChanInfo;
public HKControl()
{
InitializeComponent();
m_bInitSDK = CHCNetSDK.NET_DVR_Init();
CHCNetSDK.NET_DVR_SetConnectTime(2000, 1);
CHCNetSDK.NET_DVR_SetReconnect(2000, 1);

if (m_bInitSDK == false)
{
MessageBox.Show("NET_DVR_Init error!");
return;
}
else
{
//保存SDK日志
CHCNetSDK.NET_DVR_SetLogToFile(3, "D:\\SdkLog\\", true);
//iChannelNum = new int[96];
}
AutoLogin("128.10.3.23", 8601, "user", "111111", ref DeviceInfo);
}

//登录
private void AutoLogin(string DVRIPAddress, string DVRPortNumber,string DVRUserName,string DVRPassword,ref CHCNetSDK.NET_DVR_DEVICEINFO_V30 DeviceInfo){
m_lUserID = CHCNetSDK.NET_DVR_Login_V30(DVRIPAddress, DVRPortNumber, DVRUserName, DVRPassword, ref DeviceInfo);
if (m_lUserID < 0)
{
iLastErr = CHCNetSDK.NET_DVR_GetLastError();
string str = "NET_DVR_Login_V30 failed, error code= " + iLastErr; //登录失败,输出错误号
MessageBox.Show(str);
return false;
}
else
{
//登录成功
return true;
}
}
//按文件名回放
private void PlaybackName(string sPlayBackFileName)
{
if (m_lPlayHandle >= 0)
{
//如果已经正在回放,先停止回放
if (!CHCNetSDK.NET_DVR_StopPlayBack(m_lPlayHandle))
{
iLastErr = CHCNetSDK.NET_DVR_GetLastError();
string str = "NET_DVR_StopPlayBack failed, error code= " + iLastErr; //停止回放失败,输出错误号
MessageBox.Show(str);
return;
}
m_lPlayHandle = -1;
}

//按文件名回放
m_lPlayHandle = CHCNetSDK.NET_DVR_PlayBackByName(m_lUserID, sPlayBackFileName, VideoPlayWnd.Handle);
if (m_lPlayHandle < 0)
{
iLastErr = CHCNetSDK.NET_DVR_GetLastError();
string str = "NET_DVR_PlayBackByName failed, error code= " + iLastErr;
MessageBox.Show(str);
return;
}

uint iOutValue = 0;
if (!CHCNetSDK.NET_DVR_PlayBackControl_V40(m_lPlayHandle, CHCNetSDK.NET_DVR_PLAYSTART, IntPtr.Zero, 0, IntPtr.Zero, ref iOutValue))
{
iLastErr = CHCNetSDK.NET_DVR_GetLastError();
string str = "NET_DVR_PLAYSTART failed, error code= " + iLastErr; //回放控制失败,输出错误号
MessageBox.Show(str);
return;
}

}

Form f ;
private void 播放按钮_Click(object sender, EventArgs e)
{
PlaybackName("ch08_01000001547000000");
f = new FullScreenForm();
}

//VideoPlayWnd 是PictureBox 用来显示播放的视频画面
//双击全屏
public void VideoPlayWnd_DoubleClick(object sender, EventArgs e)
{
if (VideoPlayWnd.Dock != DockStyle.Fill)
{
VideoPlayWnd.Dock = DockStyle.Fill;
f.Controls.Add(VideoPlayWnd);
f.ShowDialog();
}
else
{
VideoPlayWnd.Dock = DockStyle.None;
//请教大侠们,这里该如何处理呢?
f.Close();
}

#region IObjectSafety 成员 用于ActiveX控件安全信任
public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
{
pdwSupportedOptions = 1;
pdwEnabledOptions = 2;
}

public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)
{
throw new NotImplementedException();
}
#endregion
}
}
...全文
430 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧