DUILIB虚拟窗口机制

转载请说明原出处,谢谢@@

Duilib虚拟界面由CNotifyPump类控制。

CNotifyPump类提供了AddVirtualWnd方法,

按虚拟窗口名称为Key值,绑定CNotifyPump类型的虚拟窗口添加到虚拟窗口m_VirtualWndMap容器中。

看下方红色代码:

boolCNotifyPump::AddVirtualWnd(CDuiString strName,CNotifyPump* pObject)

{

if( m_VirtualWndMap.Find(strName) == NULL )

{

m_VirtualWndMap.Insert(strName.GetData(),(LPVOID)pObject);

return true;

}

return false;

}

提供了NotifyPump方法:遍历虚拟窗口处理消息。

看下方红色代码:

void CNotifyPump::NotifyPump(TNotifyUI& msg)

{

///遍历虚拟窗口

if(!msg.sVirtualWnd.IsEmpty() )

{

for( int i= 0; i< m_VirtualWndMap.GetSize(); i++ )

{

if(LPCTSTR key = m_VirtualWndMap.GetAt(i) )

{

if(_tcsicmp(key, msg.sVirtualWnd.GetData()) == 0 )

{

CNotifyPump* pObject = static_cast<CNotifyPump*>(m_VirtualWndMap.Find(key,false));

if(pObject && pObject->LoopDispatch(msg) )

return;

}

}

}

}

//遍历主窗口

LoopDispatch( msg );

}

如何跟虚拟窗口绑定关系?

控件提供设置虚拟窗口的属性“virtualwnd”,

设置虚拟窗口名称方法和设置使用虚拟窗口标志。

void CControlUI::SetVirtualWnd(LPCTSTR pstrValue)

{

m_sVirtualWnd = pstrValue;

m_pManager->UsedVirtualWnd(true);

}

获取虚拟窗口名称方法:

CDuiString CControlUI::GetVirtualWnd() const

{

CDuiString str;

if( !m_sVirtualWnd.IsEmpty() ){

str = m_sVirtualWnd;

}

else{

CControlUI* pParent = GetParent();

if( pParent != NULL){

str = pParent->GetVirtualWnd();

}

else{

str = _T("");

}

}

return str;

}

return str;

}

控件在发送消息时候,当使用虚拟窗口标志m_bUsedVirtualWnd 有效是,带上虚拟窗口名称信息一起发出。

看下方红色代码:

void CPaintManagerUI::SendNotify(TNotifyUI& Msg, bool bAsync /*= false*/)

{

Msg.ptMouse = m_ptLastMousePos;

Msg.dwTimestamp = ::GetTickCount();

if( m_bUsedVirtualWnd )

{

Msg.sVirtualWnd = Msg.pSender->GetVirtualWnd();

}

if( !bAsync ) {

// Send to all listeners

if( Msg.pSender != NULL ) {

if( Msg.pSender->OnNotify ) Msg.pSender->OnNotify(&Msg);

}

for( int i = 0; i < m_aNotifiers.GetSize(); i++ ) {

static_cast<INotifyUI*>(m_aNotifiers[i])->Notify(Msg);

}

}

else {

TNotifyUI *pMsg = new TNotifyUI;

pMsg->pSender = Msg.pSender;

pMsg->sType = Msg.sType;

pMsg->wParam = Msg.wParam;

pMsg->lParam = Msg.lParam;

pMsg->ptMouse = Msg.ptMouse;

pMsg->dwTimestamp = Msg.dwTimestamp;

m_aAsyncNotify.Add(pMsg);

}

}

最后消息到voidCNotifyPump::NotifyPump(TNotifyUI& msg)中的遍历虚拟窗口处理消息。

本文主要是记录下对于Duilib虚拟界面的实现说明,有什么地方没有说明,请大家纠正。

DUILIB虚拟窗口机制

时间: 2024-11-16 01:47:12

DUILIB虚拟窗口机制的相关文章

Duilib中的消息泵和虚拟窗口

Duilib中的消息泵和虚拟窗口 一.消息泵的结构 CNotifyPump类是构建Duilib消息泵的根父类,要使用消息泵机制的窗口类应该从该类继承.在继承关系的基础上,通过DUI_DECLARE_MESSAGE_MAP.DUI_BEGIN_MESSAGE_MAP.DUI_END_MESSAGE_MAP.DUI_ON_MSGTYPE.DUI_ON_MSGTYPE_CTRNAME.DUI_ON_CLICK_CTRNAME.DUI_ON_SELECTCHANGED_CTRNAME.DUI_ON_KI

vsftpd基于pam_mysql的虚拟用户机制

一.虚拟用户概述 vsftpd使用虚拟用户时,需要为所有的虚拟用户创建一个系统用户,因为无论vsftpd使用的是哪一种用户类型(匿名用户.系统用户.虚拟用户),最终都是要映射为操作系统上的一个用户,而每一个文件资源都有各自的权限,只有操作系统上的用户才能根据权限模型判断是否能够访问该文件资源.这里仅介绍vsftpd基于pam_mysql的虚拟用户机制的使用. 二.vsftpd基于pam_mysql的虚拟用户机制 1.编译安装pam_mysql (1) 编译pam_mysql前要提供开发环境,并安

创建vsftpd的基于pam_mysql的虚拟用户机制

在centos7系统上实现搭建vsftp服务,基于pam_mysql的虚拟用户机制: 编译安装pam_mysql 准备环境: ]# yum -y groupinstall "Development Tools" "server Platform Development" ]# yum -y install pam-devel openssl-devel mariadb-devel mariadb-server ]# yum -y install vsftpd 解压p

TCP的滑动窗口机制【转】

原文链接:http://www.cnblogs.com/luoquan/p/4886345.html      TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议.既然是一个可靠的传输协议就需要对数据进行确认.TCP协议里窗口机制有2种:一种是固定的窗口大小:一种是滑动的窗口.这个窗口大小就是我们一次传输几个数据.对所有数据帧按顺序赋予编号,发送方在发送过程中始终保持着一个发送窗口,只有落在发送窗口内的帧才允许被发送:同时接收方也维持着一个接收窗口,只有落在接收窗口内的帧才允

滑动窗口机制[转]

原文:http://blog.csdn.net/yujun00/article/details/636495 (1).窗口机制    滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口:同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口.发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同.不同的滑动窗口协议窗口大小一般不同.发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧.下面举一个例子

Xvfb新建虚拟X窗口,通过x11vnc启动VNC Server并转发Xvfb启动的虚拟窗口

远程运行Linux窗口程序使用X Windows太重量级了,可以使用Xvfb新建虚拟X窗口,通过x11vnc启动VNC Server并转发Xvfb启动的虚拟窗口. 1 2 3 4 5 6 7 8 yum install xorg-x11-server-Xvfb yum install x11vnc #新建X虚拟窗口 Xvfb :1 -screen 0 1024x768x24 -nolisten tcp & #设置默认窗口为新建的虚拟窗口,打开窗口程序时调用 export DISPLAY=:1 #

Duilib改进窗口拖动,使整个窗口都能拖动(转载)

转载:http://www.cnblogs.com/XiHua/articles/3490490.html 转载:http://blog.csdn.net/lostspeed/article/details/19275249 这种方法不修改Duilib库的源码,需要的话直接在你自己的窗口类中添加两个方法实现,不需要的话,还使用原来的方法. MyWnd .h文件 1 virtual LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lPara

Android4.0窗口机制和创建过程分析

一  前言 在谈到这个话题的时候,脑海里面千头万绪,因为它涉及到了方方面面的知识… 比如Activity管理,窗口添加,Token权限验证等等… 既然这么复杂,那么我们就复杂的问题简单化,可以分成下面几个步骤进行讲解. 1.    Android里面窗口这个概念的分析.2.    Android里面窗口的类型3.    Android窗口功能相关的token值4.    Android里面Activity窗口添加流程分析5.    Dialog窗口的添加流程分析6.    Toast窗口的流程分

vsftpd的基于pam_mysql的虚拟用户机制

虚拟用户:是ftp中常用的一种策略,因为ftp服务古老而且不安全,使用匿名用户不能有效的控制权限,而本地用户可以登录操作系统,极为不安全,所以引入了虚拟用户的概念,其只是将多个虚拟用户映射为一个本地用户,此用户可以设置不允许登录,从而加强了系统的安全性,本问主要介绍基于mysql的虚拟用户 配置pam_mysql 下载地址:pam-mysql.sourceforge.net # yum -y  groupinstall  "Development Tools" "Server