MyCam 开发日志(二十一)------ SetParent()所引起的

本文探讨了MFC中SetParent()函数的使用,结合相关文章和资源,深入理解父窗口和所有者窗口的关系,以及在Windows编程中涉及的数据结构和层次结构问题。
摘要由CSDN通过智能技术生成

先转这样一篇文章:转:谈谈父窗口和所有者窗口

 

=====================  Share ======================

一、概念和区别

     在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表。系统的窗口管理器通过这个list来获取窗口信息和管理每个窗口。这个数据结构中有四个数据用来构建list,即child、sibling、parent、owner四个域。
     所以我们可以看到,窗口之间的关系有两种:owner-owned 关系和 parent-child关系。前者称之为拥有/被拥有关系,后者称之为父/子关系。在这篇文字中,我把owner窗口称之所有者窗口。换句话说,一个窗口在有一个父窗口(parent)的同时,还可能被不同的窗口拥有(owner),也可以有自己的子窗口(child)。在MFC 的CWnd类中,所有者窗口保存在m_hWndOwner成员变量中,父窗口则保存在m_hParent中,但是这两个值并不一定和窗口对象数据结构中的值相对应。
    
     窗口之间的关系,决定了窗口的外在表现。比如显示、销毁等。

     如果一个窗口数据的owner域非NULL,则它和该窗口建立了owner-owned 关系,拥有关系决定了:
     (1)被拥有的窗口永远显示在拥有它的那个窗口的前面;
     (2)当所有者窗口最小化的时候,它所拥有的窗口都会被隐藏;
     (3)当所有者窗口被销毁的时候,它所拥有的窗口都会被销毁。
     需要注意的是,隐藏所有者窗口并不会影响它所拥有的窗口的可见状态。比如:如果窗口 A 拥有窗口B,窗口B拥有窗口C,则当窗口A最小化的时候,窗口B被隐藏,但是窗口 C还是可见。


     如果一个窗口的parent域非NULL,则它和该窗口之间就建立了parent-child关系。父子决定了:
     (1)窗口在屏幕上面的显示位置。父窗口提供了用来定位子窗口的坐标系统,一个子窗口只能显示在它的父窗口的客户区中,之外的部分将被裁减。这个裁减法则决定了如果父窗口不可见,则子窗口肯定不可见。如果父窗口移动到了

要使用Python控制网络摄像机的云台,需要使用onvif库。该库可以通过ONVIF协议与网络摄像机进行通信,从而控制其功能。 以下是使用onvif库控制网络摄像机云台的简单步骤: 1. 安装onvif库 可以使用pip命令安装onvif库: ``` pip install onvif ``` 2. 创建onvif客户端对象 使用onvif库中的client模块创建onvif客户端对象: ```python from onvif import ONVIFCamera # 摄像机的IP地址、用户名和密码 mycam_addr = '192.168.0.10' mycam_user = 'admin' mycam_pass = 'admin' # 创建onvif客户端对象 mycam = ONVIFCamera(mycam_addr, 80, mycam_user, mycam_pass) ``` 3. 获取云台控制服务对象 使用onvif客户端对象的get_service方法获取云台控制服务对象: ```python # 获取云台控制服务对象 ptz_service = mycam.create_ptz_service() ``` 4. 获取当前云台位置 使用云台控制服务对象的GetStatus方法获取当前云台位置: ```python # 获取当前云台位置 status = ptz_service.GetStatus({}) pan_pos = status.Position.PanTilt.x tilt_pos = status.Position.PanTilt.y zoom_pos = status.Position.Zoom.x ``` 5. 控制云台移动 使用云台控制服务对象的ContinuousMove方法控制云台移动: ```python # 控制云台移动 ptz_service.ContinuousMove({ 'ProfileToken': 'profile_1', 'Velocity': { 'PanTilt': {'x': 1.0, 'y': 0.0}, 'Zoom': {'x': 0.0} } }) ``` 6. 停止云台移动 使用云台控制服务对象的Stop方法停止云台移动: ```python # 停止云台移动 ptz_service.Stop({ 'ProfileToken': 'profile_1', 'PanTilt': True, 'Zoom': True }) ``` 以上是使用Python控制网络摄像机云台的基本步骤。具体的操作可以根据网络摄像机的型号和功能进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值