CN102566983A - 基于Windows系统的对象拖拽实现方法及其系统 - Google Patents
基于Windows系统的对象拖拽实现方法及其系统 Download PDFInfo
- Publication number
- CN102566983A CN102566983A CN2010105763519A CN201010576351A CN102566983A CN 102566983 A CN102566983 A CN 102566983A CN 2010105763519 A CN2010105763519 A CN 2010105763519A CN 201010576351 A CN201010576351 A CN 201010576351A CN 102566983 A CN102566983 A CN 102566983A
- Authority
- CN
- China
- Prior art keywords
- application program
- window
- pull
- function
- pulls
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- User Interface Of Digital Computer (AREA)
Abstract
本发明公开了一种基于Windows系统的对象拖拽实现方法及其系统,该方法包括:在所述应用程序的底层窗口绑定第一对象,在该应用程序中各可接受拖拽的窗口绑定第二对象;其中,第一对象为Windows CWnd对象;在拖拽过程中,当根据鼠标当前位置和所述应用程序的底层窗口位置判断拖拽是从所述应用程序到其他应用程序时,停止向所述应用程序内部各可接受拖拽的窗口发送拖拽消息,并以与所述应用程序的底层窗口绑定的CWnd对象作为发起源,发送全局拖拽消息,以使所述其他应用程序根据所述拖拽消息调用相应的鼠标事件处理函数进行相应处理。本发明可将应用程序的拖拽机制与Windows系统的拖拽机制相结合,提高操作灵活性。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于Windows系统的对象拖拽实现方法及其系统。
背景技术
Microsoft开发的Windows(视窗)是目前世界上用户最多、且兼容性最强的操作系统。Windows操作系统具有友好的操作界面,以其拖拽机制实现了基于Windows系统统一的交互。所谓拖拽,是指通过鼠标点击,持续不放手,将需要操作的文件移动到固定位置,完成某种功能的操作。各应用程序对于拖拽的实现各有不同。
例如,当前比较流行的图片管理工具有可牛影像、Picasa和微软图片管理器等。其中,可牛影像支持图片内部浏览窗口的拖动,支持外部图片拖入其中,但不支持图片从应用程序中拖动出去;Picasa同可牛影像支持的拖动操作类似,它支持内部拖动,支持内部浏览图片界面到文件夹的拖动,同样只支持外部拖动到内部,不支持内部拖动到外部;微软图片管理器,因为同是微软产品,它支持图片内部外部的相互拖动,可是不支持图片在应用程序内的拖动,没有交互。
发明人在实现本发明的过程中,发现现有技术至少存在以下缺陷:
目前在Windows上开发的应用程序,少有对应用程序内部与外部的拖拽进行结合,即,当前应用程序(除了微软的应用程序),都没有很好的将Windows系统的拖拽机制和本应用程序的拖拽机制结合起来,以致操作不灵活,给用户操作体验带来一定的麻烦,用户感受差。
发明内容
本发明实施例的目的在于提供一种基于Windows系统的对象拖拽实现方法及其系统,用以将应用程序的拖拽机制与Windows系统的拖拽机制相结合,提高操作灵活性,为此,本发明采用如下技术方案:
一种基于Windows系统的对象拖拽实现方法,应用于使用未基于Windows标准控件实现的应用程序,该方法包括以下步骤:
在所述应用程序的底层窗口绑定第一对象,在该应用程序中各可接受拖拽的窗口绑定第二对象;其中,所述第一对象为Windows CWnd,所述第二对象为非Windows标准对象,所述第一对象和所述第二对象中定义有指向鼠标事件处理函数的鼠标事件入口函数;
在拖拽过程中,当根据鼠标当前位置和所述应用程序的底层窗口位置,判断拖拽是在所述应用程序内部进行时,向所述应用程序内部的目标窗口发送拖拽消息,使目标窗口根据与其绑定的第二对象调用相应的鼠标事件处理函数进行相应处理;
当根据鼠标当前位置和所述应用程序的底层窗口位置判断拖拽是从所述应用程序到其他应用程序时,停止向所述应用程序内部各可接受拖拽的窗口发送拖拽消息,并以与所述应用程序的底层窗口绑定的CWnd对象作为发起源,发送全局拖拽消息,以使所述其他应用程序根据所述拖拽消息调用相应的鼠标事件处理函数进行相应处理。
一种基于Windows系统的对象拖拽实现系统,应用于使用未基于Windows标准控件实现的应用程序,所述系统包括:
注册模块,用于在所述应用程序的底层窗口绑定第一对象,在该应用程序中各可接受拖拽的窗口绑定第二对象;其中,所述第一对象为Windows CWnd,所述第二对象为非Windows标准对象,所述第一对象和所述第二对象中定义有指向鼠标事件处理函数的鼠标事件入口函数;
判断模块,用于在拖拽过程中,根据鼠标当前位置和所述应用程序的底层窗口位置,判断拖拽是在所述应用程序内部进行,还是从所述应用程序到其他应用程序;
处理模块,用于当所述判断模块判断拖拽是在所述应用程序内部进行时,向所述应用程序内部的目标窗口发送拖拽消息,使目标窗口根据与其绑定的第二对象调用相应的鼠标事件处理函数进行相应处理;当所述判断模块判断拖拽是从所述应用程序到其他应用程序时,停止向所述应用程序内部各可接受拖拽的窗口发送拖拽消息,并以与所述应用程序的底层窗口绑定的CWnd对象作为发起源,发送全局拖拽消息,以使所述其他应用程序根据所述拖拽消息调用相应的鼠标事件处理函数进行相应处理。
本发明的上述实施例,通过在所述应用程序的底层窗口绑定WindowsCWnd对象,在该应用程序中各可接受拖拽的窗口绑定自定义的对象,在拖拽过程中,根据鼠标当前位置和所述应用程序的底层窗口位置,判断拖拽是在所述应用程序内部进行还是从该应用程序到其他应用程序,并根据不同的判断结果进行不同的处理;其中,对于内部拖拽,向所述应用程序内部的目标窗口发送拖拽消息,使目标窗口根据与其绑定的第二对象调用相应的鼠标事件处理函数进行相应处理;对于从内部到外部的拖拽,停止向所述应用程序内部各可接受拖拽的窗口发送拖拽消息,并以与所述应用程序的底层窗口绑定的CWnd对象作为发起源,发送全局拖拽消息,以使所述其他应用程序根据所述拖拽消息调用相应的鼠标事件处理函数进行相应处理,从而将应用程序的拖拽机制与Windows系统的拖拽机制相结合,提高了拖拽操作灵活性。
附图说明
图1为现有技术中的Windows拖拽模型示意图;
图2为现有技术中的Windows拖拽流程示意图;
图3为本发明实施例中QQ影像应用程序拖拽相关的对象结构示意图;
图4为本发明实施例中QQ影像应用程序内部外部拖拽示意图;
图5为本发明实施例中的应用程序内部、外部拖拽流程示意图;
图6为本发明实施例中基于Windows系统的对象拖拽实现系统的结构示意图。
具体实施方式
支持文件拖拽的技术,包括了OLE(Object Linking and Embedding,对象连接与嵌入)的技术以及WM_DROPFILE技术。
OLE不仅是桌面应用程序的集成,而且还定义和实现了一种允许应用程序作为“对象”(数据集合和操作数据的函数)彼此进行“连接”的机制,这种连接机制和协议称为组件对象模型(COM)。
OLE是在客户应用程序间传输和共享信息的一组综合标准,允许创建带有指向应用程序的链接的混合文档以使用户修改时不必在应用程序间切换的协议。利用OLE技术来接受拖拽,可以在“窗口”注册COleDropTarget对象,这样就可以接受来自其他“窗口”发来的拖拽消息。
“窗口”,在Windows中是一个广义的概念,它泛指一切可见的窗口和控件,包括窗口、按钮、图片等等这些可见的有效地部件,都可认为是Windows的“窗口”。从技术层面上看,每一个窗体(或窗口)都对应于一个CWnd类的对象,这个CWnd类的对象,包含了当前窗口的绝大多数的属性、位置信息、大小、缩放甚至当前描述的拖拽信息。
由于Windows的UI(User Interface,用户界面),都是基于“窗口”进行展示的,Windows内部的拖拽,也可以认为是各个“窗口”之间进行数据交换的一种形式。图1描述了一个简单的Windows拖拽模型,该应用程序完全架构在Windows框架下,并使用微软的标准控件,其拖拽流程如图2所示,包括:
步骤201,拖拽源向全局发送拖拽消息,并将传送的数据放置在剪贴板中。
其中,拖拽源是发起拖拽的窗口,它可通过消息机制向全局发送拖拽消息。
步骤202,用户拖动鼠标移动拖拽对象的过程中,每次移动鼠标,都能够根据鼠标的位置以及窗口的位置,计算出当前鼠标所属的窗口(即目标窗口),并向目标窗口发送拖拽消息。其中,可能经历若干个可接受拖拽的目标窗口1,2...,n,如果在当前目标窗口用户没有放下鼠标,那么可接受拖拽的窗口只是根据当前剪贴板中的内容进行相应的绘制。
步骤203,当用户在某一个可以接受拖拽的目标窗口发下鼠标时,当前目标窗口处理这个拖拽消息,从剪贴板中获取数据并进行处理。
Windows中,所有的“窗口”都是基于CWnd的对象。由于OLE可以绑定在CWnd对象上,所以所有窗口都可以设计成为可以接受拖拽的模式。OLE处理机制的基本原理主要是:
如果要作为拖拽目标,需要注册拖拽入口(ColeDropTarget对象),该入口定义有各种鼠标操作处理的入口函数,当应用程序窗口接收到拖拽消息后,可以根据ColeDropTarget对象调用相应的拖拽操作函数,从而实现对象的拖拽效果;如果要作为源发起拖拽,在注册了拖拽入口以后,可通过重写ColeDropSource的OnBeginDrag()函数来发起一个拖拽动作。
在ColeDropTarget类中,包括以下几种虚函数:
virtual DROPEFFECT OnDragEnter(CWnd* pWnd,COleDataObject*pDataObject,DWORD dwKeyState,CPoint point);
virtual DROPEFFECT OnDragOver(CWnd* pWnd,COleDataObject*pDataObject,DWORD dwKeyState,CPoint point);
virtual BOOL OnDrop(CWnd* pWnd,COleDataObject* pDataObject,DROPEFFECT dropEffect,CPoint point);
virtual void OnDragLeave(CWnd* pWnd);
其中,CWnd是ColeDropTarget绑定的窗口。可以通过派生ColeDropTarget的类的子类来重写上述4个函数,以实现自己的目标(如被拖拽对象的现实效果)。
OnDragEnter在鼠标在拖拽状态下,进入窗口是激活,其中pDataObject包含了拖拽的数据,dwKeyState可以用来判断当前按键的状态(包括Ctrl,shift,alt),Point指向进入程序的鼠标位置。它会返回一个DROPEFFECT,用于指向整个拖拽过程中鼠标的样式,其中,DROPEFFECT的返回值可包括:
DROPEFFECT_COPY拷贝;
DROPEFFECT_MOVE剪贴;
DROPEFFECT_LINK快捷方式打开;
DROPEFFECT_NONE不响应。
OnDragOver在鼠标在窗口拖拽的过程中进行响应,参数说明和DragEnter类似;
OnDrop指在窗口中,放开鼠标左键,相应拖拽结束的Drop命令,是主要的程序处理函数入口;
OnDragLeave在拖拽过程中鼠标离开窗口时响应。
通过注册拖拽入口并处理以上4个函数,就可以充当一个拖拽目标角色,接受拖拽消息。
本发明的实施例,根据上述现有技术中完全在Windows架构下的应用程序的拖拽实现机制,提供了一种拖拽操作在应用程序内部外部的无缝连接的实现机制,解决了Windows桌面应用程序之间内容相互拖拽的技术实现,可以实现几种同一类型应用程序之间内容的相互拖拽,方便了用户的操作。本发明的以下实施例,以OLE技术为基础、利用WM_DROPFILE消息为例,描述了基于Windows系统的对象拖拽实现方法及其系统。
下面以QQ影像应用程序为例,并结合附图对本发明实施例进行详细描述。
本发明实施例中,在QQ影像应用程序内部,拖拽是参照Windows的拖拽机制进行的。即,作为QQ影像应用程序的一个“窗口”(该“窗口”的定义类似Windows“窗口”的定义),它的拖拽实现与完全基于微软控件的应用程序的实现机制类似。具体的,对于QQ影像应用程序的内部窗口,如果需要接受或者发起拖拽,则需要注册一个CQDragData对象()作为拖拽入口对象,绑定在该窗口上。CQDragData类中定义有各种拖拽操作(Drag)的函数入口信息,例如,CQDragData类的定义可以是:
{
CRect m_rcDragRect_LP;//用于显示Drag的区域
//Return if Break;default=TRUE;
cbpfn_b_p_l m_OnStartDrag;//Drag启动
cbpfn_v_p_l m_OnDraging;//Drag进行
cbpfn_v_p_l m_OnStopDrag;//Drag结束
}
其中,m_OnStartDrag,m_OnDragging和m_OnStopDrag分别是Drag启动事件、Drag进行事件和Drag结束事件的入口函数,通过定义该三个事件的执行方法可实现在QQ影像应用程序内部拖拽的发起(包括启动和接受)、拖拽在窗口中经过时表现的状态以及拖拽结束以后的处理。
本发明实施例中,对于QQ影像应用程序与外部应用程序之间的拖拽实现,可采用如下方式:类似于QQ影像应用程序这类没有基于Windows标准控件进行开发的应用程序,为了作为一个Windows的窗口展现本身,需要在底层绑定CWnd对象进行处理,利用这个CWnd来捕获windows的全局消息。具体的,可如图3所示,QQ影像应用程序在底层绑定了一个CWnd作为root,在上层不停地叠加窗口,来实现各色各样的UI。底层的CWnd可以获取WM_MOUSEMOVE、WM_LBUTTONUP等类似的全局消息,然后由root向下派发来进行多叉树的后续遍历,这样进行消息传递。当根据鼠标位置判断当前拖拽是从QQ影像应用程序移动到外部应用程序时,则触发与QQ影像应用程序底层绑定的对象(如图中所示的ColeDataTarget)所定义的鼠标事件进行处理。
QQ影像应用程序内外部的链接机制,主要是基于对QQ影像应用程序对应的CWnd的位置以及鼠标位置进行判断实现的。具体的,如图4所示,当根据鼠标位置和QQ影像应用程序窗口位置判断拖拽是从外部程序到QQ影像应用程序内部时(如从外目的窗口1到QQ影像系统),调用与QQ影像应用程序内部各窗口绑定的CQDragData对象中定义的鼠标事件进行处理,实现QQ影像应用程序内部的拖拽;当根据鼠标位置和QQ影像应用程序窗口位置判断拖拽是从QQ影像应用程序到外部程序时(如QQ影像系统到外目的窗口2),调用与QQ影像应用程序底层绑定的Cwnd对象所定义的鼠标事件进行处理,实现从QQ影像应用程序到外部的拖拽;当根据鼠标位置和QQ影像应用程序窗口位置判断拖拽是在QQ影像应用程序内部的各窗口进行时(如从内目的窗口1到内目的窗口2),调用与QQ影像应用程序内部各窗口绑定的CQDragData对象中定义的鼠标事件进行处理,实现QQ影像应用程序内部的拖拽。
参见图5,为本发明实施例提供的基于Windows系统的对象拖拽实现流程示意图。该流程的应用场景是:从QQ影像应用程序内部到外部的拖拽,即,用户在QQ影像应用程序中选择一QQ影像,将其从QQ影像应用程序的区域拖拽出去,再将其拖拽回QQ影像应用程序区域内。其中,QQ影像应用程序的底层窗口绑定了Cwnd类对象ColeDataTarget,QQ影像应用程序的各内部窗口绑定了CQDragData对象。ColeDataTarget对象和CQDragData对象的定义可如前所述。如图5所示,本发明实施例提供的应用程序拖拽流程,可包括:
步骤501,当用户在QQ影像应用程序内部点击一QQ影像准备拖拽时,根据鼠标当前位置和QQ影像应用程序窗口位置判断鼠标操作是在QQ影像应用程序内部进行,因此触发CQDragData对象中的OnStartDrag事件入口函数执行拖拽开始方法。拖拽开始方法的操作可包括将数据(如图片数据或图片路径)放入剪贴板中。
步骤502,在QQ影像应用程序内部拖拽过程中,针对QQ影像应用程序内部各个可以接受拖拽的窗口,由于根据鼠标当前位置和QQ影像应用程序窗口位置判断出当前拖拽是在QQ影像应用程序内部进行的,因此触发CQDragData对象中的OnDragging事件入口函数执行拖拽进行方法。拖拽进行方法的操作可包括根据剪贴板中保存的数据绘制拖拽效果。
步骤503,如果内部拖拽不结束(用户没有松开鼠标),并且随着鼠标拖拽逐步的移动,被拖拽对象离开了当前的客户区(即离开了QQ影像应用程序窗口区域),那么此时结束内部的拖拽,也就是不再发起内部拖拽消息,而是以当前的QQ影像的CWnd对象作为发起源,触发CWnd类对象ColeDataTarget所定义的鼠标事件入口函数开始执行外部拖拽。其中,是否离开QQ影像应用程序窗口区域可根据鼠标位置和QQ影像应用程序窗口位置确定。外部拖拽的流程可如图2所示的方式实现。
其中,如果用户在QQ影像应用程序窗口外部按住鼠标继续移动,则鼠标移动过程中途径的窗口接收到全局消息后,根据外部程序的拖拽入口对象触发该外部程序的拖拽进行事件(如OnDragOver)执行拖拽进行方法。该方法可包括根据剪贴板中存储的数据绘制拖拽效果;
如果用户在QQ影像应用程序窗口外部放开鼠标,则该鼠标操作的目标窗口接收到全局消息后,根据外部程序的拖拽入口对象触发该外部程序的拖拽结束事件(如OnDrop)执行拖拽结束方法。该方法可包括根据剪贴板中存储的数据进行相应操作,如拷贝或剪贴等。
步骤504,如果此时用户再次将QQ影像拖动回来,那么直接关闭外部程序的拖拽(包括停止发送全局拖拽消息),启动QQ影像应用程序内部拖拽(包括向QQ影视应用程序的内部窗口发送拖拽消息)。具体的,当根据鼠标位置和QQ影视应用程序窗口位置判断拖拽是从外部程序到QQ影像应用程序内部时,停止发送全局拖拽消息,而是向QQ影像应用程序内部的目标窗口发送拖拽消息,并调用与目标窗口绑定的CQDragData对象中定义的鼠标事件进行相应处理。因为被拖拽对象(QQ影像)的相关数据都在剪贴板中保存,因此可以实时的取出待显示的数据生成拖拽效果。其内部拖拽的实现与步骤502或步骤503相似,在此不再赘述。
其中,关于内部拖拽源的选取,可创建一个虚拟的没有大小的窗口作为源,来完成内部的拖拽工作。由于对于不管是内部还是外部的鼠标事件,都需要有一个拖拽源,也就是发起拖拽的一方和一个拖拽的目标,而对于上述从外拖拽回来的数据,因为已经失去了原本内部的拖拽源,因此需要给它建立一个虚拟的拖拽源,也就是一个虚拟窗口作为这一次拖拽的发起源。
通过以上描述可以看出,通过在使用非Windows标准控件实现的应用程序的底层窗口绑定Windows CWnd对象,在该应用程序中各可接受拖拽的窗口绑定自定义的对象;在拖拽过程中,根据鼠标当前位置和应用程序的底层窗口位置,判断拖拽是在该应用程序内部进行还是从该应用程序到其他应用程序,并根据不同的判断结果进行不同的处理;其中,对于内部拖拽,向该应用程序内部的目标窗口发送拖拽消息,使目标窗口根据与其绑定的自定义对象调用相应的鼠标事件处理函数进行相应处理;对于从内部到外部的拖拽,停止向该应用程序内部各可接受拖拽的窗口发送拖拽消息,并以与该应用程序的底层窗口绑定的CWnd对象作为发起源,发送全局拖拽消息,以使其他应用程序根据拖拽消息调用相应的鼠标事件处理函数进行相应处理,从而将应用程序的拖拽机制与Windows系统的拖拽机制相结合,提高了拖拽操作灵活性。
基于相同的技术构思,本发明实施例还提供了一种应用于上述流程的基于Windows系统的对象拖拽实现系统。
参见图6,为本发明实施例中基于Windows系统的对象拖拽实现系统的结构示意图,该系统可应用于使用未基于Windows标准控件实现的应用程序,该系统可包括:
注册模块601,用于在所述应用程序的底层窗口绑定第一对象,在该应用程序中各可接受拖拽的窗口绑定第二对象;其中,所述第一对象为WindowsCWnd,所述第二对象为非Windows标准对象,所述第一对象和所述第二对象中定义有指向鼠标事件处理函数的鼠标事件入口函数;
判断模块602,用于在拖拽过程中,根据鼠标当前位置和所述应用程序的底层窗口位置,判断拖拽是在所述应用程序内部进行,还是从所述应用程序到其他应用程序;
处理模块603,用于当判断模块603判断拖拽是在所述应用程序内部进行时,向所述应用程序内部的目标窗口发送拖拽消息,使目标窗口根据与其绑定的第二对象调用相应的鼠标事件处理函数进行相应处理;当判断模块602判断拖拽是从所述应用程序到其他应用程序时,停止向所述应用程序内部各可接受拖拽的窗口发送拖拽消息,并以与所述应用程序的底层窗口绑定的CWnd对象作为发起源,发送全局拖拽消息,以使所述其他应用程序根据所述拖拽消息调用相应的鼠标事件处理函数进行相应处理。
上述系统中,第二对象中定义有拖拽开始事件入口函数;相应的,处理模块603可当所述目标窗口在接收到表示拖拽开始的鼠标消息时,根据与其绑定的第二对象中定义的拖拽开始事件入口函数,通过调用对应的拖拽开始处理函数,将被拖拽对象的数据存储于剪贴板。
上述系统中,第二对象中定义有拖拽进行事件入口函数;相应的,处理模块603可当所述目标窗口在接收到表示拖拽进行的鼠标消息时,根据与其绑定的第二对象中定义的拖拽进行事件入口函数,通过调用对应的拖拽进行处理函数,使用剪贴板中存储的数据绘制被拖拽对象。
上述系统中,第二对象中还定义有拖拽结束事件入口函数;相应的,处理模块603可当所述目标窗口在接收到表示拖拽结束的鼠标消息时,根据与其绑定的第二对象中定义的拖拽结束事件入口函数,通过调用对应的拖拽结束处理函数进行相应处理。
上述系统中,处理模块603还可当所述判断模块根据鼠标当前位置和所述应用程序的底层窗口位置判断拖拽是从其他应用程序到所述应用程序时,停止发送全局拖拽消息,向所述应用程序内部的目标窗口发送拖拽消息,使所述应用程序内部的目标窗口根据与其绑定的第二对象调用相应的鼠标事件处理函数进行相应处理。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
Claims (10)
1.一种基于Windows系统的对象拖拽实现方法,应用于使用未基于Windows标准控件实现的应用程序,其特征在于,包括以下步骤:
在所述应用程序的底层窗口绑定第一对象,在该应用程序中各可接受拖拽的窗口绑定第二对象;其中,所述第一对象为Windows CWnd,所述第二对象为非Windows标准对象,所述第一对象和所述第二对象中定义有指向鼠标事件处理函数的鼠标事件入口函数;
在拖拽过程中,当根据鼠标当前位置和所述应用程序的底层窗口位置,判断拖拽是在所述应用程序内部进行时,向所述应用程序内部的目标窗口发送拖拽消息,使目标窗口根据与其绑定的第二对象调用相应的鼠标事件处理函数进行相应处理;
当根据鼠标当前位置和所述应用程序的底层窗口位置判断拖拽是从所述应用程序到其他应用程序时,停止向所述应用程序内部各可接受拖拽的窗口发送拖拽消息,并以与所述应用程序的底层窗口绑定的CWnd对象作为发起源,发送全局拖拽消息,以使所述其他应用程序根据所述拖拽消息调用相应的鼠标事件处理函数进行相应处理。
2.如权利要求1所述的方法,其特征在于,所述第二对象中定义有拖拽开始事件入口函数;
所述目标窗口根据与其绑定的第二对象调用相应的鼠标事件处理函数进行相应处理,包括:
所述目标窗口在接收到表示拖拽开始的鼠标消息时,根据与其绑定的第二对象中定义的拖拽开始事件入口函数,通过调用对应的拖拽开始处理函数,将被拖拽对象的数据存储于剪贴板。
3.如权利要求1所述的方法,其特征在于,所述第二对象中定义有拖拽进行事件入口函数;
所述目标窗口根据与其绑定的第二对象调用相应的鼠标事件处理函数进行相应处理,包括:
所述目标窗口在接收到表示拖拽进行的鼠标消息时,根据与其绑定的第二对象中定义的拖拽进行事件入口函数,通过调用对应的拖拽进行处理函数,使用剪贴板中存储的数据绘制被拖拽对象。
4.如权利要求2或3所述的方法,其特征在于,所述第二对象中还定义有拖拽结束事件入口函数;
所述目标窗口根据与其绑定的第二对象调用相应的鼠标事件处理函数进行相应处理,包括:
所述目标窗口在接收到表示拖拽结束的鼠标消息时,根据与其绑定的第二对象中定义的拖拽结束事件入口函数,通过调用对应的拖拽结束处理函数进行相应处理。
5.如权利要求1所述的方法,其特征在于,该方法还包括:
当根据鼠标当前位置和所述应用程序的底层窗口位置判断拖拽是从其他应用程序到所述应用程序时,停止发送全局拖拽消息,向所述应用程序内部的目标窗口发送拖拽消息,使所述应用程序内部的目标窗口根据与其绑定的第二对象调用相应的鼠标事件处理函数进行相应处理。
6.一种基于Windows系统的对象拖拽实现系统,应用于使用未基于Windows标准控件实现的应用程序,其特征在于,所述系统包括:
注册模块,用于在所述应用程序的底层窗口绑定第一对象,在该应用程序中各可接受拖拽的窗口绑定第二对象;其中,所述第一对象为Windows CWnd,所述第二对象为非Windows标准对象,所述第一对象和所述第二对象中定义有指向鼠标事件处理函数的鼠标事件入口函数;
判断模块,用于在拖拽过程中,根据鼠标当前位置和所述应用程序的底层窗口位置,判断拖拽是在所述应用程序内部进行,还是从所述应用程序到其他应用程序;
处理模块,用于当所述判断模块判断拖拽是在所述应用程序内部进行时,向所述应用程序内部的目标窗口发送拖拽消息,使目标窗口根据与其绑定的第二对象调用相应的鼠标事件处理函数进行相应处理;当所述判断模块判断拖拽是从所述应用程序到其他应用程序时,停止向所述应用程序内部各可接受拖拽的窗口发送拖拽消息,并以与所述应用程序的底层窗口绑定的CWnd对象作为发起源,发送全局拖拽消息,以使所述其他应用程序根据所述拖拽消息调用相应的鼠标事件处理函数进行相应处理。
7.如权利要求6所述的系统,其特征在于,所述第二对象中定义有拖拽开始事件入口函数;
所述处理模块具体用于,当所述目标窗口在接收到表示拖拽开始的鼠标消息时,根据与其绑定的第二对象中定义的拖拽开始事件入口函数,通过调用对应的拖拽开始处理函数,将被拖拽对象的数据存储于剪贴板。
8.如权利要求6所述的系统,其特征在于,所述第二对象中定义有拖拽进行事件入口函数;
所述处理模块具体用于,当所述目标窗口在接收到表示拖拽进行的鼠标消息时,根据与其绑定的第二对象中定义的拖拽进行事件入口函数,通过调用对应的拖拽进行处理函数,使用剪贴板中存储的数据绘制被拖拽对象。
9.如权利要求7或8所述的系统,其特征在于,所述第二对象中还定义有拖拽结束事件入口函数;
所述处理模块还用于,当所述目标窗口在接收到表示拖拽结束的鼠标消息时,根据与其绑定的第二对象中定义的拖拽结束事件入口函数,通过调用对应的拖拽结束处理函数进行相应处理。
10.如权利要求6所述的系统,其特征在于,所述处理模块还用于,当所述判断模块根据鼠标当前位置和所述应用程序的底层窗口位置判断拖拽是从其他应用程序到所述应用程序时,停止发送全局拖拽消息,向所述应用程序内部的目标窗口发送拖拽消息,使所述应用程序内部的目标窗口根据与其绑定的第二对象调用相应的鼠标事件处理函数进行相应处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010576351.9A CN102566983B (zh) | 2010-12-07 | 2010-12-07 | 基于Windows系统的对象拖拽实现方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010576351.9A CN102566983B (zh) | 2010-12-07 | 2010-12-07 | 基于Windows系统的对象拖拽实现方法及其系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102566983A true CN102566983A (zh) | 2012-07-11 |
CN102566983B CN102566983B (zh) | 2016-04-20 |
Family
ID=46412498
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010576351.9A Active CN102566983B (zh) | 2010-12-07 | 2010-12-07 | 基于Windows系统的对象拖拽实现方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102566983B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103019552A (zh) * | 2012-11-21 | 2013-04-03 | 北京奇虎科技有限公司 | 一种数据处理系统 |
CN103019692A (zh) * | 2012-11-21 | 2013-04-03 | 北京奇虎科技有限公司 | 一种针对功能入口的处理的方法和装置 |
CN103902325A (zh) * | 2012-12-28 | 2014-07-02 | 北京新媒传信科技有限公司 | 实现窗口同步的方法和装置 |
CN104331236A (zh) * | 2014-09-30 | 2015-02-04 | 珠海市君天电子科技有限公司 | 一种多个窗口的绑定拖动方法及装置 |
CN107861104A (zh) * | 2017-10-31 | 2018-03-30 | 北京无线电测量研究所 | 一种基于拖拽的雷达目标开窗跟随显示方法及系统 |
CN110874276A (zh) * | 2018-08-31 | 2020-03-10 | 杭州海康威视系统技术有限公司 | 一种跨进程通信方法、装置及计算机可读存储介质 |
CN110879677A (zh) * | 2018-09-06 | 2020-03-13 | 武汉斗鱼网络科技有限公司 | 一种窗口界面消息的管理方法以及相关设备 |
CN111813566A (zh) * | 2019-04-30 | 2020-10-23 | 厦门雅基软件有限公司 | 跨进程的拖拽方法、装置、设备及计算机可读存储介质 |
CN115309294A (zh) * | 2022-07-08 | 2022-11-08 | Oppo广东移动通信有限公司 | 会话消息发送方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020120673A1 (en) * | 2000-05-08 | 2002-08-29 | Michael Tolson | Architecture for a system of portable information agents |
CN101452403A (zh) * | 2008-12-19 | 2009-06-10 | 北京数码大方科技有限公司 | 拖拽支持方法和装置 |
CN101467139A (zh) * | 2006-06-09 | 2009-06-24 | 微软公司 | 在本地和远程模块之间拖放对象 |
-
2010
- 2010-12-07 CN CN201010576351.9A patent/CN102566983B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020120673A1 (en) * | 2000-05-08 | 2002-08-29 | Michael Tolson | Architecture for a system of portable information agents |
CN101467139A (zh) * | 2006-06-09 | 2009-06-24 | 微软公司 | 在本地和远程模块之间拖放对象 |
CN101452403A (zh) * | 2008-12-19 | 2009-06-10 | 北京数码大方科技有限公司 | 拖拽支持方法和装置 |
Non-Patent Citations (1)
Title |
---|
李晋华,杨甫勤,段志坚,刘文开: "应用程序内通用拖放管理框架的实现", 《电脑知识与技术》 * |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103019692A (zh) * | 2012-11-21 | 2013-04-03 | 北京奇虎科技有限公司 | 一种针对功能入口的处理的方法和装置 |
CN103019552A (zh) * | 2012-11-21 | 2013-04-03 | 北京奇虎科技有限公司 | 一种数据处理系统 |
CN103019552B (zh) * | 2012-11-21 | 2015-11-11 | 北京奇虎科技有限公司 | 一种数据处理系统 |
CN103019692B (zh) * | 2012-11-21 | 2016-09-28 | 北京奇虎科技有限公司 | 一种针对功能入口的处理的方法和装置 |
CN103902325B (zh) * | 2012-12-28 | 2017-04-05 | 北京新媒传信科技有限公司 | 实现窗口同步的方法和装置 |
CN103902325A (zh) * | 2012-12-28 | 2014-07-02 | 北京新媒传信科技有限公司 | 实现窗口同步的方法和装置 |
CN104331236A (zh) * | 2014-09-30 | 2015-02-04 | 珠海市君天电子科技有限公司 | 一种多个窗口的绑定拖动方法及装置 |
CN104331236B (zh) * | 2014-09-30 | 2017-09-05 | 珠海市君天电子科技有限公司 | 一种多个窗口的绑定拖动方法及装置 |
CN107861104A (zh) * | 2017-10-31 | 2018-03-30 | 北京无线电测量研究所 | 一种基于拖拽的雷达目标开窗跟随显示方法及系统 |
CN110874276A (zh) * | 2018-08-31 | 2020-03-10 | 杭州海康威视系统技术有限公司 | 一种跨进程通信方法、装置及计算机可读存储介质 |
CN110874276B (zh) * | 2018-08-31 | 2023-02-28 | 杭州海康威视系统技术有限公司 | 一种跨进程通信方法、装置及计算机可读存储介质 |
CN110879677A (zh) * | 2018-09-06 | 2020-03-13 | 武汉斗鱼网络科技有限公司 | 一种窗口界面消息的管理方法以及相关设备 |
CN111813566A (zh) * | 2019-04-30 | 2020-10-23 | 厦门雅基软件有限公司 | 跨进程的拖拽方法、装置、设备及计算机可读存储介质 |
CN111813566B (zh) * | 2019-04-30 | 2023-01-31 | 厦门雅基软件有限公司 | 跨进程的拖拽方法、装置、设备及计算机可读存储介质 |
CN115309294A (zh) * | 2022-07-08 | 2022-11-08 | Oppo广东移动通信有限公司 | 会话消息发送方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102566983B (zh) | 2016-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102566983A (zh) | 基于Windows系统的对象拖拽实现方法及其系统 | |
JP6172537B2 (ja) | 連携リモートアプリケーション共有および会議のための方法およびシステム | |
US8291042B2 (en) | On-demand groupware computing | |
CN110515576A (zh) | 显示控制方法及装置 | |
US20160100036A1 (en) | System, method, server and device for trial use of application software | |
CN107786730A (zh) | 一种任务管理方法及终端 | |
CN102421028B (zh) | 智能电视的控制方法、智能电视、遥控装置及控制系统 | |
CN108159697B (zh) | 虚拟对象传送方法及装置、存储介质、电子设备 | |
CN104780458A (zh) | 一种即时视频中的特效加载方法和电子设备 | |
CN103294559B (zh) | 移动终端的应用交互方法和系统 | |
US20120047449A1 (en) | Integrating a user browsing feed into a co-browsing session | |
CN106293338A (zh) | 多媒体文件分享方法和系统 | |
CN102637127B (zh) | 一种控制鼠标模块的方法及电子设备 | |
CN113407086B (zh) | 对象拖拽方法、设备和存储介质 | |
CN103809857A (zh) | 一种信息处理方法及电子设备 | |
US11256400B2 (en) | Terminal, split-screen display method for screen thereof, and storage device | |
CN104995927A (zh) | 用于构建和使用混合移动应用的系统和方法 | |
CN106850719A (zh) | 一种数据传输方法及装置 | |
US9300610B2 (en) | System and method for selecting a file stored on a cloud server | |
CN103513858A (zh) | 远程协助方法及装置 | |
CN109828848A (zh) | 平台即服务云端服务器及其多用户操作方法 | |
CN102331944A (zh) | 基于电子商店的应用程序添加方法 | |
WO2023077951A1 (zh) | 数据渲染方法及装置 | |
CN105493018A (zh) | 用于触控板操纵和双击缩放的独立命中测试 | |
CN102880382B (zh) | 一种界面展示系统、方法和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |