扩展COleDropTarget类来支持任意窗口拖放 - 作者:王加宝,扩展COleDropTarget类来支持任意窗口拖放 - 作者:王加宝
【 tulaoshi.com - C语言心得技巧 】
二、拖放扩展类运行原理
我们知道,使用消息是可以传递信息的。对于复杂的结构,可以通过在消息参数中传递结构的指针来传递结构信息。因此,在COleDropTarge扩展类响应拖放成员函数中,将拖放信息打包,存入拖放信息类中,向注册了拖放功能的控制窗口发送用户自定义消息,并传递拖放信息类地址。在窗口类中,映射该自定义消息到消息响应函数中,在该函数中,将消息参数转换回拖放信息类指针,以此来获得拖放信息,进行相应操作后,返回对拖放操作的控制信息。这样,经过将MFC对拖放操作的函数调用转化为类型无关的对窗口的消息发送,扩展的拖放目标类便具有了与拖放窗口类无关的特性,而且这种消息机制符合程序编写习惯。
三、实例实现
下面我们通过一个程序实例来说明该扩展类的使用。在这个实例中演示几个通过嵌入COleDropTargetEx类方便的获得了拖放能力的控件,这里只介绍支持拖放的编辑控件的编程过程,其它控件过程类似。
利用AppWizard新建一工程"DropExDemo",选择基于对话框的应用,其它可取默认值。
将本文附录中拖放目标扩展类COleDropTargetEx的头文件与实现文件添加到工程中。
为了实现支持拖动的编辑框控制,从CEdit继承一新类CDropEdit。
添加如下成员变量与成员函数到CDropEdit类声明中并在文件首包含COleDropTargetEx类的头文件。
public:virtual BOOL Register(); // Generated message map functionsprotected: COleDropTargetEx m_dropEx;virtual BOOL OnDrop(WPARAM pDropInfoClass, LPARAM lParm); virtual DROPEFFECT OnDropEx(WPARAM pDropInfoClass, LPARAM lParm); virtual DROPEFFECT OnDragOver(WPARAM pDropInfoClass,LPARAM lParm);在实现文件中添加消息映射如下:
来源:http://www.tulaoshi.com/n/20160129/1483557.html
看过《扩展COleDropTarget类来支持任意窗口拖放 - 作者:王加宝》的人还看了以下文章 更多>>